It takes an engineer to manage engineering

I’ve been meaning to write about the managers and Agile software development for a long time. And, apart from a few asides, I haven’t.

Why not?

Well partly because the topic is difficult, or rather large, but mostly I’ve not written it because I’m fearful of the flames that will come down on me.

You see I think managers have a role to play in Agile, but I am acutely aware that many people don’t.

So am I steeling myself, I’d love to come up with a “grand theory of management” but I’ve been trying to do that for years! I think instead I’d start blogging about my thoughts on management, and hopefully a grand unified theory of management will emerge.

Still, I expect many people will not agree with me – there is one of them I can see right now, he’s almost standing in front of me. The funny thing is, I was a professional programmer, I got interested in management as a way of ensuring I didn’t become the type of poor manager I’d worked for.

I took time out of my programming career to study management. What nobody told me was that if you study management programmers are more suspicious of you than ever, non-developer management types will always see you as a programmer (perhaps a jumped up programmer) and programmers who have fallen into management (those with no qualification and probably no time to study the subject) don’t trust you. Add in the fact that the academic community is split over management qualifications and it’s a right mess.

Unfortunately managers and programmer are locked in a decades old existential fight.

Many on the management side of IT dream of a world where programmers can be replaced by a software tool. That isn’t going to happen, all it does it move the point at which the programming happens. If you replace a programmer with a software tool the person who uses the tool is now a programmer – whether you call them a programmer, analyst, consultant or serf.

On the other side programmers dream about replacing managers with “self organizing teams.”

Both sides want victory by proving the other need not exist – at which point they will disappear in a puff of smoke. (Sometimes it seem to be the old worker-capitalist class struggle.)

My logic is this:

  • Management is a skill like any other, like writing Java or like writing test scripts
  • Many people who find themselves managing don’t have the skill and some don’t bother to learn
  • Consequently many “managers” aren’t actually very good at managing
  • While there are a few “natural” managers – like there are natural Java developers(?) – one can learn to be a better manager

The state of management in the IT world is so bad that frequently removing the manager altogether makes things a better than they were.

Oh, and the misuse of the word “manager” doesn’t help.

The thing is…

I’m an ex-programmer, I still consider myself an engineer (another controversy) and I also think management can play a useful role in engineering software development.

It took me 10 years to become a software engineer and I never stopped learning, 34 years later I’m still learning to be a better programmer.

I also hold an MBA degree, it took me a year of hard work to get it.

1 year, not 10 years and certainly not 34 years.

Actually, it has taken three generations to make me an engineer: my farther was an engineer, and my grandfather too. I was going down engine rooms when I was 7 or 8, I’ve watched engines being overhauled. I know what being in dry dock means and I know commercial considerations and engineering considerations are often in conflict, but engineers not people in suits make it work.

Being an engineer and a manager is not a contradiction. I know that because my farther and grandfather were Chief Engineers: they took years to obtain that rank, and when they did they still went down the engine room, they still mucked in sometimes, but they also spent a lot of time “managing” the work in the engine room and on deck.

You see: it takes an engineer to manage engineering.

Summary

  • The general quality of management in the IT world is poor
  • Management itself is a skill, one which few take time to learn about
  • Managing software engineering well requires one to understand software engineering: it takes and engineer to manage engineering

The staffing pyramid

When I see development teams I expect to see more programmers than requirements people (BAs, Product Managers, etc.), and I expect to see even fewer management types. Think of it like a staffing pyramid structure:

Programmers (and often testers) should form the largest group, without programmers there is no software, and while in an ideal world there is no need for testers the reality is the absence of testers is usually a sign of problems, though not always, I’m not the only person to have observed high performing development teams where there are no testers but these are the exception.

Although you occasionally here stories of IBM or Microsoft employing more testers than programmers I’ve never seen this situation the nearest I’ve come to it is teams with 1 tester for every 2 programmers. The number of testers to programmers should be a function of the initial quality produced by programmers but it more often than not a function of how seriously management takes testing and the regulatory environment the company operates in.

Anyway, programmers – the people who produce the raw produce, source code, should be the largest group. Testers are a little way behind but together these two groups should form the bulk of the development team. After this I expect to see some requirements people (Business Analysts, Product Managers, Product Owners, Requirements Engineers, what ever titles they go by.) There may be some other people in this mix: customers, business sponsors and so on.

(Conceptually user experience/design people are the same layer as programmers but usually they are there with requirements people. Either way, you don’t expect to see many of them and they certainly shouldn’t outnumber programmers on a team.)

On top of this there are a few management types, whether these be project managers, development managers or some other type of manager is not important. I know some people want to remove all managers, I don’t agree with them but I do agree there shouldn’t be many.

In a healthy team there are lots of doers (programmers, testers, UXD), fewer people feeding these people (requirements) and even fewer people managing everything. Requirements people and managers act as a multiplier to programmers (doers), these guys lay the golden eggs, by organizing them well, and asking them for the right golden eggs the value of the golden eggs should be higher.

