"The Fog Creek approach really is that programmers are talent... the programmers here are like the stars and the directors of a movie."
Joel Spolsky on Fog Creek Software
Having worked over the last few years on a relatively unstructured project, I have a growing angst to elaborate a clear outline by which high quality software may be produced without resorting to tears. This framework is inspired by the film production process in having distinct production phases. The key idea is to drop the notion of a 'life cycle' (which I critqued in a previous post) and instead think of a delivered product. The main difference between film and software is substantial: while film is designed to be consumed without regard to consumers feedback, software is interactive and heavily depends on user feedback. The middle ground between the two is game development, which essentially amounts to interactive entertainment though the 'feedback' is typically transitory - the purchase of games is an indication of its popularity while for software it is continuous use that demonstrates satisfaction and popularity among users.
Therefore, the goal of this outline is the finished product. Obviously, as with ordinary software practice, it is expected that the developers will offer support for a limited duration after which it will be assumed that all major operational bugs can be lived with.
Most commentators will discretise the film production process into five stages:
These five phases are distinct in time. Development must be completed prior to the commencement of pre-production and this is enabled by the producers securing financing for the project. Production is usually realised according to a strict schedule (albeit with some wiggle room contingent on prevailing circumstances such as weather, mishaps on set etc.) and may suffer considerable setbacks due to unavoidable delays. For example, in 2020, filming of Mission Impossible 7 had to be suspended multiple times due to the Covid-19 pandemic leading to significant postponement of its release stretching into 2022. Post-production can only begin once all elements are present to be assembled though the post-production team may use stubs for some of the elements which may require revision. It goes without saying, that only the completed film may be distributed.
In much the same way, I am persuaded that software production should follow a similar process. Despite the popularity of agile methodologies, I think that these disciplines and practices may apply only to one or a few of the stages. In parallel, I propose the following production process analogous to film production.
Under such a model, it will be practical for 'software studios' to have only a handful of staff employed permanently, whose main responsibilities will concentrate on the first two phases. The production and post-production phases will depend on contract staff, typically paid per project. However, the studio will need permanent staff with considerable industry experience to serve as architects and project leads who set the tone of every project. Such employees will play a vital role by utilising the studios accruing pool of libraries (visual, code, patterns, infrastructure) which accelerate the production process.
Incidentally, such an approach hints back at the oft maligned waterfall method. I think that waterfall fit well in a world that aimed to be rational prior to the exponential growth in complexity of software systems. While agile has been praised for addressing some of the pitfalls, it should be clear from the plethora of agile methodologies that no clear solution has been arrived at that is able to scale independent of the particular practitioners involved i.e. multiple practitioners given the same project may all succeed to realise the project though their contributions are unlikey to be interchangeable. To me this is a sign that there is still considerable room for growth in our understanding of how to reliably build large scale software systems in a practionar-agnostic way. My proposal above shows that what is needed is a hybrid model which addresses both the need for a rational approach (the pre-production stage is basically waterfall) and an adaptive approach (the production stage lends itself to agile) under the condition that the production comes to a close with a working system.