Software architects work with business leaders to design software based upon business requirements. A common problem is that our customers sometimes provide a specification of how the software should work instead of what it is supposed to accomplish. Providing a functional or technical specification limits our flexibility to do design.
A good way to avoid this is to start the design process by asking about why the software is being created. What are the major objectives? These are the critical success factors.
Designing software is similar to designing other things and I find that, to see software design concepts more clearly, it helps to get out of the software space and free our minds from the software mindset and software-speak that has settled around our minds like a fence.
So let’s design a fence!
DISCLAIMER: I know very little about fences, cows or deer. The story is only meant to illustrate the concepts of critical success factors, business capabilities, projects, and maturity models.
Why? Who needs the fence? Answer: A rancher.
Why does he want a fence? Answer: To keep his cows on his field.
Wait…the rancher has though of another reason he needs a fence…he wants to keep deer off of his field.
When does he need it? Answer: He needs to expand his field as soon as possible. This only involves adult cattle at this point. At most, this needs to be completed in 2 months. He expects to have calves starting in the spring — about 3 months from now. He needs to keep deer off his field during the winter — starting in about 6 months from now.
So let us summarize the critical success factors as required business capabilities:
- In 2 months: Ability to fence in adult cattle
- In 3 months: Ability to fence in calves
- In 6 months: Ability to fence out deer.
Now we are ready to design the technical solution (the fence)!
What does it take to keep a cow on a field? Answer: It depends. For an adult cow it takes a single rail about 3 feet off the ground. For a calf it takes a rail about 1.5 feet off the ground.
What does it take to keep a deer off his field? Answer: This requires the other two rails (1.5 and 3 feet from the ground) AND a third rail about 4.5 feet high. The latter is required to keep the deer from jumping the fence.
There are technical requirements. Unfortunately, the three rails mentioned above will not just hang there on their own. They require vertical posts to hold them in place (infrastructure).
Now the fence is designed and we are ready to plan the work. We will deliver the new required business capabilities (enabled by the fence) in 3 projects aligned with the 3 critical success factors and the key constraint that we must have the posts in place before we can hang any rails.
In more complex initiatives there would be dozens of critical success factors, even more required business capabilities, with a web of inter-dependencies. But it is not generally necessary to have dozens of projects. It should be possible to group the required business capabilities in 3-5 groups and still satisfy all of the inter-dependencies.
For recurring industry problems consultants frequently generalize these 3-5 projects in the form of a maturity model. I will explain how/why to create a maturity model in a future post.