February 26, 2016

...Learn TDD with Codemanship

75% Of Us Think Software Developers Would Do Better Work In Small Partnerships

A conversation that's been ongoing between myself and many other developers I know over the last few years has been around the question of how developers should organise ourselves to do our best work.

Anecdotally, there's a feeling that the way we do things now is dysfunctional. Someone who knows little about writing software hires a bunch of developers, sticks them in a noisy environment that they cannot control, and gives them a boss who is incentivised to do all the wrong things.

The end result is predictably poor. Buggy and unusable systems, dissatisfied users, missed windows of business opportunity, huge cost overruns, and outright failures are commonplace.

And, to add insult to injury, it usually sucks for the teams who have to put up with doing poor work.

So, why haven't we fixed this? Two reasons come up repeatedly:

1. The people doing the work usually aren't in charge

2. The people who are in charge have a vested interest in doing it wrong

Take team size, for example; when was the last time you heard a manager boasting about how small his last project was? When did you last hear a sales person try to persuade their customer it could be done with less people? When did you last hear a shareholder say that they shouldn't expand their development/outsourcing business any more because it will compromise quality? When did you last hear a manager say "Actually, I don't know anything about writing software. I'm just going to get in the way. I'll see myself out."?

There's a lot of money to be gained by making teams bigger than they need to be. I'm reminded of a meeting I once had with the project managers of a development shop in East Sussex, trying to persuade them of the benefits of defect prevention. "But why would we want to ship sooner and with less bugs? We get paid by the person-hour for development and maintenance." End of meeting.

And excellence doesn't scale easily in our line of work. Every person you add to the team is something of an outlier - if they're good software developers. About 1 in 10 of us is actually any good at the job. Building a team of good developers - who work well together - is very difficult. The larger you make that team, the more difficult it gets. Eventually, to keep expanding, businesses lower the bar and start drawing from that 90% that - let's be frank - aren't quite so good. By the time we get to teams of hundreds of developers, you find them scraping the bottom of the barrel.

These people aren't fools. So much of software development is not dysfunctional because we're stupid. Far from it, in fact. It's dysfunctional because that's how some of the people involved make more money. Overstaffing teams sucks for the people on those teams, but it's more revenue for the business doing the overstaffing. Sales people earn more commission for doing bigger deals. Shareholders see their stock prices go up when these businesses expand, arguably taking on more work than they can effectively handle.

The big consultancies don't make their billions by consistently delivering quality working software. They make their money by overstaffing. Massively. And the managers who bring them in view that as a good thing, because - like I said - who boasts about how small their last project was?

Even when it's internal IT - where you'd think value-for-money would be a bigger driver - we still see the same dysfunctions. The people in charge tend not to be incentivised to succeed. Like the journeyman CEOs who carve out long and lucrative careers, earning millions of pounds, running public companies into the ground. If it all goes belly-up, a CTO or IT Director can just move on to feed on the next dead whale. Failure is big business these days. I've met many tech managers who were serial failures, and it never seemed to impact on their careers adversely. Indeed, does it even come up in the interview for their next job? "So, you managed a department of 1,000 people with a budget of £200 million a year? Might I ask what you actually achieved with that?"

And they're welcome to it, of course. But, as a software developer, I always found that sort of work soul-destroying. Believe it or not, many developers like to do good work, and are very disappointed when the software they poured blood, sweat and tears made of Red Bull into over months and years gets throw in the dumpster because it just wasn't good enough or just wasn't what the users needed.

And we have little to no incentive in expansion for the sake of expansion. We're usually not given shares. We don't get paid more for doing the work, necessarily, just because there's twice as much work being done. We just get shittier work. And our end users get shittier software. If they get any software at all.

Increasingly, I and others are thinking that the business model is the problem. The profit motive, in these situations, doesn't produce better software or more satisfied users. Because the extra profits go to people who aren't doing the work and aren't using the software. To fix that, we need to remove these people from the equation. And the way to do that might just be for software developers to work in partnerships, like lawyers and GPs and architects tend to.

Sure, there are some giant law firms. But not very many. Most law is practised by people working in small firms, controlled by the lawyers themselves. There are no shareholders demanding growth and maximisation of profits. There are no bosses who don't understand the practice of law. And, at any size, they stand or fall on the results they get for their clients. For all their faults - and they have a few - lawyers at the very least don't carve out lucrative careers from successive failures.

So, yesterday, I put this to the Twitters with a little unscientific poll:

As you can see, the majority of respondents think we would work better in small partnerships.

So, let's get practical for a moment, and think about how this might work. You and a handful of colleagues, who you know are good at their job and you can work with, get together and form, say, a Limited Liability Partnership. As equal partners, you each get the same share of the profits. Maybe you pay yourselves base salaries, and then the rest depends on how the partnership performs. Maybe you take on junior partners who take a smaller share and bring them up to an equal share after they've proved themselves. Maybe you even take on trainee developers who just get paid a salary, but - according to the rules of your partnership - after they meet certain criteria, they can become partners, too.

So you add your LLP to a database of development firms, specifying your specialities, just like lawyers would. There may well be other information available about your track record, too. Like we can get for plumbers and electricians and other tradespeople these days, so we can better judge who might do the best job for us.

Then, when Johnny CTO needs new software, he picks up the phone and calls your LLP. Just like someone looking for a builder.

As an individual partner, it won't help you to overstaff the team. You'll probably end up earning less, as everyone apart from the trainees get a share of the profits. You earn more by doing better work that delivers more value. There. How do you like them onions?

Of course, this would require a complete overhaul of the way software and IT projects are run. But, to be fair, more than half of developers working today are technically self-employed. So we're sort of half way there anyway, aren't we?

What would be different would be how we engage with the work. No more would we be faceless cogs in giant unfeeling machines, just doing as we're told even when we know it's the wrong thing to do.

We'd be more like building contractors, getting involved from the start and making the technical decisions while we talk to the customers directly, and connect with real end users.

Like architects, we'd work in spaces designed by us for the work we do. Like GPs, we'd apply our equivalent of clinical standards and professional ethics. And, like lawyers, we'd get paid handsomely by building a track record of verifiable successes.

Well, it's a thought, anyway....

Posted 1 year, 8 months ago on February 26, 2016