We believe that software engineering, like all creative endeavors, has great potential to improve the human condition. Steps toward realizing this potential must be taken with this axiom in mind:
We are humans
working with humans
to develop software
for the benefit of humans.
In other words, software engineering organizations cannot hope to sustain meaningful progress at the expense of the humans who make up the organization; the ends must not be used to justify the means. Software can and should be created with a minimum of pain.
With this in mind, we strive to create quality software at a sustainable pace. We accept the reality that some practices provide self-evident benefits that resist measurement by conventional means. We don't applaud speed for speed's sake. While there may certainly be circumstances that require us to "sprint" for a short period of time, this must not be the norm.
In lieu of Hustle, we propose the following virtues, each of which builds upon the last to foster a culture which is inclusive and empowering of its members:
Team members must be able to understand and appreciate each others' views. This extends beyond the development team and to the organization as a whole.
"Developers" and "The Business" are not two separate, adversarial entities separated by a hopeless divide. Developers must strive to understand the reasons for business requirements in order to provide results that surpass expectations. Likewise, The Business must attempt to appreciate the tradeoffs they are asking developers to make.
When team members empathize with one another, it removes a barrier to honesty. People won't make promises they don't think they can keep, and they won't in turn set unrealistic and arbitrary deadlines on their team members.
Team members are also freed to more honestly represent their own knowledge and abilities. They'll ask questions of one another more freely, including the most important one of all: "Why?" Honest answers to that one-word question can cut through mountains of misunderstanding.
Consistent demonstrations of honesty make it easier to trust each other. Team members need to be confident that the people working with them can be trusted to make the right calls. The time to determine whether your team member can be trusted to do the job she was given is past. That was what the hiring process was for.
Even when one believes the wrong call has been made, we must be able to at the least trust our team members' intentions and resolve the issue in good faith. This one virtue eliminates a whole host of issues relating to internal politics.
Finally, having earned the trust of our team members, we are better able to exercise autonomy. This isn't just a win for engineers. Autonomy is a force multiplier for managers.
The profession of software engineering naturally affords us an incredible degree of freedom. We can work productively...
Instead of being hamstrung by a perceived need to micromanage, leaders of an autonomous workforce can give team members wide latitude to approach problems in the way they work best. Rather than trying to formalize processes to account for every possible contingency, they can focus on providing their team with guidelines that help them make good decisions when unforeseen circumstances arise.
Except where otherwise noted, all content © 2015 Ernie Miller