Software development is often seen as a "man vs machine" endeavour. In reality, it's still people who do the work, a work that often has a clear artistic component. It is work we do with others, for others. And here are some of my thoughts on that

Thursday, May 20, 2010

For most software developers, programming is more than just a way to earn money. What puts a smile on our faces as we think about upcoming tasks? What makes us think about the current problem when we wait in line, while we're driving, or as we fall asleep? Sure, we do it because it has to be done, but often there are much more personal reasons. Where does the satisfaction come from? We are all different, and different things make us tic, but all the cases fit in 3 categories: personal, interpersonal, and global. The fun is in figure out who we are based on what's important to us

Personal

Feeling smart: This is a very good feeling, whether it's because we've beat the machine into submission, or because we've found a whole new way to use an old tool. It doesn't mean outsmarting another person, but lining up ideas in a productive way

Aesthetics: Coming up with a beautiful, elegant design. Simplifying something complicated. Making all the parts fit nicely

Achievement: Going beyond our abilities, taking it one step further

Learning: New tools, new ways of thinking. We prefer learning things that change how we thinking about the problem. The more ways we can shape our minds around an issue, the more likely we can come up with an elegant solution; or a solution at all.

The big "DONE" stamp: when we get to say something is done, out the door, complete. Sometimes we have to compromise - we'd like to tweak this a bit more, or refactor that, but like an artist, talent isn't only knowing how a piece can be made better, but also knowing when to stop.

Glory: well, okay, that's pushing it a bit, but the recognition of others, whether our peers, customers, or the whole wide world is a very powerful motivation.

Interpersonal

We are often seen as solitary workers, but in truth, our job cannot be done totally alone. We value good relations with our coworkers, mentors, employer, and clients.

Coworkers: we often need to rely on others, whether to show us what they've done, to discuss an idea, or do share the workload. Good relations with them come from listening to ideas, asking question, and pointing out issues in a respectful manner. It works even better when we can be friends with our coworkers, and spend time together outside the work environment, but that's not necessary.

Relations with the employer can be very productive when we know what's expected of us, what the boundaries are, and when we know we can meet our targets. We much prefer having some freedom in how we attain these objectives, and when we have input in setting the targets. When employees are asked to set the target themselves, they tend to shoot for higher accomplishment, and they are more likely to reach them. This is true not only for software developers, but in pretty much any field.

Clients (in a consulting or customization setting) are also part of the interpersonal aspect of a developer's life. Some of us hate talking to the client, but for others, knowing the person who will use the product, knowing how they will use it and why, can help us propose solutions they may not have thought of. It may require us to think differently, to use a different language so we can truly connect with the client in terms they understand, but that just keeps our minds nimble.

Global

For some of us, the greater good is what drives our actions. We can make a difference by the work we do, whether it's through software that favors sustainability, the people we're helping, teaching/education we support, the time our software will save thousands of people, the list goes on. We all have causes we support, some more ardently than others, and when our work allows us to promote them, or help them along, we derive even more satisfaction from our efforts. We build a legacy, even if it's all too often anonymously.

Clearly, money is not the only reason we develop software. If it were, there would be no Open Source movement.

We all feel the pull of these motivations differently. For some, doing good for goodness's sake is plenty; others want recognition. I'm generally motivated mostly by the personal and interpersonal aspects of the work. I value the recognition of my peers more than that of the population at large.