One of my more popular HN comments was a teardown of an all-too-common engineering subculture. The article in question sought to teach “Software Architecture,” but ultimately annoyed me and many other HN readers.
Tl; dr:
Software architecture discussions are so polluted by software-hipsters that the majority of software engineers are disinclined to discuss and study architecture at all.
Know-it-all / hipster
- Probably studied philosophy, english, film-studies, or engineering.
- Lurks around discussions, hoping to overhear a mistake, any mistake.
- Uses an unnecessarily complex vocabulary
- Has a self-righteous and loud tone of voice, especially when correcting people.
- Enjoys correcting people, even on minor/irrelevant points.
- If asked him a question you can be sure of two things:
1) he will never admit he doesn’t know
2) he will answer with so many niche terms that you will end up more confused than when you began - He may be likened to Dwight Shrute, or the comic-book guy.
Architecture Hipster
- Loves UML making diagrams. Gladly presents them without a legend to people who don’t know how to read UML diagrams.
- Love creating new unintuitive names for very simple ideas (e.g “Broker topology”). Proceeds to use these niche names in discussions and judges other people for not knowing what a “Broker Topology” is.
- Gets really into programming fads that are hailed as panaceas but later get tossed out for a new panacea (e.g. microservices, Layered Architecture).
- Gets very emotionally attached to programming decisions, even if they will have no effect on the user.
- Loves engineering around unlikely “what ifs…”.
- Prefers creating abstraction through classes instead of functions, even if no state is needed.
- Is bored by “practical details” like logging, debugging, convenience, fail-safes, and delivering quickly.
- Maximizes the number and obscurity of patterns used, leading to classes named things like EventLoopListenerFactory.
- Only cares about performance if obscure (e.g. tail-call optimization)
- Isn’t actually very capable creating software (hasn’t won any coding competitions, has trouble with git reset, hasn’t written any software that people enjoy using)
Thus:
Know-it-all / hipster = Architecture Hipster + software architecture
I don’t dislike architecture. Architecture is a beautiful study. However, the complexity of the discipline makes an fertile ground for phonies; a space for phonies to use miscommunication as a tool to create an illusion of their own competence.