4 ms·
Ask HN: How to get good at software system architecture
I would like to have the competence to choose the right kind of technology for example like AWS lambda for different components of a software system
- kypro 3y agoSome of it is opinion and personal preference, some of it is respecting and adhering to patterns and techniques already in place. All of it requires some understanding of the pros and cons of different technologies and architectural decisions. I'd be surprised if you could simply read a book or watch a video and learn how to architect complex software solutions, honestly. For me working at different orgs and being curious about how all the various layers of the software stack fits together has given me a decent perspective on different approaches to problems. Also, "good" here is somewhat relative. Being "good" an architecting problems for large orgs operating at scale is far more challenging than being good at architecting solutions at a small startup. Smaller, younger companies generally don't need anything super fancy or complex, what's important is getting things done so typically you build simple and worry about doing things right later. Some basic AWS knowledge and a strong coding background is probably all you need. Larger, older orgs are far more intimidating because there's so much complexity already in place, and often there will be entire teams built around managing that complexity. In these cases you need have an appreciation for what already exists and build things that complement and improve on that. You also need more experience with building at scale. At a small startup whether you decide to go serverless or not doesn't really matter, but at a large org with tens of thousands of daily users the cost of a bad decision grows exponentially. Another thing I'll note is that if you're doing this for career opportunities whether you can do something doesn't matter one bit. Companies won't hire you unless you have a track record. If you want to become a technical architect I think the challenge is mostly knowing how to play the game in such a way that you can take on those responsibilities at the place you work. Learning how to architect new solutions isn't that difficult if you're curious about how things work.
- revskill 3y agoMVC in the small, MVC in the large is 80% of what you should learn. You might ask, how about 20% of the rest ?
- realprimoh 3y agoLearning by doing is obviously the best way, but not every role has that kind of opportunity. You can build something on the side and scale it, but it's easier to just do that in a company :) I'm no expert on system architecture, but I have noticed that reading a lot of docs and blogs on how other companies do things successfully has helped me: Quastor: quastor.org - Engineering blog posts and summaries Engineer's Codex: read.engineerscodex.com - Case studies and summaries of Big Tech systems and software architectures SWE Quiz: swequiz.com - Bunch of useful questions that has helped me a lot at work TLDR Web Dev: tldr.tech/webdev - Good for keeping up on engineering-specific stuff in general. I have a Feedly set up with these blogs too: https://blog.bytebytego.com/p/79-engineering-blogs-to-level-up https://blog.bytebytego.com/p/79-engineering-blogs-to-level-... ByteByteGo is good too, though that's an obvious one that everyone already knows about.
- sandreas 3y agoYou could take a look at Awesome Software Architecture [1] [1]: https://github.com/mehdihadeli/awesome-software-architecture https://github.com/mehdihadeli/awesome-software-architecture
- akkad33 3y agoLooks nice thank you
- wanapreneur 3y agoAlso take a look at https://github.com/madd86/awesome-system-design https://github.com/madd86/awesome-system-design
- sim7c00 3y agoi would say experimentation. trying implementing different arichtectures with relatively simple implementations. one thing that helped me was getting books and articles about different design principles architectural ideas etc. and then creating them myself. Also, what is 'good' here? i am assuming, knowing when to use what kind of architecture. some are easier to create, some perform better, some are easier to collaborate on in large teams, costs can be a factor too. Are you looking for a specific thing or wanting to generally know more about the topic.?
- akkad33 3y agoI have a specific thing in mind, but I think I lack sufficient knowledge of what's out there to make the best trade off for my specific use case. To be honest, I lack basic knowledge of different system components. To give an example I know redis is a key value store. But i wouldn't know the drawbacks of using it and what usecases its best use is for. I would like to broaden my knowledge in order to answer such questions as my job requires me to go from a data scientist to more of a solutions architect
- wanapreneur 3y agoTry practicing system design on https://codemia.io https://codemia.io. there's Instant interactive feedback and also evaluation of your answer by AI.
- jpc0 3y ago"Gall’s Law: all complex systems that work evolved from simpler systems that worked." Do the simplest thing that works, if that is hosting something on a VM with SQLite for persistent storage than that is what you implement. If what you had in memory was a map or a queue and you don't care about persistence then redis is likely going to serve you well when you need to scale to more than one instance, if you never need more than one instance then keep it in memory as a map or a queue. Don't add things "because that is what :bigtech: does" :bigtech: is not you and if it was, you would have the team to do it or would be building the team and not the software.
- FlyingAvatar 3y agoI echo the experimentation comment. Also, often choosing the 'right' technology is less important than designing an architecture that is both simple enough and capable enough. When doing this in my career, I am always considering can it be more simply (i.e. less complexity is easier to grok and is usually less prone to fail) and can it be done more clearly (i.e. such that the intended use of the architecture is obvious).
- bwh2 3y agoI highly recommend the book System Design Interview by Alex Xu.
- greenie_beans 3y agohere's a link: https://libgen.rs/search.php?req=System+Design+Interview&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def https://libgen.rs/search.php?req=System+Design+Interview&lg_...
- zlg_codes 3y agoI don't work in the field so I can't say for certain, but AWS and friends really strike me as the type of tech you need to deploy at scale in order for their complexity to be worth the initial up-front learning cost. Try to think of a project that either needs infra like that to get started, or another one you can deploy in a homelab or a few VPSes or something. Maybe VMs are a good idea, to give yourself a good place to test things without committing bare metal to anything. What software system architecture interests you? The scale you're interested in may matter, too. For me, system architecture means which distro (and which set of packages), configs, and other settings that create a cohesive server/client or groupware system. I think a lot of those challenges lay mostly in understanding how computers are being used within a given organization, and designing things in ways that make adapting easier and workflows smoother. What that looks like, I would imagine is different for every organization.
- bigtechdigest 3y agoHave a look at a newsletter called "Big Tech Digest". It provides you with the latest articles from hundreds of engineering blogs like Meta, Google, Uber, Airbnb, Doordash, etc. every two weeks. Very useful for building knowledge around system architecture. ps. I'm the author :)