Software Development

Generally, construction is the art of building something. Software, just as anything man made, is constructed through an activity commonly referred to as programming. The process/activity has a lifecycle in which an idea is developed into something useful and over the years a set of standard activities/processes have been developed.

At its core it involves: planning, detailed design, coding, debugging, integration, testing. Other processes include problem definition, high level design, requirements development and maintenance. In typical software projects, construction is the most important piece because it’s guaranteed to happen, therefore a key determinant to the overall success or failure of the project. Improvement of skills of the persons involved, programmers, is therefore a huge priority i.e. productivity of a programmer. This drives the need to bridge the gap between best software engineering practice and the common practice which has led to buggy, late and over budget software.

Metaphors for Richer Understanding

“Metaphors are not just a literary technique; they are a psychological technique”, Melissa Burkley. Metaphors offer significant insight by having a profound impact on the effectiveness (or lack there of…) of solutions by showing or relating rather than telling, i.e. using a model. How well one understands the metaphors, both complimentary and conflicting, in software development is key to mastery of the discipline. They should be considered as a heuristic i.e. technique of how to look not what to find thus giving insight into programming processes and problems. Additionally, their use should be moderate and only viewed as a valuable part of the intellectual toolbox ,“Swiss Army knife”, where you know the right tool, or knife, to use for the job.


Common Software Metaphors include:

Software Penmanship: Writing Code

Developing a program is like writing an informal letter, no formal planning, figure it out as you go. For small projects with a single player, it works however for projects involving teams, it’s inadequate. For one, written software isn’t rigid and it also perpetuates the idea of throwing some away till you get it right. Ideally get it right the first time or take chances when it’s cheap, changes take time and time literally is money.

Software Farming: Growing a System

Creating software is likened to planting seeds and growing crops where every step in the process is incremental and depending on how well they’re done a bountiful harvest is abound. It’s drawback is the suggestion that there isn’t direct control in how the software develops. Software Oyster Farming: System Accretion

Closely related to farming, but relating to how an oyster makes a pearl (accretion), by gradually adding small amounts of calcium carbonate till voila! Learn how to add to your software system in small amounts i.e. incremental, iterative, adaptive or evolutionary approaches which are some of the most powerful software development concepts.

Software Construction: Building Software

Building improves on accretion through detailed guidance just like constructing physical objects e.g. houses & sky scrapers. It provides for planning, preparation and execution that vary depending on what is being built. Greater complexity and size implies greater consequences and involvement


There are many more metaphors out there and because metaphors are heuristic rather than algorithmic, they are not mutually exclusive. Use whatever stimulates your own thinking or communicates well with others on your team.