Managing Developer Happiness
To manage developers you need to find them first. What attracts quality people and talent worth giving your best for?
That is a loaded question, it depends on the individual. Typically I hear “I want to work with smart people.” I do to. The reality is, as managers we need to surround ourselves with people we can sharpen and who sharpen us. Be honest about your team’s skill and what a values you expect a candidate to bring to your team. Developer’s values vary: flexible schedules, autonomy, working on ambitious products, modern technology, low technical debt, etc. Just ask, it’s ok to have a variety of personalities who team up to build great software, it’s about respecting one another’s values.
Now that you have a team, how do you keep them engaged, motivated and interested in working with your organization?
What keeps their interest? Is it the technology stack? Or, work-life balance? How about owning a piece of the business? Contributing to open source projects? Twenty percent time? Training opportunities? It varies, do your best to meet individual needs and provide a path for growth that fits the expectations of your team. Don’t shut down dreams by refusing to make goals a reality. Go to bat for your team, get them what they need - so that they can focus on work that matters.
As a manager, are you meeting the expectations of your development team?
What do they expect from you? Trust. No micro-managing. A good manager lets the rubbish roll up instead of flow down. Move obstacles and barriers that prevent your team from focusing on their best effort. Flexibility. Support for work-life balance that - Just Works™. Create time to focus on objectives, avoid meetings and keep communication channels open. Provide an opportunity to learn, enjoy life, refresh and recharge, to go to conferences and support local software user groups. Communications should have a frequency that works for the individual. Don’t over-do or under-do what matters to your team. I call this servant leadership. My objective as a manager is to provide the necessary support, whatever it may be, so that my team can shine and take pride in the product of their investment of time, thought, labor and sweat – ultimately shipping valuable software products for users to enjoy.
Do you know what developers expect from work, from the business?
How about a challenge to tackle? A finish line to cross. People to collaborate with, an excellent project manager or business owner. A roadmap that inspires great work. And of course, time away from work! “All work and no play makes Jack a dull boy” –Jack, The Shining. Maybe, work from home. For some, work at work; away from home. For others, a flexible schedule that affords putting family first. Many developers would really like to work for a remote friendly organization. Work is for work and quitting time is for play. It’s fine to mix it up a bit; but remember the company is not your family (aside from a family business that is).
So you’re a manager of developer happiness, what should you do?
Act as a servant, a leader, help your team do their best work. Lend a hand when you are asked, get out of the way when you recognize you're not helping anything. Ask good questions about code, be involved in peer reviews. Set standards and practices that reflect the values of your team and organization’s needs. Put people first, before policies/protocols. Filter out the bull, run the interference your team needs so they can focus on development. Remind your team to go home; the work will be there tomorrow. Question your assumptions and the assumptions of others – in a positive way. Ask about what is best for the team, the company, and the individual. At times all three are not in harmony, find a workable compromise. Take responsibility. If necessary deploy, do the QA work, write CLI tools, write documentation, release notes or create diagrams for systems information. Be a coach, show stakeholders how to work with a development team, how to motivate them. Communicate the value your team brings to the business. Have an opinion, and welcome the opinions of others. Be who you are and respect others for being who they are. When push comes to shove, fight on behalf of your team. Show up and flip tables when it’s the right thing to do – when the benefit outweighs the cost, for everyone. You are the leader, act like it. Have a life outside work, but make work fun too. And, have a sense of humor, you will need it. Expect great days and horrible days – both will pass, keep a steady and positive attitude about a plan forward, regardless.
What about process?
How will your team succeed at getting things done? Do only what works! Experiment and learn along the way. Tools and process should not get in the way, choose wisely. Provide guidelines on how and what your team should prefer, based on team values. For example, a code standards document or style guide helps establish a bar you can raise when needed. Layer work that is dependent, for example only two of these three will likely succeed when in flight concurrently: 1) UI/UX design 2) API contracts 3) Feature development. Working on two of these at a time works to move toward a solution but all three in flight together invites chaos and likely failure to meet goals. Favor process that has proven to be successful elsewhere. Don’t re-invent process for the sake of bespoke ideas. To codify how your team will focus on what is important… adopt successful process that can blend with the footprint of your organization. Pick naming conventions that can work; conventions do not have to be perfect. Perhaps use “git flow” or simply borrow the parts that work for your group. Use Scrum / Agile practices that people recognize, so that you do not have to explain “how“ your team get things done. In order for your team to deliver results that matter, surface actionable work - which brings value when you ship it. And, avoid working on features that are not well defined. Define done.
What about the size of your team?
Prefer a small team, or many small teams if you work in a large organization. This affords leading by example, so you can still write quality code as a manager. It also limits collisions of code and incongruent methodologies from hijacking the work. Align strengths, front-end, API, style wizardry, software design and automated testing chops too. TDD that stuff together or plan a perfect system - various strengths can sharpen the team. Let people do what they do best.
There are some things a manager should avoid.
Only do what you can succeed at, based on your resources. Don’t become the project manager or product owner, focus on developing successful and shippable solutions. “Real artists ship” -Jobs. Don’t get mixed up in company politics, delivering results carries weight and should be the leverage you need when you need to play your cards. Don’t work on the stories that challenge your team, let them enjoy a challenge and come up with a win. Don’t go dark, embrace interruption, help move obstacles for your team. Avoid saying “yes” to anything that is not already groomed, actionable and committed to work on. No means no. An untimely yes means no to what you already said yes to. It takes a lot of “no” to get the best “yes”. Avoid being selfish, we all can be. The team has to succeed, period. Don’t be a jerk, people have feelings, empathy goes a long way. Don’t cave in to pressure for late hours and work through the weekend. You set the example, work smart, not hard and long. Which only results in starting more fires and a fosters a culture that rewards and recognizes people for putting out fires - instead of a culture which avoids starting fires and which focuses on adding value to your product or business. Long/extra hours are a distraction that drips poison into quality software.
You’re a manger of developer happiness, how does a manager sharpen oneself?
Surround yourself with other leaders, at your company or in the software community, both if you’re so fortunate. Take time to have conversations with other leaders. Talk about what makes you tick and listen to the experience of other leaders. Seek mentorship in all areas of you’re life, they seem to blend a bit anyway. Becoming a better leader at home leaks into being a better leader at work and vice-versa. Be helpful where you can, others will recognize that and return the favor, “pay it forward”. Treat others as you would like to be treated, it takes practice. Reflect the best character traits that you’ve seen modeled by mentors or your former managers. Volunteer to get involved with a local software user group, or online development community. Solve other people’s bugs, give back where you can.
Don’t miss this… what must a manger get right?
Say “Thank you.” It matters, people deserve a kind word, especially when they give their best. Recognize valuable contributions. And, have a plan forward, when the tech debt is high, roadmap is steep, the backlog is thick, or you have no clue what’s next. It takes a plan to maintain forward momentum. Maintain and display a positive attitude, “Attitude reflects leadership” (Remember the Titans). Listen. When in doubt, listen some more. Celebrate finishing well. Learn from the past, success and failure both provide valuable lessons. Succeed and fail transparently. Balance work and life commitments for everyone on your team, including yourself. Help others give their best effort, “Yes you can” motivates others, tell yourself that too. Challenge others to grow, provide specific and reachable goals. Do the hard things, you’ll recognize them when they come - and they will come. Don’t be a coward. Set the temperature for your team, like a thermostat, not a thermometer only reading a value. Respond to change instead of reacting to it. Be a leader both at work and outside the workplace, it takes effort. Elevate others, provide a blueprint for growth and provide the experience that is valuable anywhere, and also provide a reason for your teammates to stick around.
There are many stories I could tell of how good managers have taken time to coach me, they have invested their experience and knowledge in me; and helped me to become better at my craft. They stepped in when I was down and propped me up toward success - by believing in me and challenging me. Mentors and business coaches have challenged me personally to be my best. I still tell myself, “you can do better,” because the race is not over yet. Also, I’ve worked with some managers who were so obnoxious I could just puke. I learned to move forward when I must. If all fails, be a manager of one, and start over again. Ahead, there are battles to win, competitors to face, and most importantly a team at your side - to make work and life more interesting. Do what you can for the people who look to you for leadership and remain teachable, surround yourself and your team with the best people you can mobilize, and build great software. Users everywhere are depending on it, they need it - we all do.