So how do we establish autonomy in the workplace? Kenneth Thomas identifies the following building blocks -
- Delegated authority - the right to make decisions
- Trust - confidence in an individual's self-management
- Security - no fear of punishment for experimentation and honest mistakes
- A clear purpose - an understanding of what one is trying to accomplish
- Information - access to relevant facts and sources
Does this mean we are left with a free-for-all? Not at all - everyone understands there needs to be boundaries, and these are often captured in standards and practices documents. Ideally these should be negotiated up front, and the relevants parties should "buy in" to whatever boundaries have been established. Then, so long as the boundaries are respected, the programmer ought to have autonomy.
One of the reasons I like Scrum is because it establishes and protects programmer autonomy. In a proper Scrum, the development team must agree to the amount of work to be done in a sprint. Furthermore, once the sprint has started, it is up to the team to implement the functionality as they see fit - neither the Scrum Master nor the Product Owner are permitted to interfere. And teams are highly motivated to complete a piece of work that they voluntarily agreed to - much more so than a schedule that is imposed by fiat.
Granting autonomy is not hard for "Big Picture" people - it is much more difficult, I think, for detail people, who want to know and control every little thing. If you are guilty of micro-management, I'd encourage you to change your course - the impact on motivation will be spectacular.