There’s an interesting article in the MIT Technology Review about Charles Simonyi. Simonyi a former programmer and software architect at Microsoft and at the fabled Parc Place labs, is best known (or at least most infamously known) as the creator of hungarian notation. This particular paragraph in the article caught my attention:
This was the backdrop for Simonyi’s 1977 dissertation, “Meta-Programming: A Software Production Method.” Simonyi proposed a new approach to “optimizing productivity,” in which one lead programmer, or “meta-programmer,” designed a product and defined all its terms, then handed off a blueprint to “technicians,” worker-bee programmers who would do the implementation.
To me, that sounds very much like the process of outsourcing or offshoring. In most companies that outsource their programming, an application architect or team of architects will create a massively detailed specification (the “blueprint”) that is handed off to the “worker bee” (often offshore) of the outsourcing company.
Finding out that the basic workflow for outsourcing software development is 30 years old is certainly an interesting bit of trivia, but in my opinion the more interesting question is Why do we need the “worker bee’s” at all?
I’ve read someone (I can’t remember now who) say that the problem with the Big Up Front Design model of programming is that the spec and the code are both composed of the same raw material (text). This is radically different from building a house or a bridge, where the spec is much more mailable then the eventual building material.
Why then do we continue writing specs? Why do we continue to turn these specs over to armies of oversees programmers? The specs, architectural documents, and requirements documents for most corporate software projects are mind numbingly detailed. Why do we need the worker bees?
I believe it’s because the current programming tools and languages don’t offer a high enough level of abstraction. If we were, then the difference between writing a details BUFD spec and writing the actual application should be relatively trivial. In Simonyi’s model, and to some degree in the model used by every company that outsources their development, all of the important details are worked out and specified by the “meta programmer”. So what’s left for the “worker bee’s”? Unimportant details? Fleshing out the implementation of the important details?
If fleshing out the implementation is an unskilled, mechanical task, shouldn’t we be letting the computer do that? Isn’t that what computers are for?
Outsourcing, particularly offshoring, is a temporary aberration. A symptom of the stagnation of programming tools and languages.