The comparison between software development and construction fails
We’ve all seen the comparison between development work and constructing buildings. I think the comparison is fundamentally flawed. There are numerous posts out in the world that confirm this. Random Google articles are here, here and here. I like the last one on Stackoverflow, because the writer is quite cynical when answering the question why they differ.
- They [customers] can't take delivery of your finished underground carpark and ask you to add an airport (also underground).
- They aren't allowed to change the law of gravity after you finish the design. Or expect the building to work on another planet.
- They don't blame the architect when they can't get an 18 wheeler delivery truck through reception, into the elevator and to the loading dock that they demanded be on the 24th floor.
The reason I write this post however, is because I found another analogy. In my family there are a lot of people actually working in construction. I benefit greatly from it, because it’s one of those areas I severely lack the skills in. However at some point in time, a family member was working in his own house and needed to replace some electrical wires. I did some of this in my own house and was asked to help out. I was quite happy with that, because now I could return the favor of him helping me out all the time.
And when wiring up all those wires, it suddenly dawned to me. This is like developing software. Connecting these wires is just about coupling and making the right decisions on what goes where. And that’s what I do all day. Coupling lines of code, methods, classes, components, services, etc, etc. The reason I think I’m better at it than my family member is because I’m good in seeing the bigger picture, the helicopter view if you will, of everything that is connecting to one another. I know which parts to focus on and which parts I don’t need immediate details of.
However in software development, there are many times more connections. Probably comparable to a network of electrical wires through an entire football stadium. The system I’m currently working on is becoming so large and complex, that after about 6 years of development –in comparison- it could spawn an entire city of electrical wires. Just imagine the complexity for a small group of developers this can bring.
Another important difference with the regular electrical wires, is that software development is a very creative process. Although you (can) have a plan, an architecture, design and great developers, it’s not constructing a new building with the patterns and ways you used to build the previous building with. It’s more or less like how a painter, a real artist, would create a painting. Like Rembrand or Van Gogh would paint a painting. Unfortunately there are also a lot of developers that don’t come near the skills that a proper painter has, which can even be a recipe for disaster. One of the reasons why projects go over time and budget so often. But that’s something for another blogpost.
I recently spoke with another company and they were pretty proud about the fact that they had sent 5 developers to the Microsoft TechDays. Of about 100 developers they only sent 5! Claiming that sending everyone is too expensive. If a company of 5 can send 5, which is 100%, why can this company only send 5% of their employees? I wrote this blog post because I have the feeling a lot of employers do not appreciate the creativity of their ‘artist’ employees. They do not understand the complexity and challenges that come with the territory that is software development. I think a company like Google does understand. Every office that houses their software developers, contain great perks like free lunch, sleeping pods, slides into the cantina, thinking rooms with only the light of aquaria, etc, etc. That is why they have some of the best developers in the world!
So besides explaining my analogy, this post is to make employers understand how valuable their software developers are. Good developers spend a large amount of private time (at home) to improve their skills. This reflects immediately back on their skills at work. Return the favor by showing you appreciate them. Return the favor and investing in them as well.