Essay 1 - All Software Problems are Large or Complex
All software problems are large or complex as a
direct result of the tremendous reuse potential of software. Consider two
alternatives:
- The problem is
relatively well understood. Solution: locate an open source or commercial
solution and use or adapt that solution.
- The problem is not well understood. Solution: study enough to realize that
existing solutions are not appropriate. The problem will be like existing
problems, but different enough that existing solutions are inappropriate. The
use or adapt possibilities are limited or
non-existent.
The consequence is the
need for a disciplined approach to software problem-solving. This is a step
removed from the technical mastery of tools. A skilled programmer may not
always be a good problem solver. We know that skilled tool-users often have
their vision narrowed by their tools: “If all you have is a hammer, every
problem looks like a nail.”
Let’s talk
about Armour’s Five Orders of Ignorance:
- 0 - When you already know. In this case,
you either have software or have a complete design for software. You can
construct the software with no mysteries about business problem, software
solution, technology stack or productivity.
- 1 - When you know that you don’t know.
These are configuration parameters for a product. Things are well-understood;
so well understood that you have a checklist and that is a framework for your
ignorance. The list of parameters is defined, you only need to supply the
values.
- 2 - When you don’t know what you don’t
know. This is where custom software starts. If you knew what you were doing,
you’d download it. You know that you can’t download it: either because you
don’t really know what you’re doing, or you were hoping for a mythical perfect
fit between problem and available solutions. Since you don’t know what you
don’t know, you assume the gaps can be bridged only by custom
software.
- 3 - When you don’t even have a process
for identifying your knowledge gaps. This is why we can’t find a applicable
existing software package.
- 4 - When you don’t even know that there
is ignorance. That’s precisely the level of bravado needed to write custom
software.