Our goal at Mirdin is to improve the world’s software by 100x, the first 10x by education, and the next 10x with software tools.
Our goal at Mirdin is to improve the world’s software by 100x, the first 10x by education, and the next 10x with software tools.
We have trained over 250 professional software engineers using our software design courses.
Our courses will teach you to think about software on a much higher level
Write clean code with minimal risk of bugs
Be the person on your team who can explain why a design decision will save your team hundreds of hours, months or years down the road.
Explain in clear terms the reasoning behind why some piece of code ‘feels better’ than another
After working 1-on-1 with Jimmy years ago, I had both of my engineers take Mirdin’s course recently. Since taking the course, I have sensed during design reviews that their understanding of software design has greatly elevated. As a result of their improved understanding and communication, we now routinely achieve better clarity on a design in 15 minutes than we previously could in an hour.
I was fired from a FAANG and told I would never reach the next level, but somehow got hired to that level at a different FAANG anyway. But it’s thanks to Jimmy I was able to perform at that level. Within months, I had senior employees assuming I must have been there for years, and was exceeding manager expectations. The only explanation for my improvement is working with Jimmy.
As a tech lead at Google, I have always been trying to improve my software design skills. I decided to sign up for Jimmy’s class after looking at the overview of its content.
Jimmy is a fantastic instructor. He spends a lot of time reviewing my homeworks & answering questions. The reading materials & exercises are top notch. Before Jimmy’s class, I had vague ideas of how to write code “the right way.” After this class, I have a lot more clarity in terms of writing good code and designing better software. I find myself better at articulating my design rationale, and having easier time aligning people’s opinions on difficult decisions. My colleagues also said they noticed my code reviews are a lot more objective and convincing.
Jimmy is an intelligent, patient, and deeply knowledgeable coach. His sessions have markedly improved my code’s architecture and modularity. In addition to becoming a better SWE, I’m now a better manager and coach to the other engineers on my team. I went into the program with over five years of software engineering experience and an undergraduate degree in Computer Science; I came out wishing that I had started working with Jimmy sooner. Simply put, if you want to become a more effective engineer, I highly recommend working with Jimmy.
I’ve learned more from the first 2 weeks of Mirdin’s course than from 2 years of grad school”
Yesterday was my last day of a 13-month freelance project as a backend architect in a SaaS startup. It was so rewarding to be able to apply the course concepts to build their product from scratch. I’ve read a lot of books about SWE, but found myself only using the ones from the course most of the time. That’s how useful they are! Thanks to the things I learned in this course, the code has always been able to evolve without rewrites when new requirements were introduced.
This class far exceeded my expectations. Since completing the course, some aspect of his lessons have affected how I write my programs and code reviews every single day.
Simply put, this is one of the best courses I have ever enrolled in, online or otherwise. The exercises and content for each of the 6 weeks are dense enough to fill a month of study. However, the core concept for each contains practical recommendations that were integratable into my code as early as the day after each lecture. I also really liked being guided through examples (and counter-examples) of the course’s recommendations in action in popular open-source codebases.
I pursued Computer Science/Electrical Engineering in my undergraduate studies, and have worked in 2 technology startups. Each of the weekly topics were either completely new to me, or presented in “stickier” form than I had ever previously encountered. If you have wondered about what it means to make classes of bug impossible, or wanted to learn how to “drill” at software engineering rather than just hoping to learn from writing more code, this is the course for you!
Aside from the high quality and actionability of the content, the other critical ingredient in this course is the personalized feedback from Jimmy. He is thorough, thoughtful, and skilled at guiding students towards not just the right answers to exercises, but also helping them to develop intuition and processes for solving similar problems in the future.
You can tell straight away that Jimmy has a deep passion for designing software and designing it well. The course can be challenging, but it pushes you to be a better software engineer by forcing you to think more carefully about every design decision you make. The carefully curated resources that James provides are alone worth taking the course, but for me it was the little spark it triggered inside. I have a deep passion for learning, and this course has given me the confidence and roadmap to go deeper and become that much better by working hard at it everyday.
This course should be renamed “Jimmy’s Finishing School For Software Wizardry.”
Jimmy’s course has changed my day-to-day thinking about software design. It’s easier for me to reason and talk about how a line of code will hinder or help future code changes. I can motivate changes more clearly to others on my team when reviewing designs and code. The course replaced some unhelpful intuitions I had from several years of software engineering leaving a simpler, better fortified base. And did I mention how well-curated the course readings were? Unlike much writing on software design drifting about, these were rewarding to read closely.
I loved this course! Thanks to working with Jimmy, I now have a much better framework for evaluating software design. My designs are cleaner, and I feel more confident that my design decisions will stand the test of time.I was also pleasantly surprised by the community Mirdin has created. All of my classmates were wonderful, and the Advanced Sofware Design Slack channel has become a great source of support, inspiration, and fun. I’m a solo developer, so I feel lucky to have found a group of like minded people I can discuss interesting problems with.
The Advanced Software Design course has transformed the way I work. After the first lectures, I quickly began to see where software I had written could be improved. By the end of the course I felt confident that I knew exactly how, and why, to improve it. Recently, I’ve been interviewing for new contracts, and the knowledge I now have has helped make it far easier to impress. In particular, interview code exercises are easier as I can more easily come up with, and discuss, a design first, a method which has really helped to express my level of knowledge without getting bogged down in code level problems.
I also feel that I now have a clear way to appraise and filter programming advice, something that’s invaluable in a fast moving industry. Thanks Jimmy!
Three great things happened because I took Jimmy’s course. First, I built a vocabulary for expressing my concerns about software design. This vocabulary, when applied to code smells, gives me related examples that can help generate specific failure modes.
Second, I learned how to tell what debates about software are worth engaging in. Some debates are just taste, and some have deep engineering implications. This has sped up my reading because I can filter out a lot of noise.
Third, I gained a sense of the larger world of software design. The course’s resources section has changed my views on design and software as a whole. I know that these articles will be a source of inspiration and knowledge for a long time to come.
Jimmy took me from being that coder that people tolerated because of “potential” and taught me so much that I had Google and Facebook fighting over me, then had all the hottest teams at Facebook fighting over me.
Oh, and my salary increased 67%.
Jimmy’s course was superb. It gave me a set of tools that I found immediately helpful in articulating the drawbacks of certain decisions in the code base and data models I work with. Before, I only had vague feelings that something was off but had trouble saying exactly what or why. The concepts from the course continue to be useful whenever I’m writing code or reviewing a PR. Somewhat surprisingly, it increased the satisfaction of reading and writing code. Instead of writing a bunch of classes to implement feature X, I think of as many implementations as I can then try to think about the trade-offs between them all.
In one of my first sessions, Jimmy said he’d make my programming so methodical it’d almost seem boring. I was wondering what he meant, and after many sessions, I now understand. And far from being boring, it’s made me so much more productive and confident in my programming abilities. I now review code for all sorts of issues (coupling, premature abstractions, poor data structures, etc.) in a very precise way, telling engineers exactly what would happen if they did or didn’t listen to what I have to say. And in most cases, it’d turn out exactly like what I said. Also, I have a much better understanding of the general structure of large programs that I’m able to navigate huge codebases much more efficiently than before. Jimmy is really a godsend, and regardless of how good you think you already are, he’ll make you even better.
Jimmy has a wizardly knowledge around software design. There were several instances in which I asked him questions that I didn’t expect would have a nicely packaged answer, and he somehow was able to arrive at one. He’s able to take the ambiguity of how to “design a software system” and be very explicit and clear about how things should or shouldn’t be done, and the reasons behind them. There really isn’t another place or person I know of that’s able to teach software design as uniquely and effectively as Jimmy. I frequently see many of the topics I’ve learned come up in practice and now know what to do in those situations.
As a self-taught programmer who works as a Product Manager and aspires to be a CTO, I wanted to grow my technical abilities so I could better contribute to my team. I decided to work with Jimmy because I wanted to accelerate my progress and become more capable at identifying good and bad software architecture patterns. Before we started working together, I was shy about participating in more technical work on my team and didn’t have a concrete growth trajectory planned out for myself. Since I started working with Jimmy, I’ve developed the confidence to participate in code reviews with my team and assist with various technical challenges. I have gained a better understanding of my strengths and weaknesses, and I am much more equipped to set realistic goals for my technical growth. My intuitive sense of how to write clean, effective code has been honed, and I can’t wait to continue learning from Jimmy.
As a tech lead at Google, I have always been trying to improve my software design skills. I decided to sign up for Jimmy’s class after looking at the overview of its content.
Jimmy is a fantastic instructor. He spends a lot of time reviewing my homeworks & answering questions. The reading materials & exercises are top notch. Before Jimmy’s class, I had vague ideas of how to write code “the right way.” After this class, I have a lot more clarity in terms of writing good code and designing better software. I find myself better at articulating my design rationale, and having easier time aligning people’s opinions on difficult decisions. My colleagues also said they noticed my code reviews are a lot more objective and convincing.
Jimmy is an intelligent, patient, and deeply knowledgeable coach. His sessions have markedly improved my code’s architecture and modularity. In addition to becoming a better SWE, I’m now a better manager and coach to the other engineers on my team. I went into the program with over five years of software engineering experience and an undergraduate degree in Computer Science; I came out wishing that I had started working with Jimmy sooner. Simply put, if you want to become a more effective engineer, I highly recommend working with Jimmy.
Our interactive course places you in a group with other similarly curious engineers. As you go through the course, you will share experiences and discuss the materials with each other and the teacher.
The Advanced Software Design Course: For busy professionals
Time commitment/week | 5-10h |
Number of students | 20 |
Length of course | 12 weeks |
Total time commitment | 60-120h* |
Price | $ 1849 |
Feedback on exercises | Written |
Instructors | Nils & Jimmy |
Number of Lectures | 6 |
Number of Discussions | 6 |
1-on-1 (30min) | 2 |
Access to Slack/Community | Yes |
The Self-Service course offers the same comprehensive content as The Advanced Software Design Course but with the added flexibility of pre-recorded sessions and self-correcting exercises. This format allows you to learn at your own pace without sacrificing the depth of knowledge provided in the course while replacing personalized feedback from teaching assistants with self-assessment opportunities.
Fill in the form below, and click the option that you are interested in applying to our Self-Service course.
Time commitment/unit | 1-20h |
Number of students | infinite |
Length of course | Up to you |
Total time commitment | 10-120h |
Price | $ 1199 |
Feedback on exercises | Self Correcting |
Instructor | James Koppel & Nils Eriksson |
Amount of Units | 6 |
1-on-1 (30min) | 1 |
Access to Slack/Community | Yes |
Fill in the form below and we will contact you when new cohorts get announced.
If you already feel very keen about the courses and want to apply or talk to us to know more.
Fill in the form below, and we will set up a video call at a time that suits you, where we
can tell you more.