How to stay relevant in 2023: Why developers need to learn ML & System Design
Let's explore the next great paradigm shift in software engineering — and what it will take for devs and engineering leaders to stay ahead of the curve.
How prepared do you feel for the future?
Let me elaborate. Every decade or so, a major paradigm shift shakes up the tech industry. This shift typically revolutionizes the way software is built — which can have massive implications for the state of software development.
Starting in the early 2000s, one of those changes was the rise of cloud computing. Amazon released AWS in 2006, giving companies an alternative to on-premises storage and its limitations. Google and Microsoft later started their own cloud service providers in Google Cloud and Azure, respectively.
As the above timeline shows, cloud computing is among the several shifts in the past 40 years that have shaken up software development. Other notable shifts include the emergence of personal computers as mass-market consumer devices, the expansion of broadband internet, and the mobile device revolution, which made everyday internet use far more accessible to many people around the world.
Changes like these can snowball quickly. For example, as a software engineer, I saw people suffer because they lacked adequate skills for working with cloud computing. Developers who didn't adopt the cloud early became less relevant. They felt they couldn't provide meaningful feedback, and ultimately contributed less to their team’s success.
This cautionary tale underscores the importance of keeping your tool belt updated with the right skills as the industry evolves. Whether you're starting your software development career or managing a big team of engineers, it's essential to watch trends and learn proactively.
2 top skill sets for developers in 2023
On that note, I want to zero in on two trends that I have been keeping a close eye on: Machine Learning and System Design.
These are different but increasingly overlapping disciplines, and they share one big thing in common: as a developer or engineering leader in 2023, you can't afford to ignore them.
Machine Learning (ML) is one of the fastest growing fields in technology. Although the field has been advancing for decades, the past 20 years have seen Machine Learning rapidly expand beyond an academic discipline. The early 2000s saw the rise of big data, when businesses like YouTube and Facebook started grappling with, storing, and analyzing the vast amounts of data they generated.
The sheer volume of data being analyzed made Machine Learning a non-negotiable business discipline, and almost every industry has adopted its principles and systems. In fact, the Machine Learning market is projected to grow to over $96 billion by 2025 (U.S. dollars), according to Million Insights, a market research company.
The rise of Machine Learning in business seems to be creating yet another irreversible inflection point. Developers who remain deeply relevant by learning Machine Learning skills will separate themselves from those who find themselves scrambling to catch up.
Meanwhile, System Design is already essential. It has become a non-negotiable skill set among proficient developers on the job and in interviews to advance in their careers. Its rise has been fueled by the spread of distributed systems supporting users and functionalities that are dependent upon always-connected devices.
Today, I want to dive deeper into why you should prioritize learning Machine Learning and System Design skills in 2023. I will also share tips for learning these skills and staying on the cutting edge.
Machine Learning: The future is now
Machine Learning is all around us. We can already witness its impact in common devices and products, from voice assistants and intelligent transportation systems to search engines. As the amount of big data increases, ML will only become more pervasive in the software we use every day. This trend implies that developers who remain unacquainted with ML will face setbacks in their careers and professional growth.
The integration of Machine Learning with various products has been happening for a while. But it has become even more apparent with the debut of advanced artificial intelligence (AI) tools such as ChatGPT. (You can read my newsletter on what ChatGPT means for developers here.)
These advancements underscore how important it is for developers to understand ML if they want to remain competitive in the industry. While emerging ML may not necessarily replace the role of developers, it is becoming an essential skill for them to possess.
How learning Machine Learning will help you in your career
We can drill deeper into the emergence of the cloud to see how the advent of new technology impacts developers. Initially, only a small group of engineers and scientists were involved in building the cloud. As it became more prevalent, more developers needed to have expertise in cloud-based technologies or risk being left behind.
Similarly, as the use of ML expands among different industries, we can expect that more products and services will adopt it and users will begin to anticipate its presence. As a result, developers will need to possess knowledge of and proficiency in ML to meet these demands and stay current in the field.
Moreover, ML is already changing the way we perform our jobs. In the near future, the number of ML models available through APIs will increase, and it's crucial that developers who were initially introduced to ML in a theoretical or research setting, including myself, adapt to using ML practically now.
History offers a lesson. Developers who began their careers in the 1990s faced challenges finding work as they transitioned from desktop products to FAANG companies like Facebook and Google. I personally know some engineers who felt their experience and skills were no longer relevant and they couldn’t contribute meaningfully in meetings as their teams adopted cloud technology. I suspect the same may happen with ML.
How I recommend learning Machine Learning
Even though Machine Learning is on the cutting edge of new technologies, don't let it intimidate you. Here are two tips for getting started with ML.
You can be successful working with ML by understanding the basics, which includes having strong (but not necessarily exceptional) math skills.
A common misconception is that you need to be a math genius to learn Machine Learning. The truth is, most people in the field are actually using pre-existing models rather than creating them. (Creating ML models is the job of an ML scientist). The key to success in developing with ML is understanding how these models work and applying them practically. So, don't let math phobia prevent you from diving deep into this exciting field!
As the field continues to evolve, I expect that engineers who work with ML models will face increasingly rigorous interviews. It's worth noting that cloud-focused interviews are a fairly new phenomenon, only becoming popular in the past decade. However, I also believe that it's just a matter of time before similar design-based interviews become standard for ML too. Those interested in passing advanced interviews must stay informed and be prepared for this imminent change in the hiring process.
Some anxiety around change is understandable, but let's not lose sight of how exciting Machine Learning and AI are. Regarding future AI trends, we can see that generative AI is already gaining prominence in industries like content marketing and image creation, and with ample funding, the future looks promising. The impressive algorithms behind GPT-3, DALL-E, and Jasper are a taste of what's in store for these technologies.
As you learn to work with these tools and ML models, keep an eye out for more exciting developments.
System Design: The foundation of modern systems
Let's pivot from algorithms to architecture. I can't emphasize it enough: System Design has become crucial because of distributed systems.
This is a relatively recent change. Before 2010, engineering leaders at Amazon, Google, and Microsoft were discussing distributed systems, but few other companies were talking about them. Most applications ran on desktops and didn't talk to the cloud.
But with the rise of cloud computing, applications are increasingly dependent on distributed systems, a trend we expect to continue. To succeed as a developer today, you need to know about distributed systems and System Design.
Through System Design, we can use design patterns and reusable components (or building blocks) to help us build massive scalable systems. We rely on these systems daily, and they help solve real, important problems. Our use of these systems will only expand, along with the need for developers to design them.
Two examples from recent news help paint the picture, as I've discussed.
Your skillful design work can help a system thrive amid demanding circumstances, as witnessed by Stripe avoiding downtime from traffic spikes on Black Friday and Cyber Monday last year. (If you missed that newsletter, I added it to my Substack.)
On the other end of the spectrum, a major failure can raise questions about system architecture and design. That's what happened when Ticketmaster crashed under the weight of Taylor Swift fans' demand for tickets in November. (That newsletter is also on my Substack.)
Although they represent starkly different outcomes, these events highlight the importance of understanding how to design highly scalable systems.
How learning System Design will help you in your career
If you're a developer, you can anticipate one of two things: your job will eventually require you to build a distributed system, or you'll work on applications that interact with and rely on distributed systems.
For one, this means you'll need to pass a System Design Interview if you want to advance into a senior developer role. But you shouldn't wait for the interview to learn this discipline.
No matter what type of developer you are, learning System Design will improve the quality of your daily work. Let's look at two examples.
Mobile developers: Your application will heavily depend on distributed systems out of the gate. Let's say you're designing a rideshare service like Uber. To build this today, the services you'll likely need to leverage include:
Twilio to send text messages
Stripe to process payments
Google Maps to get directions
Yelp to locate users in proximity
Since you’re also building your own distributed system, you'll need to use components of System Design, a concept that I'll talk about in a bit.
Front-end developers: Your development work never occurs in isolation. When you’re rendering a modern web application, your page will call several different distributed systems through APIs.
Google’s home page is a good example. In terms of web design, it’s simply a search box with a logo. But in terms of search functionality, a Google user's browser will interact with hundreds of thousands of servers through distributed systems. In a few seconds between the user typing search terms and hitting Enter
, the following happens:
As the user types, each character is fed into a typeahead system through an API. The typeahead changes its output with each additional character, homing in on the user’s intention within milliseconds.
The user hits
Enter
, triggering several systems. Search queries go to an index to find relevant webpages and to YouTube for relevant videos. If the search term matches the name of a movie, restaurant, or book, more specialized systems deliver the user an entirely different experience. Additionally, ad services use the search term and contribute a few links above the search results.
In general, delivering a modern front-end experience requires understanding the parts of the system your site will interact with.
Other roles: Even if you're not a developer specifically, you should still learn the basics of System Design. Anyone working with modern technical products should be familiar with System Design concepts to speak fluently with stakeholders and technical teams. This includes Support Engineers, Technical Product Managers, and of course, Engineering Managers.
How I recommend learning System Design
As I mentioned, it’s never a good idea to wait for a System Design Interview to learn System Design. Preparing to beat the interview won’t give you the deep knowledge to actually apply skills in the real world.
Here are three tips to begin learning.
First, start learning System Design on your own as early in your career as you can.
If you’re a beginner developer or you’re currently learning programming, knowing System Design will give you an edge.
If you’re a mid-level engineer, don’t delay learning System Design. If you don’t know System Design and you’re interviewing for senior roles, you could be offered lower positions than you’d applied for because of your knowledge gap.
Second, study the “building blocks” approach to System Design. This breaks the concept of a modern system down into bite-sized components, or building blocks, to help you dissect and reconstruct solutions for problems of any size.
Each of the 16 common building blocks in the following illustration has its own characteristics. You'll want to learn what each building block does, and how it interacts with others.
Third, once you understand components, learn System Design patterns and best practices. This will save you from a lot of headaches, and you won't have to reinvent the wheel to solve problems.
Some issues only manifest at scale. You may discover design bottlenecks when you scale up that you didn't see when you had much less traffic. These are costly to fix, so borrowing from tried-and-true patterns and practices will help you anticipate and avoid expensive issues. (As an additional benefit, picking up System Design jargon will help you and your colleagues speak the same language, improving team efficiency and alignment.)
These three tips will get you started learning System Design, but it's a huge discipline. As you advance, you'll want to keep digging into design patterns and scalable web applications, and prepare for the System Design Interview.
Start making yourself essential today
Educative has some fantastic options for learning both System Design and Machine Learning. The Fundamentals of Machine Learning for Software Engineers course from our partners at the Pragmatic Programmers will provide you with a working knowledge of modern Machine Learning techniques. You'll also be introduced to three core components of the discipline: supervised learning, neural networks, and deep learning.
I also highly recommend the course Grokking Modern System Design Interview for Engineers & Managers. It's perfect for helping you learn how to design large-scale systems like YouTube, Instagram, and Twitter, along with enabling you to gain deep insight into the key building blocks of modern System Design.
Importantly, both courses will teach you how to apply your new knowledge practically through interactive coding environments.
With a new year upon us, it's a great time to assess your skills and start learning new ones. Today, the most successful engineers and managers are already mastering ML and System Design, adding practical skills and investing in their future relevance.
But don't worry, you can stay ahead of the latest trends in ML and System Design, too. We created these courses at (and hundreds more skill paths, projects, and assessments at Educative) to help you get hands-on with the industry’s most critical skills. I am curious to hear how you enjoy them.
Happy learning!