The parable of the two programmers
Once upon a time, unbeknownst to each other, “Monolith Corporation” and “Startuply Inc.” decided they needed programs to perform a certain, identical service.
Monolith hired a programmer-analyst, Adam, to solve their problem.
Meanwhile, Startuply looked to the youthful exuberance of the graduating class of 2017 to tackle the job, and found a bright eyed brilliant youngster called Chris.
Adam, having experience in difficult projects, used a structured approach. He asked for three more programmers, and began churning out business analyses and technical assessments.
Back at Startuply, Chris spent a considerable amount of time thinking about the problem. He sat with his feet on the table, drinking coffee. He was occasionally heard clicking rapidly on his mouse, and his officemates could tell he was actually playing Overwatch.
By now, Adam had already begun to write serious amounts of code. The programmers were busy between writing and compiling, and the rest of the time they had various meetings with the other functions of the company, discussing interfaces between the various modules.
At Startuply, his office mates noticed he has moved on from the game and spends much of his time with his over-ear headphones on, scribbling on a notebook. His scribbling weren’t meaningless, but they didn’t quite fit into the context of their business either.
Several months have gone by. Adam’s team has followed the progress timeline fairly closely and are busy with testing. In another two months after integration testing with dozens of different business units in the company they are ready to release a completed version.
The manager of Chris is beginning to be a little concerned with his performance. There has been some effort to get him acquainted with the rest of the start-up but with so much management and sales work to be done the manager has left him largely alone for now. Hearing on chatter that two of their biggest competitors are soon raising significant amounts of capital, the manager revises forward various project deadlines, including Chris’. Thankfully, just around this time, Chris is beginning to shift gears and has been observed putting in serious time into his work. The foosball tables become unused.
At the end of two months, Monolith has completed a bruising series of tests and begins its process of rolling out the software on schedule. The codebase is nearly 7,000 LOC designed according to common and well-worn design patterns. There were several bugs that the integration tests found but upper management decided that they could be patched post release as the general service was still extremely valuable to the organization. The program is very particular about input formats, and there were several features in the original specification that were missing. Adam supplies a list of deficiencies and known issues, various planned extensions in tandem with future development plans voiced by the other divisions, and spartan but sufficient documentation.
At the same time, Chris also completes his project. It is a 500 LOC program that fits decently into the other pieces of software produced concurrently in Startuply. The program meets the minimum specification that was provided by the manager, and also provides several extensibility features that could support a number of different business needs that the start-up has not expanded into. However, the lack of communication between Chris and another developer in Startuply led to a few unexpected behaviours between their two interfaces that led to data loss.
Chris’ manager is generally satisfied. However, due to competition in the business environment and increasingly demanding clients in the face of strong offerings from newly formed start-ups, the business needs evolved during the process in which Chris was working alone without noticing the external environment. The manager, juggling these pressures, pays less attention to performance of his developers, and focuses more on feature releases, deadlines, and client offerings. In an effort to head off aggressive competitors Startuply hires a few more developers to churn out features at a breakneck speed, many of which makes Chris’ work obsolete in a matter of months. Chris, being one of the earlier developers, is rewarded comfortably as the company stabilizes and revenues begin to flow in. In return, Chris is asked to build and rebuild enhanced versions of his original project to fit the constantly expanding offering that is haphazardly accommodating larger and larger sets of unstructured information that clients are submitting without due care.
At Monolith, Adam is well complimented for his effort and the supervisor begins to appreciate the immense complexity of the program given the need to support the myriad interfaces of the other business units. The inflexibility of the interface is a pain to develop for, but mostly preserves valuable data integrity even as the company takes in more and more data from its clients. Eventually, Adam himself was given a promotion and a raise, and later he transfers to another division managing a much more lucrative service to big money clients. Another younger, mid-level project manager is hired to take over Adam’s team, and after many months of average-quality management, hacks together several new features while sacrificing robustness against an increasing number of features that Monolith’s main software product is offering.