By the way, when I talk of people I’m thinking absolute numbers, not “full time equivalents” or even “full time dedicated staff”; the people higher up the pyramid may well be multi-tasking. Whats important here is not the time devoted to a piece of work buy the number of voices who have a say in what happens, the number of people who have a finger in the pie. So part time people, those with dotted lines, those with responsibility and concern but no responsibility, they all count in the pyramid numbers.

And then…

Periodically I meet companies who have an inverted pyramid: this is almost always a bad thing, a really bad thing.

In the extreme there is one programmer at the bottom, no testers, and lots of people who have an interest in what is being created. Lots of people who have views – they have Product Owners AND Product Managers AND Business Analysts AND Subject Matter Experts AND Business Partners AND Requirements Experts, Project Managers AND Development Manages AND (maybe) Team Leads.

These pyramid seems to come from a mentality thats says:

Software development is really expensive, and really slow, and really painful, and so we must absolutely do as little as possible and

Many of these people who have a finger in the pie of “what is built” are part time to the work, they have the right to interfere but no responsibility for what happens. Work takes years to get started and never seems to finish – perhaps the developers are split between projects.

When I see the inverted pyramid I feel these companies are scared of their own shadow. I’m reminded of the old Woody Allen joke about the two old women at a restaurant:

First lady: The food here is so awful

Second lady: Yes, and the portions are so small

To be brutal – and to repeat something I said in Business Patterns: when you are developing software there is only one role which you absolutely must have, programmers. All other roles are optional, or perhaps context specific. (Even if you outsource the actual coding there is still a programer, if there is no code there is no program, with a programmer somewhere it is not software development.)

The programmer is the role which makes the product, they are the ones who lay the golden eggs. If you have no one to lay the golden eggs then it doesn’t matter how well the other people push paper there is no value creation. (For Hitch Hiker Fans: programmers are on the C Ark, everyone else is one the B Ark.)

Agile adoption by numbers – and some problems

I’ve done a few agile introductions in my time, in fact I’ve started to feel I could almost write a book entitled “agile by numbers”. So yesterday when this question appeared on some LinkedIn group I thought I’d give it a quick go:

“I am working with an organization which wants to explore agile adoption. What are the some of the best ways for start the process. Is it to start with agile training and then help set up with an agile agile coach to take it forward ? Or first do an assessment to understand why they want to adopt agile and than suggest the best approach : if it’s scrum, Kanban or XP.”

My answer went something like this:

First, don’t get distracted by researchershing options, don’t worry about Scrum v. Kanban v. XP v. What-Ever. Just get on and do it. (Of course I should have plugged my own book and said “Do Xanpan!”)

  1. Find someone you can trust who knows about this stuff (perhaps I should have said someone like me!)
  2. Get them to give an 1 or 2 hour (max) talk to interest people
  3. Ask the team leads if they would like to volunteer their team or upcoming work, then talk to the people who would be involved, choose/make a small self contained team (i.e. coders, testers, product person) (Note: if you only have one team then you can skip steps 2 and 3 because you are doing to work with this team.)
  4. When you have found your guinea pigs give them a day or two of rehearsal (i.e. a training session where they get to practice what they do)
  5. Start doing weekly iterations immediately: no waiting for “the right time”, start while things are fresh
  6. Arrange for the person who gives the training session to come back each week, then throttle back to less often when the time is right
  7. Engage a technical coach/trainer and after several iterations run some technical training (TDD or BDD, take your pick). Have this person come back for some one-on-one coaching (i.e. pair programming), allow one day per coder plus time with testers if you have them
  8. See what happens, review, keep going, expand

I did notice that a few of the other replies recommended teams start with coaching rather than training. I’ve done it that way, in fact thats how all the early teams did it. I’ll also say that in my experience – and yes, I’m biased, I sell training – giving people some training up front works best. Perhaps thats because the way I do training is to give people a chance to experience working in an Agile setting in the classroom, so perhaps what I’m saying is: all training is not equal.

This little recipe takes you so far. I’ve stopped with the technical stuff. The process side will get you so far but if you don’t do the technical stuff – lots of automated testing! – then you will only go so far.

The other thing I haven’t said here at all is: this recipe is only for the supply side, once the supply side starts to shape up the focus needs to shift to the demand side, those people you call Product Owner, Business Analyst, Product Manager or something like that. Thats where it gets difficult, not because these people are themselves more difficult but because you are now wrestling with the wider organization and changing a bigger mindset.

Another problem that sets in here is that companies can loose the will to change. I’ve worked with a few companies who apply this prescription but they get so much improvement the immediate pain goes away and they loose the motivation to change further.

This prescription can very quickly makes things get better. But if you want the full benefit you need to keep taking the technical medicine and supplement it with demand side medicine too. Those changes take longer to make a improvement, they are a slow burn.

Not here: From diseconomies to economies of scale

Just a note to say my latest ramblings “From diseconomies to economies of scale” were blasted out to newsletter subscribers yesterday. If you are not on the newsletter list you can read a copy on the Software Strategy website – or better still subscribe to the newsletter and you’ll be among the first to hear.

Right now my writing energies are going into the newsletter, Little Book of Requirements and User Stories and 50 Shades of Scrum, so this blog will be quiet for a little while yet. Sorry.