As I was catching up on my blog reading today, I came across a great post by Joel Spolsky called Duct Tape Programmers about how he values developers who get things done simply, rather than being academic and overcomplicating it. I immediately passed it along to my engineering team and got mixed comments. The “smart and gets things done" developers thought it was great, while the most academic developer challenged me on it, especially on unit testing and multi-threading. I went on and read the posts in the discussion group, and I was amazed at how many Joel On Software readers were mad at him for the same reasons.
As a former engineer and someone who has managed their fair share of engineers, Joel’s "smart and gets things done" blog post has always resonated with me. In fact, I think it might have been the post that kicked off my addiction to my Google Reader years ago. I’ve always admired Joel’s pragmatic approach to everything from programming, to management, to product evangelism, and even building out his office (ok, maybe not so pragmatic there).
Can it be taught? Maybe. There are two problems with teaching this:
- I believe simplification is more of an innate talent than a learned trait…so there has be a latent talent present
- Most simplifiers cannot explain to others how to do it
While it is definitely not easy, there is one discipline that I have taught that can make the most academic engineer embrace simplicity: The Tracer Bullet. The goal with The Tracer Bullet is to get the code working as quickly as possible from start to finish. As soon as it works, the engineer is free to refactor it for code reuse, security, etc. but they must make sure the code still works. It is a kind of TDD at a system level. It is not an easy discipline to instill, and as a leader you will need to ride them a little, but it works. I’ve seen even the most academic engineers get addicted to a working system. And like most academics, when the system works, they often lose their passion to make it perfect. In the end, you often end up with working, simple code that does exactly (and only) what you needed it to do at that point in time.
Try it out and let me know what you think.