First publication | 22 May 2024 |
Edits | 23 July 2024 |
Note: I'm continuously improving this article, and intend to add diagrams and working examples.
If you're managing a practice, a manufacturing process, or a business function, you want them to perform the best they can be.
To do that, responsible people need to be confident in their work, and be agents of their own success to know when they can improve the usual way of doing things. Successful leaders guide their practice members to take action to improve.
Here, I'll advocate for continuous improvement, collaborative trust and agency for responsible colleagues, and servant leadership to guide practice. I'll also describe systems and abstract methods that support principles of good practice, and create foundations for successful digital transformation.
If your objective is to produce something more than once, you'll want to achieve a minimum standard every time. This is the core of quality. Everything you do should serve good output consistently. Know when you don't, and manage failure.
Standards are a statement of what you want to achieve with every item of work. If you're starting out or working towards better ways of working, standards can be aspirational, or if you're a mature practice, they're a specification for delivery.
Begin with the biggest picture in your area of responsibility. If that serves a customer need, focus on how you achieve that.
Your minimum viable product ("MVP") is what you need to output, to fulfil your customer's needs. When you list out the characteristics of everything you need to deliver, you have a standard. It's also an output specification.
Everything you do should serve delivering the output specification. To do that well every time, you'll need other people to do some things before you can begin work to deliver that. This is your input specification. For example, you might need a purchase order, a design brief, a delivery date, and some data about the customer.
[diagram]
For your area of responsibility, you need to transform inputs into outputs, using your process. Your process has "good quality" when you can validate your work, verify it against expectations, and deliver it to match the output specification.
Good quality means happy customers, provided you've set customer expectations well and defined adequate standards for delivery.
Good quality isn't only about standards and workflows. It includes ways of working and values:
The module is a powerful abstraction. It provides:
We can call this block a module. For workflows, you can link modules to create supply chains, or you can examine a process as a chain of sub-modules. Treat sub-modules like modules.
Create chains where the output serves the input of the next step. Output should exactly match the next input.
If you have mismatches between an output and its next input, then the person responsible for the second module has to do extra work to make the input conform to their needs. This causes inefficiency, and can add costs and delays.
You can merge matching input and output interfaces, to become a specification. The output of Process 1 conforms to the specification, and Process 2 needs input that complies with the specification.
Where a module needs to wait for two supply chains, you can compose specifications into the input.
You can expand a module into a chain of its own, where the input of the first submodule matches the input of the process, and correspondingly, output of the last submodule matches the output of the process.
You can fall into a trap, of creating subworkflows to a fine level of detail. Sometimes that's not necessary. Where it might be necessary:
This article has mostly covered workflow architecture. Users might better understand a simplified workflow diagram or flowchart.
You can show workflows by privileging status or by privileging process. I prefer the convention where I represent:
I arrange the workflow in a grid with dimensions:
[diagram]
The vertical crossings between bands identify points where critical communication keeps the work flowing.
For a complete workflow, add:
For digital transformation, you need data architecture that mimics the state of the workflow. In trivial systems, where the workflow is linear and without branches, you can represent state as a single value.
For more complicated systems, with more than one concurrent workflow path, a single status doesn't give you the full picture, unless you define milestones on the main path that the other paths converge upon. For detailed progress reports, you need to store completion state for each module, and report on the progress of each possible path.
Directed graphs let you navigate a workflow. For each module, you maintain a list of dependent modules. You can have more than one dependent module for any given module, and one module can enable many others to start.
That's a many-to-many relationship, which you can represent with a linking table.
Module | Must-do module | Asynchronous* |
3 | 1 | false |
3 | 2 | false |
To implement sub-workflows with asynchronous inputs, you can add a Boolean asynchronous
property to the above table to indicate that an input is not required yet, and allow work to start when all other asynchronous = false
dependent modules are complete. If you're implementing service level agreements (SLAs), you might want a module for resolving this external input, as a start trigger for SLA events.
Store the above must-do structure as an array of records in the workflow scope. Alternatively, with more traversal work but better object containment, you can link between modules with linked list patterns, where you store an array of foreign module identifiers in each module.
So far, we've described a workflow as an directed set of instructions and intermediate targets, to achieve a result at the end. This is like a template. When it comes to doing the work, we'll need a fresh copy of the template, so we can fill in details as we go. The instantiated copy is a stateful record of work, and we store it for future analysis.
Process modules are:
Other definitions