The Passionate Programmer

Being a Producer

The actor-producer Paul Reiser once said that producing is about figuring out what needs to be done and doing it. I think this also makes a good job description for software developers.

Programmers are producers. We create something out of nothing at all, out of pure thought. Our skills are not just in writing code. Programmers, like producers, are problem-solvers. Being a problem solver is the key skill of a software developer. We face software problems on a daily basis. The more mental models we have to draw from the more opportunities we have to solve a range of problems.

Software is a model and we want our models to accurately reflect what we’re modeling. This comes from understanding the problem domain that we’re working in. Software is merely an embodiment of that understanding. 

The key skill is not in writing code but in understanding the problem. When we understand a software problem we can model it accurately and in a way that’s straightforward to maintain and extent.

We use metaphors to convey our models so that it’s understandable to others. We need to draw from a rich set of metaphors so we have a range of models to draw from.

The challenges that we face and the problems that we have to solve are different on a daily basis, just like in filmmaking. Like filmmakers, software developers create something out of nothing. We deal in the realm of pure imagination.

Like filmmaking,  we draw heavily on our visualization capabilities so that we can imagine solutions to problems. Writing software is highly disciplined but is also highly creative. It draws on both halves of the brain and the skills complement each other. And like filmmaking, our goal is a happy customer.

You might think that filmmaking is one of the most Waterfall processes there are. You can’t edit a movie that doesn’t exist yet and is foolish to walk on to set without a script and a production plan. With millions of dollars a day budgets and costs racking up during a production it’s foolish to just show up and try things until something works.

Filmmaking is a Waterfall process by its very nature, just like constructing a building or many other physical activities but that doesn’t mean that the film industry couldn’t benefit from what we in the software industry are learning.

Movies today are crowd-sourced and tested with the audiences before release. Like in many companies, the senior executives of the organization control the content. But more and more studios are realizing that the best people to tell them whether they have a hit movie or not is their audiences, so they do test screenings of rough cuts and this lets them dial in exactly what the viewer wants to see.

Companies like Google and Amazon A/B test everything. I remember a Google manager telling me about how they A/B tested a one pixel difference in the header of a web page and seeing something like a 7% difference in response rates. That’s huge!

And like a movie, software can impact you. It can uplift you and show you new possibilities or be a disappointment. Software can definitely impact your mood because it’s a work of art as much as a tool, and in many cases we respond to that. 

You might think that developers have fewer logistical things to deal with than film producers and it’s true that we strive to reduce external dependencies as much as we can, but creating software can often involve so many pieces that organizing them can be a big issue. 

Film producers deal with a different set of problems which usually involves coordinating people and physical things. Developers deal with coordinating virtual things. Virtual things may be lighter weight but there’s many more of them, so it all evens out.