I went along to a rip-roaring panel discussion at http://whichlanguageforyourstartup.eventbrite.com/ last night. There was good natured sniping left and right between the PHP, Python and Ruby communities, a fourth panel member masquerading as a panel moderator, and a general acceptance that there was no real right language for your startup and getting the right developers was far more important.
Which got me thinking about what exactly were “the right developers” for technology startups. And by pure coincidence, I happened across http://blog.niroka.com/post/12253356252/the-hustlers-manifesto via Twitter late last night, outlining Roshan’s experience on moving away from a bunch of standard (albeit Agile) practices in order to best develop within his startup context.
There are three main points in Roshan’s post:
– Rule #1. Don’t Test (All) Your Code
– Rule #2. Stop Being Such A Nerd
– Rule #3. Take Ownership Of Your Features
I don’t disagree with Roshan’s findings, but personally I wouldn’t want to work in any environment which doesn’t value some of the specifics of Rules 1 and 2. Beyond that, I suspect (not having had the recent firsthand experience in startups to state outright) that most startups do not provide a suitable environment for the broad type of developer I most closely associate myself with.
This is not either good or bad. It just is. There are plenty of types of organisations developers end up in and plenty of types of developers to match. But IMHO startups and the “me” type of developer is a poor fit.
And here’s why…
I consider myself first-and-foremost a pragmatic developer, but one who is still striving to improve every aspect of what I do because I can see that very little in my field of expertise is going to stay still for long enough for me to get comfortable with it. This is double-edged sword as it is at once both a source of interesting challenges and great internal pressure.
As time marches on, I’ve become more and more aware of the need to maximize the amount of work I do that gets into production, but I don’t optimise all my behaviour for that desire.
I fully appreciate that software is a means to an end, but I also take enormous pride in the internal quality of the work I do. I long ago realised that perfection in software is (a) so context specific as to be an illusion and (b) tucked somewhere behind the point of greatly diminishing returns. That said, I need the ability to practice and refine my skills…
This means refactoring and experimentation.
This means repetition and reflection.
This means collaboration and contrasting.
I could be wrong, but I see technology startups as very poor environments in which to hold these values. Rightfully so, startup development teams must be intensely focussed on identifying a worthy problem and crafting a solution for that problem. As Roshan says, they must be willing to pivot when necessary as quickly as possible. This potential brings a much shorter horizon to YAGNI decisions than I would normally experience in my professional development life, hence Rule #1 and #2 above.
Very few technology startups use technology as a competitive differentiator for their product. The product is realised through technology and the ability to execute is crucial, but rarely is technical feasibility ever in question. There are exceptions to this rule (hello DropBox and others), but the vast majority simply don’t need (and therefore shouldn’t value) software engineers who have this sort of focus on software.
Of course, for those few startups that reach popular critical mass, then strong engineering skills suddenly become hugely valuable again, but often more so in scaling the solution to the rapidly growing audience. I suspect the people with the attitudes towards engineering that most closely match mine (and my colleagues at ThoughtWorks) within the ex-startup behemoths like Facebook, Flickr, Etsy and the like are concentrated around developing the platforms these products run on, rather than the products themselves.
So what type of developer is a good fit for a startup? As was mentioned at the event last night – someone who learns quickly is always going to be useful given the inherent time-to-market criticality. I suspect polyglot developers are highly sought after, especially for small teams. Beyond that, developers with that natural entrepreneurial spirit which will align themselves to the business needs of the startup. This alignment will allow them to adopt a more cutthroat approach to many of the tenets of development that I’m still attached to. For these people, shipping product trumps everything else. I don’t mean this in a derogatory manner, it’s just the natural result of a difference in core values. Neither sets of values is right or wrong, but knowing how you value these things is important to choosing what sort of work environment is likely to be a good fit.
So what type of work environment is a good fit for “my” values? Well, obviously I’m completely incapable of presenting an objective answer to that question, but this blog post by an ex ThoughtWorker really resonated with me – http://blog.jayfields.com/2012/05/single-best-thing-for-my-career.html.
Roshan – many thanks for the article that inspired my thinking down this path!