Developer Alignment

NOTE: Credit where credit is due. Renowned software blogger Steve Yegge made a very similar point several years ago

I've observed that there are two kinds of developers in the world.

One kind is of a basically lawful good alignment.

In their personal lives, they are people who make their bed crisply every morning. They like color-coding and todo lists.

They like static type systems, interfaces, and inheritance hierarchies. In general, they see organization and consistency as the highest virtues in code, and if code needs to be more verbose in order to be consistent and organized, then so be it. Their preferred languages are Java and C#. They love Angular, and believe that Typescript finally makes the frontend bearable to work with. They like Windows, Jira, IDEs, and XML, so long as it has a robust schema. They sincerely believe in the power of scrum.

They generally believe in Cathedrals. They think that the ideal software is the result of top-down planning. It should be an integrated whole, with a place for everything and everything in its place.

They look at the other kind of developers, and see them as not just technically incorrect, but morally deficient: a bunch of reckless cowboy-coders who give the profession a bad name, who need a responsible adult to come in and clean up their messes.

Then there is the other sort of developer, with a kind of chaotic neutral alignment.

These are people who hit the snooze button on their alarm each morning. Their closets have a few piles on the floor which are just "Miscellaneous".

They like functional programming, dynamic typing, and JSON. They consider conciseness and DRY to be the highest virtues in code and they are skeptical of any approach which adds more lines of code just for the sake of orderliness. On the frontend, they gravitate towards React or Vue, and feel like they ought to learn Typescript someday. On the backend, they prefer Ruby, Python, and Node, and if they're old enough, they remember Perl and Lisp with nostalgia. They like Linux and Vim, and roll their eyes at scrum.

They generally believe in Bazaars. They think that the best software arises organically by incremental improvements upon a Minimum Viable Product. The best approach is a toolbox filled with small, independent tools which each do one thing, and do it well.

They look at the other kind of developers, and see them as not just technically incorrect, but morally deficient: A bunch of stuffy bureaucrats who try to disguise their incompetence behind a shield of rules, process, and FUD.

What's most interesting to me about this divide is how most developer tools seem to be aimed squarely at one type or the other. If you have a Java and Angular app, most of the people who apply to work with you are going to be of a lawful-good temperment, and you'll end up with a mostly chaotic-neutral team if you buld your app with Node and React. I suspect this is the single most important consequence of the technology stack you choose, far outweighing the precise technical merits of the tools.