The Universal Yardstick: Creating a Vision – Software Development by Oral Tradition

One of my favorite terms about software projects is the notion of “progressive elaboration”: software development, as a knowledge-acquiring activity, requires an approach where we over and over again refine what we do: what we do in development, how the UI looks, which languages and locales to support, how to handle roll-out and documentation and testing and a hundred other things. In order not to end up in an infinite loop, the first thing we need in any software project is a vision that guides everything else we do. Of course, that vision should not just be in one head, it should be shared across the entire project team so that it can guide and coordinate all the activities of the entire team.
Continue reading The Universal Yardstick: Creating a Vision – Software Development by Oral Tradition

Software Development by Oral Tradition

One of my favorite quotes about software development is that “software development is not a product-producing activity, it is a knowledge-acquiring activity” (Phillip G. Armour, “The Five Orders of Ignorance”, CACM 10/2000).

One of the consequences is that there are fundamentally two types of “bugs” or defects: (1) “we” know how it should work, but have messed up reflecting that knowledge in the software, and (2) the software accurately reflects our knowledge, but our knowledge is in some way “defect”. Plus, there is another one: Practically all relevant software is developed in teams, and there is a chance for misunderstandings between the individuals comprising the teams.

A lot has been thought and written and invented around getting rid of these misunderstandings. So far, none of it works reliably: at the very least, the task at hand and the people on the team should determine the choice of method (and, especially in large corporations, doesn’t).
Continue reading Software Development by Oral Tradition