Editor’s note: This is a guest post from Eric Brechner. Eric is author of the book, and blog, I.M. Wright’s “Hard Code.” At Microsoft, Eric is Director of Development Excellence on the Engineering Excellence team. His group is responsible for improving the people, process, and practices of software development across Microsoft. Eric has more than 20 years of experience in the software space, including a tour of duty on the Microsoft Office team.
When I first met Eric, several years ago, he struck me as somebody with opinions and insight. Time and again he impressed me with his words of wisdom and his perspective on everything from software to career and to life. He always has a good answer to the tough problems, and never fails to make me think.
Without further ado, here’s Eric on his Lessons in Software …
Rather than focus on software engineering and craft, I’d like to concentrate on admirable attributes of software developers as human beings. These are attributes of people I like to work for, work with, and have working for me.
The attributes fall into two categories—strength and balance. Strength attributes form the foundation of someone’s being. Balance attributes characterize how someone deals with opposing ideals. Clearly, this is going to be a philosophical discussion. Thankfully, it’s also going to be short.
I chose three strength and three balance attributes. I like working with a diverse set of people, so I narrowed these admirable attributes to just the fundamental set that yields an interesting individual I respect.
- Insightful. Smarts alone don’t cut it. There are plenty of smart people. It’s insight that changes the game. Insight drives the breakthrough. Insight directs the decision. Some people focus on getting the answer. That’s boring—there are lots of answers. Great people focus on understanding the problem—the customer, the scenario, the competition, the partners, and their situation. Great people are insightful. I love working with insightful people.
- Reflective. Being reflective is necessary to being insightful. Reflective people are curious and seek understanding, both of the problem and of themselves. They feel driven to constantly improve every aspect of who they are and what they do. Reflective people also tend to be self-deprecating and have a broad sense of humor. I delight in working with reflective people.
- Principled. “Whatever,” is something you rarely hear from a person of principle. Principled people do things for a reason. They have integrity, almost by definition. While I may not agree with the principles of a colleague, I respect him or her. You can trust people of principle to stay true to their beliefs and follow through, whatever the pressure or circumstances. I depend upon principled people.
- Serving and advocating. You must serve your customers, your team, your management, and your company. It’s not about you, it’s about the customer and the business. However, if you are purely selfless, your career and your ideas will go nowhere. You must advocate for yourself and your innovative ideas. Balancing these two demands in a way that promotes your contributions yet is never about you is challenging for most people. Great people serve and advocate with dignity and grace.
- Execution and slack. You must execute on projects and deliver on commitments. Great ideas are nothing if they never reach the hands of our customers. However, if you are purely tactical without thoughtful strategy, planning, and design, you will make critical mistakes, burn out yourself and your team, and deliver products and services that lack quality, value, and emotional connection. Balancing execution and slack time continues to be one of the great challenges of software development. Great people clearly prioritize their work, commit to difficult but achievable well-defined goals, and jealously protect their slack time.
- Trust and risk. You must trust your coworkers and staff. You can’t accomplish anything truly impactful alone. However, if you rely on others to help, there is always the possibility that they may misunderstand your instructions and intent or be unable to produce the results you require on time, regardless of what controls and processes you put in place. Balancing trust and risk is the subject of countless management books and theories. Great people care deeply about their coworkers and staff, develop strong trust relationships with integrity and transparency, and rely upon those relationships to inform and adjust an acceptable level of risk.
If these attributes were easy to embody, the world would be a different place. It takes commitment and courage to be insightful, reflective, and principled. It takes thoughtful and unending vigilance to delicately maintain the balance of serving and advocating, execution and slack, and trust and risk.
The right balance at the beginning of a project is often quite different from the appropriate balance at the end. People challenge your principles, doubt your insights, and question your faith in yourself and your team. You must be strong and believe in yourself, yet balanced and dedicated to those you serve. It’s not easy, and that is why I admire people who embody these attributes.
You Might Also Like
Top 20 Best Software Engineering Books of All Time
Architectural Styles in Software Engineering
Lessons in Software Development from Mike de Libero
Great article, Eric! A fantastic list of attributes whether you are manager or individual contributor, developer or project manager. Helpers to make you successful regardless of your role.
Speaking as one of Eric’s former “minions” its alway s a pleasure to see his thoughts…
Some of these qualities might be easier to come by than others. A team full of Principled Advocates is probably easy to assemble, and is also a recipe for disorder!
The difficulty in finding all of these qualities in even the most heroic of individuals is what makes professional software development a team sport. The wise manager looks for a portfolio of complementary talents and personalities.
Alik Levin | PracticeThis.com
I like the article a lot. I read your blog and I always find practical and applicable gems there. I can remember one called “Lead, follow, or get out of the way” about “Yippee-ki-yay, project buster!”
That was timely one back then.
For this one i liked trust and risk the most
Thank you for your great insights!
How’s Tesla so far? 😉
I like the theme of this article. It’s nice to shift focus to the people. All software is for people! Software has never paid me or thanked me as a developer. The following article also focuses on the people involved in development projects and the qualities they must bring to the table. Qualities Only People Bring to Projects
I really like this. Not only do I think its true, but it resonated for me in a really cool way. I actually felt peaceful as I read it. Yes, this is true and it sums up so much of what I know to be true but wasn’t able to articulate as well. Very well done.
Kevin Lam (IMPACTA)
Eric, I enjoyed your first point about smarts alone don’t cut it and that great people focus on understanding the problem! What a great perspective shift!
Eric, this is a great frame! and maybe useful to understand team building too. Have you noticed any difference between those that have worked directly with customers and those that haven’t in any of the dimensions you portray above?
Learning well of these kind of kownlege,we can make a bettter online marketing.
Fantastic article! The balance attribs are truly very very hard to achieve, but indeed those with the right balance are the awesome folks to work with/for.
Hmmm, this is very nice. Let us all hope that we are on a team (or are working toward being on a team) where these principles are taken seriously and respected. My experience is that the work environment is usually so chaotic that these types of considerations don’t come into play. Then again, I don’t work at MS. Probably things are different there.