Doing a Good Job

What is our job, and how can we do it better?

For a while, I've wanted to write a blog about what it means to be a craftsman. However, I've always had trouble fitting some of the things I wanted to talk about under the Craftsmanship umbrella.

This brings us to SCNA (Software Craftsmanship North America). SCNA is a language-agnostic conference focusing on the topic of software craftsmanship. While I was at SCNA, I heard a lot of great talks that seemed to fall under a different category than Craftsmanship, which was just about doing a good job. Here's a brief summary with my ideas tossed in.

Attitude

Cynicism is laziness. Chad Fowler at SCNA

In short: stay positive! Not only is cynicism laziness, but it's also alienating. You should never speak negatively about your clients. Negativity breeds negativity and is disrespectful. No matter how smart you are, you are still replaceable. There is always someone as smart or smarter than you. If people don't enjoy working with you, they will find someone else.

Maintaining a positive attitude should also be extended to the tools and languages we work with. A perfect example of this is JavaScript. Almost every time I heard JavaScript mentioned at SCNA, it was in a negative or, at best, a joking manner. This attitude prevents you from taking the language seriously and making an honest effort to learn it. It also alienates anyone who would otherwise be willing to help you. The attitude I felt at ClojureConj towards Ruby was completely different. There were some jokes made at Ruby's expense, but I didn't feel alienated being a Ruby developer at ClojureConj.

Caring

Your UI is your application. Billy Whited

It's important to take care in all aspects of your work. You should care to write maintainable code. You should care enough to test your code. This care should even be extended to how your user interacts with your application. If your application looks bad, your users will think your application is bad, regardless of the features it has.

You should always says yes if someone asks you for help. Uncle Bob

Most importantly, you should care about your customers' problems. Essentially, your job is to sustainably and continuously deliver working software. Your customers have hired you to help them solve problems they have. This does not mean you should compromise on any of your disciplines. Also mentioned at SCNA was sometimes the best help you can give is to not write any code. Even suggesting pre-existing software might be the correct solution to a given problem.

Practice & Self-Education

Performance artists spend most of their time practicing.

Software Developers spend most of their time performing. paraphrased from David Chelimsky

Practicing is definitely linked with caring. You practice because you care about doing a good job. You practice because you care about improving yourself. And, hopefully, you practice because you enjoy it. We've all heard the phrase "be the worst." It doesn't matter how much experience you have, even a master can learn from an apprentice.

Things you should be doing:

Writing Code

When it comes down to it, writing code is what we do, but it's only a small part of what we do. Why do we write clean code or care about code quality? There are many reasons, including low bug count, readability, maintainability, etc. Writing clean code for the sake of having clean code is not one of those reasons.

Every line of code is a liability. Corey Haines

Code is just a means to an end. The user of the system doesn't directly care about your code. They just care that the app works. Most of the code you write is deleted, especially if you are taking the time to practice and refactor your code. Another reason to not be too attached to your code is because it will change. Instead of getting upset when someone makes changes to your code, try to learn from what they did.

Takeaways

To summarize, one needs to:

  • maintain a positive attitude
  • care about all aspects of the system they are building
  • care about their customers
  • practice

Doing these things will go a long way towards improving yourself as a craftsman, regardless of title.

Eric Meyer, Software Craftsman

Eric Meyer has recently been developing applications for the iPhone and iPad using Objective C.