Data Modeling
Understanding how to model data effectively is crucial. You'll be tasked with creating data models and architectures that solve unique problems, integrate with existing systems, and can be easily extended while being performant. Learn about entities, attributes, and relationships in data modelling.
Events, Message Queues, and Workers
Asynchronous systems and message queues are essential in modern distributed systems. They help with tasks like rate limiting, inter-service communication, and batch processing. Mastering these concepts is vital for handling real-time and asynchronous workloads.
Autoscaling Infrastructure
Autoscaling is more than just a buzzword. It's essential for handling spiky loads and scaling without human intervention. Understand how to set up autoscaling for monoliths, microservices, and databases to handle increased traffic efficiently.
Cloud Technologies
Familiarize yourself with cloud platforms like AWS, Azure, and Google Cloud. Certifications are useful, but practical experience in using cloud tools to solve scaling problems is equally important.
Caching
Caching is a powerful tool for handling sporadic traffic and improving response times. However, it's important to understand when and where to apply caching in your systems. Explore different types of caching, from site cache to distributed data caching, and learn from engineering blogs and systems design books.
Concurrency and Idempotency
Concurrency and idempotency are challenging issues in distributed systems. You need to ensure that operations can be executed multiple times without changing the result. Implementing idempotency keys in your system can prevent issues like duplicate orders and enhance the user experience.
Conclusion
These six key areas are crucial for advancing to senior software engineering positions. Develop expertise and real-world experience in these domains to level up your career.
My vision
I've a small summary of problems I encountered when programming:
- Naming stuff is hard, be sure to change a name if you change your mind
- Don't make assumptions, they will bite you
- Did I sake don't make assumptions, I'm serious about this. Ask questions, then ask some more
- Don't start writing an application with caching from the start. Caching is powerful, but so often used too soon and not implemented correctly. Use this power wisely!
- Build it, refactor it, test it and ship it. Make the cycle as short as possible without breaking the whole chain. The sooner you get feedback from anyone the better.
- Don't ignore problems. The longer you wait, the more money it costs to correct things.
- When reporting a problem, try to think of one or more solutions to fix it.