Master Your Career In Cloud Technologies And Software Engineering With The 80-20 Rule Of Learning

As software engineers, we are constantly faced with the challenge of learning new technologies and keeping up with the ever-evolving landscape of the industry. With the rise of cloud technologies and the increasing demand for full stack web development, it’s crucial to find effective learning strategies that maximise our time and yield significant results. In this blog post, I would like to explore how the 80-20 rule can revolutionise your career in cloud technologies and full stack software engineering.

Understanding the 80-20 Rule

The 80-20 rule, also known as the Pareto Principle, states that roughly 80% of the effects come from 20% of the causes. Applied to learning, this principle suggests that 80% of your results can be achieved with 20% of the total effort. By identifying and focusing on the most impactful aspects of cloud and modern software technologies, you can optimise your learning journey and propel your career forward.

Applying the 80-20 Rule to Cloud Architecture

  1. Identify the Essential Concepts: When diving into cloud technologies, start by understanding the fundamental concepts that underpin the technology stack you are working with. For example, in Amazon Web Services (AWS), concepts like EC2, S3, and IAM are crucial to grasp. Dedicate your initial efforts to master these essentials as they form the foundation for more advanced concepts.
  2. Explore High-Impact Services: Cloud platforms offer a vast array of services and tools. Instead of trying to learn everything, identify the high-impact services that align with your goals and the needs of your projects. For instance, if you’re developing a web application, focusing on services like Lambda, API Gateway, and DynamoDB can have a significant impact on your full stack development efforts.
  3. Hands-on Experience: Theory alone won’t make you an expert in cloud technologies. Invest time in hands-on practice with real-world projects, experimenting with the services and tools you’ve identified as high-impact. This practical experience will solidify your understanding and enable you to apply your knowledge effectively.

So many software engineers feel the need to know everything about every stack, but that spreads us too thin. We don’t need to remember the exact thresholds of services or the limits of our quotas off by heart, just knowing they exist is sufficient. When it comes to the exams, things like my AWS Solutions Architect Associate Cheat Sheet cover the vast majority of the content. If you understand 20% of the overall, you’re in a good place.

Even legacy server architecture, translates perfectly to the cloud. If you know how to vertically or horizontally scale servers sitting behind a load balancer when using dedicated, physical devices, guess what. It’s the same concept in the cloud. NFS drives in physical hosting => EFS and similar solutions on cloud services. Firewalls, networking, redundancies. Guess what.. they all translate easily too!

Applying the 80-20 Rule to Full Stack Software Engineering:

  1. Master a Couple Core Technologies: Full stack software engineering requires proficiency in both front-end and back-end technologies. Identify the core technologies that are widely used and have a significant impact on web development, such as HTML, CSS, JavaScript, and a popular back-end framework like Node.js, C#, Golang or PHP. Pick one and get good at it. If you can write good APIs in PHP, chances are with a bit of side-skilling and syntax learning you can write good API endpoints in C#.
  2. Master Design Patterns: If you know software design patterns, they apply across many languages and frameworks. The Repository Pattern by Martin Fowler back in ~2002, still applies today in 2023. Factories, Singletons, Commands, Decorators. All useful, in their own situations. Far more valuable than learning every single language out there.
  3. Optimise Your Learning Path: With an abundance of frameworks, libraries, and tools available, it’s easy to get overwhelmed. Prioritise learning the most widely used and versatile ones, such as React, Angular, or Vue.js for front-end development and Express.js or Django for back-end development. By focusing on these high-impact tools, you can build a strong skill set that can be applied to a wide range of projects. Modern software teams bounce between techs. We primirily use React at EposNow but ReactNative, Flutter and other techs are on our roadmaps. Having a good knowledge of one, often allows you to side-skill quickly into others when the time comes.
  4. Continuous Learning: The technology landscape is constantly evolving, and software engineers need to stay up to date. However, trying to keep pace with every new trend or tool is impractical. Instead, allocate a portion of your time to explore new technologies that have the potential to disrupt the industry. This way, you can identify the 20% of innovations that can bring about the most significant advancements in your career.

At Epos Now, when interviewing we look for software engineers. Not Golang specialists, not PHP, not JavaScript. Just cloud / web software engineers. Knowing the language isn’t the difficult part, but knowing how to produce high quality code is. What makes clean code, common design patterns, architecture, logic, flows. These, for the most part, translate well across languages and stacks.

What I do

As Director of Engineering, I work with multiple teams working in different technologies, legacy, new, hybrid. They work on mobile apps, web apps, legacy monolithic beasts, new world micro services. PHP, C#, Golang, JavaScript. They use CICD tools, infrastructure as code, deploy to k8s, various AWS stacks, multiple database technologies.

There is no chance in the world, I can know all of these to a strong level. It’s not feasible.

I do my best to focus on modern software design patterns. Micro-service architecture patterns. Knowing the core differences between NoSQL and SQL databases. We use Postgres and MSSQL. I’ve never “truly” used either but I don’t need to to contribute as I’ve used similar techs before so I understand the concepts and what questions to ask. When I don’t know, I have phenomenal people around me who do.

When I’m stuck, which is a lot of the time, I’m not afraid to ask. The other directors, the CTO, junior engineers. All know stuff I don’t and I love that.

I am surrounded by people who are far stronger than me in individual areas and I love it. I sponge from these people as much as I can, learn whenever possible. Surround yourselves with awesome people and it’s so much fun. I truly enjoy working where I do for this reason.

The key thing here, is learn what you need to. Focus on a couple core technologies that you need right now. Learn the patterns, learn how to write clean code, produce nice server architecture. Then when a new tech arises, it’s easy enough to side-skill. Don’t waste your time learning every single function off by heart or every single quota limit in AWS. Focus on the core.