Software Development is Like…
Software development is complex and difficult and unlike most other professions that I know of. This makes it tough to explain to colleagues in other parts of the organization, clients, and (all too often) management. We’ll typically try to find something well understood to use as a basis for comparison. Something to help explain the idiosyncrasies that come along with building software and being a software developer.
Software development is just like manufacturing, right?
I’ve heard dozens of comparisons of software development to other professions or activities. My least favorite – although seemingly most popular – is manufacturing. Sure. In both cases we’re building something based on specifications. That’s pretty much where the similarities begin and end. Manufacturing succeeds when you repetitively build the same thing with as little variation as possible. As a software team, if we build the same thing repeatedly then we’re doing something wrong. Software development is about solving a unique problem.
A different metaphor
Metaphors, by definition, are not perfect. Even so, I’d like to try a different one on for size. Lately I’ve been thinking that software development is not unlike drawing. Hang with me for a second… I’ll explain. Now, I’m not a drawer or a painter or a police sketch artist. But imagine having to draw or paint a scene from the real world. But in this case you have to recreate the scene from someone’s description. This is pretty much what we do every day in software. We bring people’s ideas to life, only we’re doing it on a computer screen rather than a canvas.
Keep playing along – this gets fun
Let’s extend this metaphor a bit to other challenges that we face in the software development world. How many times in your career has a requirement been misunderstood or missed altogether? Gee, I bet that would happen if I were trying to draw your words. Little details, even big details, can easily get lost in translation. “Yes, I said there was a bridge there, but it was iron – not brick.”
Or how about the situation where the user doesn’t exactly know what they want? “Can you paint a yellow-ish, blue-ish but definitely not green-ish house? Oh, now that I see it maybe green is right.” But sometimes your artistic influence leads them in another direction. “I had pictured this as a midday scene, but I love the way you have amber the sunset reflecting off the water. Let’s go with that.”
And now for one of my all time favorite lines of though. This being that we can add more people to the team and deliver software faster. Any software developer knows this is true to a point. But once that point is crossed, adding people will actually slow the team down. Also, the smaller the project and the closer to being “done” the harder it is to have more hands on the code. I’d image this is true when painting, as well. It may very well be possible to have three artists working on the same painting at the same time. The larger the painting, the more individual components, the more ways to split up the work. Can you imagine thirty artists working on the same piece at the same time? I expect this wouldn’t work so well.
But software, like drawing, is soft!
Across the industry there are folks who seem to forget that software is supposed to be “soft”. We’re not welding a steel frame together. We’re typing words into an editor and almost magically creating something that the user can interact with on the screen. Changing direction, even late in a project, is supposed to be easy. When we make it difficult all we’re doing is reinforcing that notion that software development is similar to manufacturing. Do yourself a favor and be nimble in your process and your architecture. There’s no need to redraw the whole city just to change the brick bridge to an iron bridge.
Writing software is also like writing a movie. I figure that programming is one of the most creative acts in the world of human endeavour. You sit in front of a computer and define a new world from scratch.
So why is creating software like creating a movie? Well, both start with an idea. Both are creative, process driven activities that involve a multitude of people doing stuff that is designed to deliver on a single grand idea.
Both can be truly great or truly shite and no one seems to know what makes that difference at the start of the project. Both look like industrial processes but somehow a totally engineering-based approach never works at so well. (How can jQuery and Node come from extraordinary individuals and not code factories like Microsoft, Sun and Google)
Here are a few of the similarities that may or may not agree with.
1. You have a given circumstance – some situation that has a requirement:
SOFTWARE: I want to schedule lots of meetings
MOVIE: Jason Bourne wants to find out who he is.
2. You then have a bunch of objects that will do things to achieve that outcome:
SOFTWARE: You define objects or routines in code
MOVIE: You create characters in your movie script ? Jason, Marie, Ezra, Nickie, Pam Landy.
3. The objects are designed to communicate with each other to achieve some purpose with their own internal logic and modes of communication and expression:
SOFTWARE: Your objects have methods that allow them to do stuff and interact
MOVIE: Your movie characters have personalities, quirks and phobias that drive them forward. Bourne interacts with other objects (characters) and interesting stuff happens.
4. With both movies and a software project, you have to spend a huge amount of money before you can tell if anyone is going to like it enough to buy the seats that will make you rich.
5. Both have commercial and critical success factors. You can write awful software that make you huge consulting fees . . . or you can write a piece of open source magic that your peers find awesome.
And so on . . .
Maybe I am trying to link things that are not actually alike because pattern matching is what humans do to try to make sense of things.
But for me, creativity, technical skill, marketing nouse and a commercial nose are requirements for both software and movies. It is also a place where a good idea, executed well, can make a difference.
Great post, Peter! I think the movie analogy holds up well. Software is a very interesting mix of art and science. I’ve never made a major motion picture, but I can image there are some technical challenges that must be solved.