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.