Discover more from The Curious Engineer
What should a Junior .Net Developer know?
A quick look at some of the expected knowledge for .net developers at each career level
Hey friends 👋,
Back in March I put together the Backend Developer Roadmap which has been my most popular YouTube video to date and has been watched over 66,000 times.
The point of this roadmap was to cover everything I know as a backend .net developer so that others have a path that they can follow. I have been a software developer for 13 years now, so I have had a while to accumulate all of this knowledge.
Unfortunately, some assumed this was everything you needed to know to even get started as a backend developer.
As I have mentioned in my replies, if you know everything on the roadmap you would likely be considered a senior engineer or higher.
So in this post I thought I would break down the roadmap into what I would expect engineers to know at different levels. This is of course my personal opinion, so you may not agree with my choices!
The range for what junior developers know is quite broad. Some would have gone to university or college to learn computer science and will therefore have a bit more knowledge than someone who is self-taught.
The majority of computer science courses however do not cover the skills that are actually needed to be a professional software developer.
I would expect most junior .net developers to know the following:
Have a decent understanding of C# and OOO. They don't need to be an expert but should at least know how to do the things that are common across all programming languages.
Can understand and use Git and version control in general.
Understands the main data structures and a few algorithms.
If they are going to be working in web development they should have a basic understanding of how things like domain names, DNS and web hosting work and fit together.
Not required, but I think most developers should know HTML and CSS.
Have a basic understanding of how computers work such as what gets stored to hard drives vs what is stored in memory.
A basic understanding of threads and concurrency and what a race condition is.
Understand REST and be able to code a basic API.
A basic understanding of databases, what they are used for and how to write a SQL query.
Can use Google, StackOverflow and ChatGPT to get answers to their own questions.
Knowing the above should be enough to get you a job as a junior developer and get you through your first year working on tickets as part of a team.
Subscribe for free to receive new posts and support my work.
To progress from junior to mid-level you need to be able to do more than just complete small coding tasks. By mid-level you should be able to code a complete application from scratch to a production standard.
Therefore, adding on from the above I would expect a mid-level developer to be able to know and do the following:
Understand the main coding principles such as SOLID, DRY, KISS and YAGNI.
Have a full understanding of how to build an API including:
Authentication & Authorisation
Validation frameworks such as FluentValidation
Open API specs
Have a decent understanding of RDBMS databases:
Stored Procedures and Functions
Transactions / ACID
The main differences between Postgres, SQL Server and MySQL
How to use an ORM and the main advantages and disadvantages.
Have a basic understanding of NoSQL databases and how to use them.
Understand how to log properly and some of the frameworks you can use.
An understanding of the Gang of Four design patterns with decent knowledge of a few of them.
Be able to perform code reviews and provide constructive feedback.
Know how to do unit testing and integration testing and understand the other types of testing.
A good understanding of agile meetings sufficient to be able to run them yourself.
Know how to use Docker and how to containerise your application.
Know your way around a Linux terminal (useful for debugging docker containers).
The above should be enough that if you were given a task to produce a whole component as part of a larger system you would be able to do it without too much trouble. I wouldn't expect a mid-level developer to design a whole system themselves or figure out all the infrastructure, but they should be able to take ownership of a single component.
Senior Developers and above
A senior developer should be able to be given a problem and be able to design and develop a scalable solution for it.
We are no longer considering just a single component but a whole system and how all the pieces fit together and the infrastructure supporting them.
Senior developers and above should therefore be able to do the following:
Be able to design a whole system including what components to build, how they interact and how data is stored and flows throughout the application.
Understand the pros and cons of microservices over monoliths and when to use one over the other.
Know how distributed caching works and when to use it.
Know when to use NoSQL vs SQL databases and be able to design the schema for both.
Understand what indexes might be needed on a SQL database and how to write performant queries.
Be able to set up a complete CI/CD pipeline for your applications.
Have a good understanding of one or more cloud platforms and be able to select and use the right option for the job.
Understand the different types of performance testing and how to do them (see this week's YouTube video)
Understand advanced API options and when to use them such as gRPC, GraphQL and WebSockets.
Know how to monitor your applications and set up dashboards and alerts.
Know how to use infrastructure as code (IAC) to provision all of your infrastructure.
This is what I think developers at various levels should know but of course each company will have their own competency matrices that you need to look at if you are looking to get promoted. There are often a lot of soft skills involved as well that you need to master in order to move up the ranks.
The levels are rarely as clear-cut at this. As a junior you may know things that a senior should know and equally a senior may have missed something from their earlier career paths.
This is essentially the order I have learnt these topics over the last 13 years. It may seem daunting at first, but each bit of knowledge just builds on previous knowledge, and it doesn't seem that daunting once you get there.
I am interested to know what you think of the above levels and whether you agree, let me know in the comments.
This newsletter is free for everyone, but if you would like to support my work and my YouTube channel you can do so by becoming a patron on Patreon.
❤️ My supporters also get the following benefits:
📝 Exclusive content from me (including my creator income reports)
🔓 Access to the source code from my YouTube videos
💬 A private community (currently just me if you want to ask me anything)
💰 Exclusive generous discounts once my courses are released
❤️ Picks of the Week
📝 Article - Where are all the laid-off software developers going? Part 2. With all the lay-offs this year it is interesting see where everyone is going. It seems many developers are getting more luck with companies outside big tech or starting their own companies.
📚 Book - Introducing “Database Performance at Scale”: A Free, Open Source Book. How doesn't like free stuff? This looks like a great book on database performance.
📝 Article - Where does my computer get the time from? An interesting look at NTP and where your computer gets the time from.
📝 Article - No More Vendor Lock-In? The Rise of Sky Computing. I hadn't heard of Sky Computing until this article, although it makes perfect sense. I have done a lot of work with AWS in the past, and it usually involves using their SDK in your code to interact with their services. Sky computing decouples your applications from particular cloud providers making it easier to use multiple clouds or migrating between them.
💬 Discussion - Google Docs infects HTML with tracking links. Google has come a long way from it's "Don't be evil" motto. Its new motto is "Do the right thing", which I can only assume by their actions is "Do the right thing to make the most money and exploit all our users".
📝 Article - BBC Gives Up On Threads (By Instagram), Sticks With Mastodon. I have been really enjoying Mastodon (just search for @email@example.com on your instance to find me), however, it still has quite a niche user base, and it will be a while before everyone moves over. I am sure what will help with that is major brands and influencers making the move too. Threads have said they will be federated at some point, but time will tell.
🛠️ Tool - Introducing pgroll: zero-downtime, reversible, schema migrations for Postgres. For those using Postgres I am sure this is going to come in handy.
📝 Article - Hey, Computer, Make Me a Font. Generative AI is here to stay, and it has more uses than just turning Jack Black into all the Disney princesses:
I love seeing innovative uses for it and being to make new fonts is quite a cool one. I am sure we will see more things like this especially as the requirements come down, Stable Diffusion XL on a RPI Zero anyone?
🛠️ Tool - Learn and Test DMARC. I have had my email on my own domain for a while now. Some of the things you need to set up are DMARC, SPF and DKIM. This is a fascinating way of testing them.
👨💻 Latest from me
I said to myself when I got to 10,000 subscribers on YouTube I would start making some courses. Now that I have reached that milestone I have run out of excuses!
I am going to be spending the next few months focusing on getting that first course out. This will mean fewer YouTube videos however I will still be keeping up with this weekly newsletter.
🎬 YouTube - How to do Performance Testing with k6. I have been wanting to do a video on performance testing for a while but wasn't sure the best way to do it justice. While tidying up my office I found a Raspberry Pi 2, just what I needed to push it to the limits.
💬 Quote of the Week
"To attain knowledge, add things every day. To attain wisdom, remove things every day." - Lao Tzu
From Building A Second Brain (affiliate link) by Tiago Forte.