Posts Tagged ‘Managing

All Developers Shall Have Good Equipment

with 2 comments

This post is part of my series on Managing Developers – How not to suck

In 2011, the minimum primary development machine is a quad core system with 8GB of memory, a 64-bit OS, a fast boot drive, a 1Tb secondary drive, a gaming quality graphics adapter, and two 1900 x 1200 monitors. A system with an SSD boot drive is even better.  Providing people a mouse and keyboard they like is groovy.

Many developers should have a good lap top like the Lenovo W500 – with an SSD.

None of this is expensive and your developers will get more work done and be happier if you make sure they have good equipment. There really is no excuse for your team to have poor equipment.

You can do more as well. Many developers will need a couple of test systems. These are systems they can re-image at will, configure for debugging and diagnostics, or install test versions of an OS or other software. These should be on a KVM system so their desk isn’t cluttered with monitors and keyboards.

Its good if one of these test system is "low spec", something like an old P4 system with 1GB of memory, an Intel 945G graphics adapter and an old 4,200 PRM mechanical disk drive. This lets your developers make sure your software will run on low performing systems.  Intel Atom based systems are also good low spec test systems

Want bonus points? Let your developers use the code editor of their choice – even if this means buying it for them. Developers love their favorite editors and will be more productive when using them. Many good ones are free, the others are not expensive.

Get them extra tools they ask for.  For example, RedGate’s Reflector is an essential tool for .NET development.  Its only $35.

Sometimes developers will need special equipment. Get it for them. If they need this throughout a development cycle, get them their own gizmo – don’t make them share. Sharing works only if people need something rarely. If they needed it more than once or twice a week, or for a few days at a time, then sharing is just a pain – it is very inefficient. You want your developers to be efficient, right?

Don’t suck – make sure your team has the equipment and software tools they need to get their job done.



Written by foredecker

March 5, 2011 at 1:56 pm

Posted in Managing Developers

Tagged with

Status Reports Suck and Everybody Hates Them

with 4 comments

This post is part of my series on Managing Developers – How not to suck

When I worked at Compaq, we had an executive that just loved status reports. They were executive crack. His idea of managing was making sure everyone did their status reports on time. He was ultimately fired in a very public and very satisfying way. We had a party – really.

Every week he had the whole team stop what they were doing and write status reports. We had a very well defined status report format. Each team member would send their report to their manager, who would then combine them into a team status report. He would then send them on up the chain, they would be summarized again, and eventually they would all get to the executive.

Here comes the hilarious part; a few days later we’d be in a meeting with various folks – and the executive – and someone would ask a question. The reply was invariably “well, that was in my status report…”. This theme occurred with great regularity. Even though we had status reports, managers would ask questions as if we had no status reports. The executive was the worst.

Awesome. We spent a whole bunch of time, effort and energy running a process that caused us to write stuff nobody read.

It was really even worse: a pretty significant number of people didn’t get their status reports to their manager on time. Why? Because they were busy doing real work. This resulted in nag mail. Nobody likes nag mail. Relatively often people wouldn’t get their report in at all. Missing a status report got you on the execs radar – always a bad thing.

Why do status reports suck? Two reasons:

  1. Because status reports are always required to be short summaries – often bulleted lists with brief descriptions. The idea of course is people will read them if they are short.
  2. They are always done on a weekly deadline. This is a massive team wide synchronizing event.

Software development work is complicated. There are rarely simple issues. Simple bullets just lead to questions that need to be answered in detail. Proponents will point out that the status report let managers “drill into” interesting things and “manage by exception”.

That’s not managing by exception – it’s managing by being random. In this system, developers just get jerked around. They have no way to know what is interesting or exceptional because it always changes from week to week and is different for different managers.

People are not mind readers – unless you tell them ahead of time, they will not know what you think is important. So, people go in two directions; blowing of the status report off, putting the absolute minimum work into them they can get away with; They know they will get ask the same questions either way. Or, they will put too much work into it, wanting to be prepared for questions with detailed answers.

Status reports are disruptive: There is always a weekly deadline. This means that once a week, everyone stops what they are doing and writes their status report; all at the same time, no matter what else is going on. Each week – this makes status reports the single most important thing everyone is doing. This is just dumb.

Status reports also add latency: at best it takes two or three days for all the status reports to be written, rolled up and sent up the chain. It takes more time if there is something controversial or problematic happening; then the status reports are vetted and often sent back for revision, or edited heavily so they “express status in a measured manner” (e.g. spun). So, by the time the people that want them need them, the information is already old and things have changed.

