So I read a great article by Wil Shipley about success and the types of software start-ups. He has this wonderful tortured analogy about whether your are behaving like a farmer ("You husband the soil to ensure that it’ll keep providing for you for years and years") or a miner ("You’ll make a big score, then the land will be spent, and you move on, leaving an unusable crater.")
You should go read the article. It's right here: http://blog.wilshipley.com/2011/04/success-and-farming-vs-mining.html, it's really very good. I'll wait...
Now, Wil is using this analogy to explain the behaviour of the companies themselves, or rather the entrepreneurs running the companies. However, it got me thinking about my own attitude as a developer for a software company.
My friends and colleagues in the business often ask me why I don't become an IT contractor. I could certainly earn a lot more money if I went contracting, so sometimes I wonder myself. Reading Mr. Shipley's wonderful metaphor helped me realise why.
Now, I don't usually work with contractors that explicitly have the same motivation that an entrepreneur focused on his exit strategy has. It's not quite that cold. More usually it is about a well defined contract. Something a good developer loves. It says I am here as a highly skilled professional, able to deliver a technical solution. I will help solve your business problem through this technical solution, but I am not invested in the business. I'm invested in my own business of delivering software. I expect to be well paid for this in return.
I think this strategy works very well in some circumstances and very poorly in others. I think it works pretty poorly in a start-up. Everyone involved in a start-up needs to be passionate about the goals of the company. Everyone involved in a start-up needs to be willing to muck in and work in a variety of capacities. "Wear many hats" as my old boss used to say.
Utilising experienced contractors can be very successful in other circumstances. For instance we have a company that needs some bespoke development, which isn't it's core competency. Perhaps a better instance is when that company just needs more resource for a short amount of time, or if it needs some expertise not available within the company.
So, back to my journey of self-discovery of whether I am a farmer or a miner. As I grow in experience, I not only care about improving the technical solution; improving the quality and craftsmanship of my products. I also care about what that product is.
It's important to me to be proud of what I create. I naturally get emotionally invested in the business that I work within. I think that means that I am better suited to being a farmer. Or to torture Wil's analogy even further, to being a permanent employee.
I am passionate about making good software. I love being able to be an important part of improving a business through software. I want to nurture a company and help it grow. In return I want a company to nurture me and give me the space to grow as well.
Writing this has fired off all kinds of other thoughts, that I will leave for another time. For instance, whether my examples of where contracting is useful: Aren't they better examples of where consultants or out-sourcing would be more appropriate? Also, how if we consider our software development practice to be more akin to farming than mining, then the importance of maintainability through quality and craftsmanship becomes so much more important.