Developers who simply work for a paycheck have different priorities so I am going to ask you to forget about them for a minute. If you joined software development out of pure passion for the industry then you have a different agenda. Building software is a very creative and constructive process but the intangible nature of software makes the parallels to traditional engineering difficult. The job titles in our industry typically reflect some form of engineering but it seems to have lost its impact (Do most people think of a software engineer and a civil engineer having the same qualities?). Yet we do still share many of the same feelings and priorities as conventional craftsmen.
- A tendency towards perfectionism (ever caught yourself tweaking the UI or code a little to get it aligned just right?)
- Pride for the end product
- Strong sense of ownership
- Criticism of other work
- Responsibility for flaws
- Strong affection for our tools of the trade (editors, IDEs, utilities, home grown tools)
- Strong need to use new tools and processes
Some agile practices (collective code ownership, pair programming, good enough) seem to reduce some of these basic craftsman tendencies but they still exist in some form.
Unfortunately these traits don't always align with the business interests of the project so we have to balance the different priorities to achieve the optimal environment. How can we understand these tendencies to enjoy our work more and motivate others on our team?
- Introduce new technologies and techniques in a controlled manner so that the team is able to try new things without taking large risks. Be sure to include developers in this decision making process - after all they should be the ones 'in the know' on new technologies, right?
- Practice pair programming to encourage communication, sharing of skills and team building - this can bring a lot of satisfaction to a developer team without changing the tasks or the priorities of the project.
- Encourage participation in community developer events (user groups, code camps), blogs (share links across the team), books (monthly bookshelf anyone?) and conferences.
- Avoid generalized training - in my opinion this tends to serve the paycheck programmer more than the dedicated ones. Instead prefer specialized training which focuses on particular new techniques that have already been piloted and now use that training time to get a jumpstart and avoid early pitfalls.
- Interesting projects - this is tough to control since business priorities and budgets usually dictate the schedule however there are often ways to make projects more interesting without risking timeline or budget.
- Satisfy your customer - there is nothing better than the feeling of a job well done to motivate a developer team!
Some of these ideas have been very successful on our projects. What motivates you and your developer team?
Jonathan Cogley is the CEO and founder of Thycotic Software, a .NET consulting company and ISV in Washington DC. Thycotic has just released Thycotic Secret Server which is a secure web-based solution to both "Where is my Hotmail password?" and "Who has the password for our domain name?". Secret Server is the leader in secret management and sharing within companies and teams.