If those reasons were not enough to avoid status reports, carefully note that developers hate them. Why? Because they are something that you (Mr. Manager) are making them do that doesn’t help them get work done; status reports are intended to help someone up the management chain they rarely talk to or hear from. You don’t need a status report because you talk to your team every day – right?

There are many ways to avoid status reports, all of them are better than having status reports. Here are four:

  • Have a system that sends “check in mail” to the right people. Check in comments should have useful information in them. Such as: “Initial check-in of the XML manifest schema checker”. Look ma! No status report needed.
  • Use your bug tracking system to keep track of the state of bugs and work items. All good bug tracking systems do this. Then, have a system (often included with said bug tracking system) that can automatically generate reports of progress and status. Bonus points for doing this with a web page. This is really easy to do. If you don’t have one of these for your team or organization then write one – you are all software developers… you can do it.
  • Use a project tracking system (like Microsoft project, Team Foundation, FogBugz, or one of many others, and let people update progress and task completion as they work. This goes into a database that managers can query when they choose.
  • Create an effective and light weight process for managing exceptions, problems, and blocking issues. Problems (say a newly discovered bad bug) need to be communicated right away, and not wait for a status report. The most important thing about this system is that problems shouldn’t be treated like fire drills. If you find that problems regularly put your organization into fire-drill mode then your managers have something they need to fix.

There are probably many others examples. Good management systems share three important characteristics

  • They are all asynchronous and timely. Developers can update the information at appropriate times such as when they complete tasks, or they are at natural stopping points.
  • Its easy to use – for everyone. Developers can easily update information – anytime. Managers can easily get reports any time. Anybody, not just managers, can query the system at any time to see where things are – they don’t have to wait on anybody.
  • Its automatic. Nobody has to do any manual work. Dashboards simply show the current status People are notified of problems right away.

Believe me – this kind of system works really, really well. Developers like it, managers like it. Everyone is happy. It’s also really efficient.

You invest in good computer systems for your developers, version control, and a bug tracking system. You should also invest in an effective work tracking systems and processes. It will make everyone’s lives easier – really

So, don’t suck. Don’t make your people write weekly status reports.


Written by foredecker

March 5, 2011 at 1:51 pm

Posted in Managing Developers, Uncategorized

Tagged with

The word you are looking for is “People”…

with 6 comments

This post is part of my series on Managing Developers – How not to suck

My wife says I have too many pet peeves. Oh well, we all have our crosses to bear. One of my peeves is calling people ‘resources’. Managers do this all the time: “How many resources will project banana need ?”, “Our resources are all subscribed.”, “Our team doesn’t have enough resources to do any additional work”.

Resources are ‘things’, including computers, tables, chairs, graphics cards, solid state disk drives, the lab. Money, and time can be resources too, but are important enough to treat separately.

Short story: people are not resources. Don’t ever forget that the people that you mange are people, not resources.

Treating people as ‘resources’ leads to all kinds of manger mistakes. The biggest sin is assuming people are fungible. We all know this isn’t true; developers (people) have a wide range of skills, aptitudes, aspirations, and experiences: people vary – wildly – in many dimensions. This means they cannot all be assigned the same tasks while expecting the same results.

Of course, we expect all developers to share some basic skills; using the source code control system; building the code; using the debugger; etc. It is also fair to expect more from more senior developers; sometimes this is more work, or the ability to solve tougher problems, or to be responsible for more code, or drive things in broader ways. We also often expect more senior people to provide more leadership.

But beyond the fundamental expectations, developers are almost always very different. They are almost never interchangeable and – most importantly – given the same task, will almost never solve problems the same way, write the same code, or otherwise do things the same.

One thing a good manger spends time on is assigning the right work to the right people. Treating people fungibley screws this up. You can’t just smear work around like peanut butter on a bunch of crackers and assume it will all be done well.

Work to understand the people on your team: read their old reviews; talk to them; understand what motivates them. Learn what they find interesting and challenging. Observe what they do well, where they struggle. Understand their experiences and where have they had successes and failures. Ask them where have they struggled and where they feel they can grow. Understand how they best like to hear constructive feedback. To the extent possible, make sure you have well matched the task to the person.

If you understand your team as people, then you can more effectively help them do their best work with good continuity over time. This is 80% of your job.

Don’t treat people as resources – that sucks.


Written by foredecker

March 5, 2011 at 1:48 pm

Posted in Managing Developers, Uncategorized

Tagged with

Don’t forget what it’s like to be 10

with 10 comments

This post is part of my series on Managing Developers – How not to suck

Remember what it was like when you were 10 years old? I do. In the summers our mothers kicked us out of the house in the morning and didn’t expect us home until dinner time, or later. We spent all day riding around on our single speed bikes causing minor trouble. We usually had lunch or dinner at the friend’s house we were closest too when hungry; our mothers treated us like a pack of wolves. We found cool junk, built forts, had dirt clod fights; shot each other with BB guns, swam in the pond, fell out of trees, blew stuff up, shot turtles, played in the mud, and got chased out of vacant lots by old men. It was a blast.

I often ask people "Do you remember what it was like to be 10?” By far the most common answer is something like ‘No, not really…” Bummer.

This applies to development managers too. I often ask them “Remember what it was like to be an individual contributor” or "a new developer on a team"? The usual answer is "no, not really", or something worse – a bunch of hand wavy manager talk. Bummer.

This is a huge problem – especially for first line managers who often forget this stuff the day they are made a first line manger.  Its like they went through a manger brain wipe in some evil lab.

If you don’t remember what it’s like to be an individual contributor then how can you manage them? Forgetting this leads directly to many dumb manager mistakes (many of which are discussed in these posts).

Do you remember how interruptions screwed with your concentration? No? You should. Context switches and interruptions are disruptive and expensive when a developer is in the middle being thoughtful and creative.

Do you remember how annoying it was to go to poorly run meetings with no agenda, where nothing was discussed that pertained to you, or where the meeting always resulted in ‘action items’ consisting of needless bureaucratic work?

Do you remember how disruptive it is to have your manager, or your manager’s manager ask "are you done yet", ever time they saw you?

Do you remember that its really hard to predict how long some things will take?  Bug fixing is a great example.  Managers ask “When will bug 2372 be fixed?”  The developer thinks “Man, I don’t know, if I could tell you when it would be fixed, I would know how to fix it.  If I knew how to fix it, it would already be fixed!”

Do you remember what it’s like for everything your manager asks you to do was of the "highest priority" or needed to be done with the "highest quality… tomorrow!" ?

If you don’t remember what it is like to be an IC, you will suck as a development manager no matter how awesome you are at everything else.

So, don’t forget what it’s like to be an IC; don’t manage your team… help your team. Your job isn’t telling them what to do. 80% of your job is understanding what your team does, and what they need to accomplish their job; then helping them do it.


Written by foredecker

March 5, 2011 at 1:44 pm

Posted in Managing Developers

Tagged with

Managing Developers – How not to suck

with 9 comments

I’ve been a development manager for 15 years. I have had the privilege to manage some great people – many of whom have become lifelong friends. I’ve also managed people I never want to hear from again. I’ve had some good mentors along the way and I’ve worked for some great mangers, a couple of crummy mangers, and one psychopath. It’s been both a rewarding and challenging experience. People who have worked for me tell me I’m a pretty good development manger.

Along the way, I’ve gotten to know many other development mangers. I’ve seen a few really good ones, and many bad ones. I have enjoyed working for a world class manger at Microsoft. I’ve also seen a couple of mangers who have been fired for how badly they manage people.

Managing developers is really hard. Why? Because software development is fundamentally a creative activity, like music, art, architecture, math and writing: Yes, yes yes…. there are strong engineering and scientific aspects to software development. Good engineering, and sometimes a scientific approach makes good developers better. But at the end of the day writing good software is a creative exercise and managing creative people is simply hard.

We pay developers to do two things: think and be creative. Good thinking and being creative cannot be mandated, both must be enabled. 80% of a development mangers job is enabling people to do their best thinking, and be creative, with good continuity over time. Its is impossible to plan, manage or schedule thinking and creativity.

The other 80% of our collective job is shipping stuff.  At some point in time we need to ship our software to the people who will use it.  Shipping can be engineered, planned, scheduled and managed. The challenge is that enabling people to think and be creative is requires a very different skill set than shipping.

If you want to be a good development manger, then your first task is to simply not suck.  Sucking at some management aspect is like a golfer who can’t putt.  A golfer can have a miracle drive, long and straight, a great approach game, but if they can’t putt – their drunk buddies who can putt will beat them.

This series of posts is my advice on how not to suck as a development manager.

I hope you enjoy this series as much as I enjoy writing it.

Best Regards

Written by foredecker

March 5, 2011 at 1:40 pm

Posted in Managing Developers, Uncategorized

Tagged with