Thoughts about what makes a great developer
People seem to agree that a great developer is better than many mediocre developers and I think that is true with good reason. Developers are craftsmen, in my opinion, like stonemasons, woodworkers, or carpenters. We make things that are useful to people outside the field, and, if well made, can be even artistic to those who understand the field. Similarly, like craftsmen, you can't replace someone with a skilled hand with many people with unskilled hands. They tried using automation and large factories to churn out things like mass-produced furniture, but at the end of the day, the IKEA fast furniture just really isn't up to the quality of a similar piece made by a real artisan. However, developers these days seem to earn a lot more than other craftsmen, and I think that is largely because for many people buying things like furniture or pottery (especially the young folks like me), cost is a lot more important than quality and most people would rather pay, say, 10% of the cost for something that is maybe 50% worse quality, but for software, if, say, Google had replaced its workforce with developers that cost 10% of the cost in exchange for Google searches becoming 50% less relevant, they'd probably quickly lose 100% of their revenue.
I wrote a small article for my team at work the other day about how, from my experience working as a developer so far, developers think about building new features, and that got me thinking about how can we know if a developer is a great developer? Conventional wisdom in the form of coding interviews tells us that the best developer is someone who knows how to solve difficult algorithm questions within an hour and optimize code to run quickly and efficiently. But from my work experience, at least at a newly IPO'd company like Duolingo, we rarely focus on using fancy algorithms to optimize our code. Another school of thought might be that a great developer is someone who can design a complicated system, i.e. someone who has experience with the right database for the storage, the right frameworks for the server, the right new fancy cloud tools make your backend "multicloud" etc. But this also doesn't seem quite right either.
I still do not know the answer for how can we tell if a developer is a great developer. If I did know, it would probably help make the interview process at Duolingo a lot better, so I'll definitely keep on thinking. Right now, I feel like maybe the best developers are the ones who can recognize the right abstractions. My reasoning is like this: Imagine if God was a coffee machine designer (or maybe 玉皇大帝, basically the mega-deity if you're raised in the traditional Chinese culture). What would this coffee machine design look like? I think God would basically know exactly what the users might want to change about the coffee machine in the future, and then design this coffee machine to be able to change in all of those possible ways. In the future, portable coffee machines are now cool? Well no fear because God knew that and you can easily swap out your electric plug with a new sleek battery pack. In the future, the world ends in a nuclear apocalypse? Well no fear because God knew that and you can just swap out the coffee machine filter cartridge with an anti-radiation coffee machine filter cartridge! This is the best coffee machine design because the designer knew exactly what the customers might want to change, and then picked the abstractions so that every time the customer wants to change something, it was incredibly easy to do so. This holds true for software as well. The best software developer, to me, is someone who knows what the customer might want to change, and knows how to pick the abstractions so that it is easy to do so in the future. If code with the perfect abstractions existed, it'd be super easy to iterate on, and would make it also super easy to pass on to other fellow developers. Of course, it is hard to even know what people want now, let alone what people might want in the future, so by this metric, how "good" a developer is going to be quite subjective, but as of right now, I do think this is probably along the right path.
Comments
Post a Comment