| I’ve been hopping around a number of large non-FAANG enterprises for the past few years. In each, I keep observing a pattern - people seem uninterested in writing System Design / Architecture documentation. I struggle to grok a system if I can’t read about the context. What are the goals/antigoals? What constraints was the system built under? What big architectural choices were evaluated? (e.g Serverless vs Containers) Digging deeper I also see a lack of consideration for non-functional attributes like Performance, Capacity and High Availability. Cloud paradigms can help to an extent with auto-scaling etc., but I feel there should still be a model for the expected Perf/Capacity, given the selected SW+HW stack. In the case of High Availability, I continully see teams running critical Prod services without clearly documenting the expected behaviour if an Instance, AZ/Datacentre, Region or an external dependency goes down. All of these observations have been in highly regulated industries with significant tech budgets. So HN: Do you teams document these architectural designs? Have I perhaps lost touch with modern practices? How do you grow teams (or defend the design from Mgmt / Auditors) if this information is held in peoples heads? Appreciate your input and apologies as English is my second language. |
Ultimately, I blame management and incentives. I think most line levels would like to spend a lot more time making things bullet proof, documented, commented, automated, and diagrammed. But management and leadership want features delivered and progress made, even at the cost of a less robust and understood system. This seems like a reasonable trade off, but it should be made consciously. I don't think that it usually is.
To answer your questions -
Do you teams document these architectural designs? Barebones wiki. Terraform.
Have I perhaps lost touch with modern practices? The tech industry is VERY heterogenous in terms of practice. It's not the 80's 90's with the regimented "this is how we build and deliver software projects" waterfallesque processes. A lot of people have been burned by that over the years and have decided to go to the other extreme and throw a lot of process out of the window. A lot are doing scrum, or kanban, or agile, or any of a dozen other names for how we actually get shit done.
How do you grow teams (or defend the design from Mgmt / Auditors) if this information is held in peoples heads? Tribal knowledge dissemination to new hires by various current employees.