Laurel has a
insightful comparison of the different software development philosophies of Joel on Software and 37 Signals.
In a nutshell, Joel says programmers are most productive in a splendid bubble of specialization and isolation (”A programmer is most productive with a quiet private office… a tester to find the bugs they just can’t see, a graphic designer to make their screens beautiful, a team of marketing people to make the masses want their products, a team of sales people to make sure the masses can get these products”, etc, etc.)
37 signals, in contrast, says developers are most effective when roles are blurred (”When the edges are blurred, and one thing is many things, you can achieve so much more with less time, effort, and people.”)
I love startups precisely because of the chance to blur roles and to experience first hand the end of end process of understanding and meeting the needs of users.
At Jobster, as Laurel explains, we are working to retain this level of ownership and experience even as we grow from a small company where everyone has to do everything to a medium sized company where’s the luxury of specialization is possible:
At Jobster, in the past few months or so, we’ve been gradually growing our development team past the point where it makes sense for everyone to work on everything. At this point, we could decide to slice things horizontally – define everyone’s roles more strictly, have core developers, library developers, project managers, product managers, program managers, UI developers, UI designers, graphic designers… But we’re taking the approach of slicing vertically. Spinning off parts of our product into independent chunks worked on by independent teams. This wouldn’t work if everyone was stuck in their roles. We simply don’t have enough people to fill a small independent team with specialists. Sure, I’m not a good UI designer. But our good UI designer is busy with other projects right now, and we can’t hire another one before I want to demo my project next month. So this project won’t work if the 3 of us “software developers” can’t come up with a UI design that’s adequate enough that the decision makers get what we’re trying to do and believe in it enough to give ours priority over the designer’s other projects.
At a medium sized company like Jobster instead of a really small one like 37signals, we have the luxury of having people who specialize in certain areas (we certainly have a lot of sales people who call people at Fortune x00 companies and try to get them to sign big contracts). But we’re not big enough to be able to move people around efficiently. This is an opportunity and a challenge – at a small company people have to do everything; at a large company people can’t do everything. At our size we could do either, and we have to figure out what makes sense both for the group and for each individual.
Alan Steele continues the thread in it’s not all about productivity:
This is why optimizing for the ability to type ’svn commit’ makes no sense at all. If you break down a software project by elapsed time, it usually looks like this: 70% figuring out what the problem is, how best to solve it elegantly, efficiently and in a manner that delights the customer, and getting everyone to agree that this is the best way forward; 3% writing the core code; 27% getting the code you just wrote to work as intended, fleshing out the supplementary features and closing in down with a minimum of bugs.
Not only does the up-front part represent the vast majority of elapsed time, it’s also the part that affects the end-result most dramatically. And it benefits enormously from people talking to each other, which is rather more difficult when those people are ensconced in their private, temperature-controlled offices hooked up to their caffeinated carbonated beverage IVs.
If you don’t believe me, try this: go buy a really, really nice new computer; load it up with the newest bad-ass development tools on the planet; learn how to program (ok, this part could take a little while); and then write some great software. Right between steps 3 and 4, you’ll find yourself facing something that feels remarkably similar to writer’s block. In fact, it’s pretty much the same thing as writer’s block, and it happens to organizations just as it does to individuals.
The good news is that designing software, unlike writing, benefits enormously from having a small team of people working together to overcome that block. Getting a few people together to think about a problem produces far superior results than putting someone in an office and saying “Think!”, particularly if each has a slightly different take on the problem (say, one with more of a business/customer focus, another with a design/usability focus, and a few techies). The myth of the lone wolf programmer is crap: great software is built by teams of people. The reason Excel is such a kicking piece of software is that literally hundreds of people have worked collaboratively for many years to make it great. Software development is a team sport.
The secondary argument is simply against Joel’s attitude of coddling his programmers to the ridiculous degree of comparing the rest of the company to the servants of the Roman army. This kind of attitude doesn’t do much for collaboration with those supposed servants, many of whom have very good ideas about how the software should be built. It also encourages a distasteful kind of laziness where developers expect everything brought to them on a silver platter. Any software manager who has witnessed the electrifying effect of a customer visit on a previously insulated developer knows what I’m talking about: there is nothing so powerful as getting out in the world, watching and talking to people to learn what is actually needed from your software. It’s also a lot more fun that way.
There is one sentence of Joel’s recent article that I agree with, which is that an abstraction layer is needed between development and the rest of the organization. But he’s got it backwards: a software manager needs to create for the rest of the organization an abstraction (more like an illusion, really) that makes product development look like a predictable shipping machine, producing regular deliveries of software containing bright new innovations, when the reality behind the scenes is considerably messier. Otherwise, it gets very hard to justify the fancy computers, comfortable salaries and free soft drinks…
I feel lucky to be part of an industry new and vital enough that it’s still possible, meaningful, and impactful to have conversations like these.