In the early days of being a Development Manager, I used to make the rounds four to five times a day asking each member of each team: “How are things going? What can I do to help?”. Sometimes I would get the opportunity to assist, but most of the time the response was something along the lines of “Everything is going well, no help needed”.
My intentions were good and were totally in line with my responsibilities. However, I think it was around the first time that I heard Scott Hanselman’s talk on productivity (see his blog post on the topic) that I really started to realize the cost of these interruptions. Even something as simple as a yes/no question (“Need help?”) can break somebody out of “The Zone”.
It is important that team members get uninterrupted time every day. Part of not interrupting someone is being able to tell when they actually are in The Zone. This isn’t usually rocket science; if you see that someone is really intensely focused, then don’t bug them. If you have trouble telling when someone is in The Zone then work out a signal like wearing headphones, setting something out on their desk, etc. as a visual cue.
Another disruptive but convenient communication technique — and one that I am guilty of overusing myself — is instant messaging. Although we may not realize it, sending someone a message can be almost as disruptive as walking up to them and asking a question. A little blinky window at the bottom of the screen can be enough to break someone’s concentration. A phone call is even worse.
Ok, so how can we communicate with team members without disrupting? That is, how can we communicate without having to worry about breaking people out of The Zone? The most obvious way is to approach someone when they are clearly not in The Zone. What if you don’t have the luxury of sitting right next to the team member? Try email.
Yep. Good old fashioned email. Email is a great way of issuing an asynchronous request that says “hey, when you get a minute I need to talk to you about XYZ”. There are three benefits to this approach. 1) Your team member will likely only be checking their email when they are at a good stopping point. 2) Giving some sort of context as to the topic can allow them to mentally prepare. 3) They can choose to reach out to you when convenient for them. As Paul Graham’s blog post suggests, a manager’s schedule is more conducive to interruption, so this approach won’t cost you as much time overall.
It takes discipline and patience to avoid disrupting your team(s). I often times struggle with adhering to these ideas myself, but it’s a work in progress.
As a (software) Development Manager myself, I am always pondering exactly what it is that makes someone great at this role. While surely every company has their own take on the role (if they even have the role!), here are my thoughts about what makes a good Development Manager.
As with other members of the development team, the primary responsibility of a Development Manager is delivering software. Obviously this needs to be the right product, with the appropriate level of quality, delivered in an acceptable amount of time. Without directly gathering requirements, doing design work, developing, testing, etc., how does a Development Manager contribute to delivering great software?
Here are what I believe to be the most important responsibilities of a Development Manager that have a direct impact on a team’s ability to deliver effectively:
- Ensure your teams are following an effective development process. This should likely include a focus on communication both within and outside the development team(s), a continuous improvement model like frequent “retrospectives”, and some basic mechanism for measuring and communicating progress. This is in large part what being Agile is all about. A hugely important function of a Development Manager could also be drumming up support for Agile if there is a culture challenge within your company.
- Do the normal managery stuff. Make sure teams are appropriately staffed and equipped. Mentor the team leads. Train and grow team members. Make sure people are happy. Be accessible. Break down barriers for your teams. Keep your teams informed of what is going on in the business. Participate in the budgeting process. Share responsibility for failures and shield your teams from politics and drama.
- Keep upper management informed. Upper management should know what your teams are about. Let them know about your teams’ successes and opportunities on a regular basis. The only way you can grow your teams and get the resources you need is if the company understands and believes in what you are doing. This responsibility would ideally be shared with the Product Owner(s).
- Understand the business and advocate technology solutions. As with a Product Owner, I believe a good Development Manager needs to have command of the company’s strategy and major initiatives. This understanding coupled with a strong grasp of technology and your teams’ capabilities puts the Development Manager in an excellent position to advocate solutions which can be delivered by your teams. Of equal importance can be understanding what is not a good fit for your teams. For example, don’t commit to building an enterprise chat system when there are perfectly good packages that could be purchased instead.
- Help wherever it is needed. A Development Manager needs to have a strong technical background and needs to understand all of the roles of the cross functional team. I believe a good Development Manager should be able step up and provide hands on help when the team really needs it. This could be anything from doing actual development to manual system testing to requirements refinement and gathering, or anything else that might be blocking the team. If this is happening frequently then it is a sign of a bigger problem, but occasional help at this level is appropriate.
What do you think are the most important functions of an effective Development Manager?