As you know in the last months I've been intrigued more and more by metaphors for object-oriented systems, since they brilliantly solve the problem of naming by borrowing terminology from an existing field.
However, it is also interesting (and indeed has happened many times) to propose metaphors for a software development process. Analogies like building a skyscraper and growing a crop have let us ground some of our hypothesis in "thousand-years old domains"; and often lead us ashtray by false comparisons like the one between programmers and bricklayers.
The goal of this article is to describe the surgery metaphor for software development and check where it is useful to explain development concepts to newcomers and non-technical people.
There are some shared values between surgery and a certain category of software development, that deeply cares about the quality of the final product.
For example, the diatribe of long-term and short-term value is resolved in favor of a the former: a solution must work without requiring larger operations for years (ideally, for decades). The cost of maintenance is taken into account and never discounted when discussing different approaches to the current problem.
Attention to the detail is omnipresent in surgery, down to the singles procedure to follow; software development faces risk by automating most of these checks: broken builds cannot be deployed, and business metrics like current active users or satisfied requests must be monitored to ensure availability of the service.
TDD and refactoring
Following Uncle Bob's metaphor, common Agile practices like TDD are akin to aseptic techniques in surgery. These procedures started out simply by hand washing, and has evolved into gloves, masks and sterilization.
Thus practices are not strictly necessary conditions for success: emergency scenarios require to operate without it, like in the case of first aid.
However, standardized procedures are facilitating conditions: not as strong as necessary, but able to improve the odds of a good outcome enough to show a good return on investment. Post-surgery infections were as common and lethal in medieval times as finding bugs in production is nowadays.
However, practices are never a sufficient condition: you don't bring a postman into a surgery room, make him wash hands and tell him to operate (while many people tell him to code without even the hand washing part.). There is a whole set of training that he has to undergo before being able to make a positive contribution.
The training of surgeons is one of the hardest in the world. Depending on the country, there are strong qualifications to obtain and associations of certified professionals that a surgeon must belong to in order to operate the profession. In cases of misconduct, a surgeon can be stopped or expelled from the order.
Try imagining a programmer getting expelled for doing a sloppy job. However, given how certifications work in the field at this time, we still have much work to do before they become a reliable signal for employees.
A big part of the medical training happens on the field (in hospitals and periodically in operating rooms), although the apprentice is usually never left in charge.
Moreover, the training is never declared complete, and there is a costant update on the latest tools and techniques on the part of doctors. Their publication ofscientific papers and journals can be compared to our blogs and articles reporting the best (or good) practices of a field, although the selection system is based on peer review in the former case and on popularity in the latter.
A first way in which the metaphor fails is in the different definition of value: while maintaining software and adding new features to it is often necessary, the best surgical operation is still the one that is not performed. In this sense, the value of getting the application to work again would be preferred to the one of further product development.
Another issue that we would face is the inflating cost and time needed for training of doctors, alghouth the long training may actually be necessary for such a delicate domain. After all, the surgeon's salary justifies the investment costs to become one. High compensation systems seem to be able to attract the best programmers as for the best surgeons in the market.
The inflating costs of healthcare are instead more worrying. In the case of software, there is a trade-off between value (and so monetary revenue) produced and cost, while it is much more difficult to ethically quantify if the costs of medical procedures are worth bearing. What is happening in software is that there is absolutely no regulation on who can be a supplier in the market, and as such the average (and also median) quality of the products is terrifying.
I'm not saying that you should adopt the values of medicine in your work, which can be a stretch for Wordpress applications, but that if you share them, the surgery metaphor becomes interesting for you. Software is as important as human lives only when they depend on it, in the case of biomedical and transportation systems such as pacemakers and flight control; other important categories of software are business critical, and as such economic metaphors will suit them more than the medical one.