Julian Fell

Bull and Lamb

Today my team started prototyping an implementation for a core part of our product using a technology that doesn’t support Javascript (our primary language). This is really the only time I would consider a new language, as I am a strong believer in the value of keeping your technical footprint small.

Let’s say the options were Lamb Lang and Bull Lang. Our team has a little experience in Lamb and none in Bull. After doing some reading and experimentation I came to the conclusion that Bull would be the better technical decision for the project while Lamb would be easier to hire for and had some support from others on the team.

So should we take on the risk of being technologically unexceptional or risk extra difficultly in hiring and upskilling?

We could be grappling with an untethered Bull, unable to wield its power and petrifying new hires with its raw strength. Or we could be stuck with an uncomplicated Lamb, familiar and easy to tame but utterly unexceptional?

I am the kind of person that wants to grapple with the Bull, fully expecting to bend it to my will. That is the thrill of coding for me. Initial confusion replaced by clarity, finally imposing order to elegantly solve the problem. My victory over disorder evidenced in a set of text files, committed into (git) history forever.

Work should be about finding satisfaction but also has to result in something maintainable. Maintainability is not just about clean, well-abstracted code. It has a dimension along comprehensibility as well. How well other people can understand and extend the code you have written is a function of both their familiarity with the language as much as the complexity of the code itself.

The abilities of an abstract pool of potential hires is hard to accurately predict. Maybe in three years time Scala will come into vogue and suddenly be easy to hire for. Maybe there is (as I suspect) a valuable filtering of potential hires being performed that leaves out those who stick to mainstream languages.

Ultimately I need to make the case for Bull or Lamb without personal bias. This dictates that I only consider the facts, but I can also present my judgement as the domain expert to be considered. This presents an interesting conflict of interest.

Adding to this, I have the complication of likely being the most active in the new codebase, but also want the company to be sucessful. My desire to feel powerful when working on this project will colour my interpretation of the types of risk inherent in the decision, but I can also try to account for this.