This is a technical blog, right? Why would I mention this virtue? In Management 3.0, Jurgen Appelo suggests in Do-It-Yourself Team Values that the various Agile, Lean, XP, etc. principles are, quite simply, virtues. Teams should pick a small number and focus on them. “Kindness” is not among the 50 virtues he suggests thinking about, but it should not come as a surprise that that my rationale for “kindness” will overlap that of many other virtues, such as “helpfulness,” “mindfulness,” “tactfulness,” and “service.” Each of these single words offers a slightly different window into an ineffable world of human goodness, and I choose “kindness” for this theory. First, a minor digression.
Information technology (IT) is about business, which is capitalism. Some would have us believe that capitalism is about ruthlessly applying all available resources in the pursuit of ever-expanding wealth for the shareholders. Bill Gates has done a lot of good in recent years, but with wealth accrued from frequently ruthless business tactics. Where is there room for kindness in the business environment? This is not the place for a thorough discussion of political economy, so I will offer little justification for this postulate: capitalism and virtue are not incompatible. Maybe I’ll follow-up on this on my regular blog one day. For now, I’ll stick to the small-scale: programmers in a (primarily) business environment.
This notion of kindness stems from a remark from a co-worker a few years ago. He asked how I managed to “deal with” a particular business representative, with whom many others would become frustrated and flustered. My response: I work with her, not deal with her. I tried to understand her position, negotiate in good faith, and act out of patience and compassion.
What does it mean? Etymology Online suggests the original meaning was something like treating people like family. Let’s focus on the ideal of family treatment, not the dysfunction, shall we? Why be kind? That whole Golden Rule thing, for one. To whom should programmers be kind? Users, stakeholders, each other, themselves.
- **USERS**: a successful application tries to help the user, actively thinking about his/her tasks and the context for those tasks. Is the individual use the application constantly? Then place even more emphasis than usual on easy screen navigation, without the need of repetitive wrist movements. Use clear and easy-to-understand terminology, on screen and in error messages. Learn the language of your users, so that these messages are meaningful to them, rather than being cryptic programmer-speak.
- **STAKEHOLDERS**: provide meaningful insight into project status, so that they can react to delays, innovations, questions. They can't do their jobs without those insights. And if they can't do their jobs, then your software project is unlikely to be successful.
- **EACH OTHER**: provide documentation; write clean, coherent code; support and encourage each other.
- **YOURSELF**: think of your future self. Don't take shortcuts or be lazy, as it will come back to haunt you at 2:00 AM when production is down. Go ahead and write a few more tests to bring that test coverage up to 90% or more, even if no one else is looking. Your future self will thank you for it.
I never realized how hard it would be to write up a justification for this suggestion. Consider this a first attempt, and hopefully I’ll be able to come back to it over time for a more cogent argument.
Some people’s natures might not allow them to be so pro-actively positive as this blog post suggests, but I rather like The Positive Programmer. The paragraph on compassion is closely related to the kindness I am speaking of above.