Introducing: James Koppel's Advanced Software Design Weekend Intensive

Two days to transform how you write code

Do you want to level up as a software engineer?

Do you want to write clean code with minimal risk of bugs?

Do you want to 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?

Then this may be the program for you.

I’m Jimmy Koppel, and two years ago, I set out to create a better way for people who could already code well to become masters of their craft. One of my first clients went from a major career setback right before we started, to competing offers from Google and Facebook after 4 months working together, and Ivy-League grads looking up to her after another 4. Another was a brilliant startup founder with a CS degree and over 5 years experience; after witnessing how our sessions improved his code’s modularity and architecture, he came out saying “I wish I had started working with Jimmy sooner.”

And now I want to help you. I’ve taken the intuitions that top engineers use to build robust and maintainable systems, and turned them into principles that can be taught and drilled much faster than learning by experience. Now I’ve streamlined this material, tested it on live audiences, and turned it into a program to help bring you to your dream skill level.

This workshop is not a replacement for hard work, and it’s not a guarantee of success. It is a shortcut to understanding the deepest levels of software engineering.

Advanced Software Design Weekend Intensive

Saturday and Sunday, July 28th – 29th

San Francisco

Apply for Next Intensive

What You'll Learn

Unit 1: The Hidden Layer of Logic

  • Why design is conceptually different from implementation, and what this means for building robust code.
  • How it’s possible for code that never fails to still contain a bug.
  • Understanding how code that looks simple may actually be complex, and how to avoid writing code likely to break in the future.
  • Hoare triples, a simple method of specification that lets you see complexity as concretely as the code itself.
  • Bonus topic: The defect/infection/failure model of bugs and what Hoare triples have to do with debugging by printouts.

Unit 2: The Embedded Design Principle

  • Understanding that code can be mechanically derived from a design, and how this perspective de-mystifies system design.
  • Using the Embedded Design principle to better structure your code.
  • Understand the most general forms of couplings. Learn to to spot and eliminate hidden coupling, and prevent 10-minute tasks from becoming 100-hour tasks.

Unit 3: The Representable/Valid Principle

  • Understanding how to partition the state space of code and reduce the possibility of failure
  • How to design data structures and APIs that cannot be misused.
  • How to design code that contains zero error-checking, but is less likely to fail than even the most defensively-written code.

Unit 4: The Data Over Code Principle

  • Parnas’s 40 year-old “secret” of information hiding.
  • How to use information hiding to make your code more modular and easier to extend.
  • How organizing your program around data structures can make your code cleaner.
  • How an extreme application of this principle can help you understand systems 3x more quickly.

Unit 5: Future-Proofing Code

  • Learning to spot and sequester the assumptions in individual lines of code.
  • Using the Liskov substitution principle to make your code compatible with future versions of itself.
  • Using the theory of subtyping to anticipate and avoid “complexity ratchets” that could make your code treacherous to modify in the future, and impossible to clean up.

Unit 6: Algebraic Refactoring

  • Understanding sum and product types, and how common data structure patterns in most languages are just special cases of these two fundamental constructs.
  • How most common refactorings are special cases of a handful of rules.
  • How refactoring a program can be isomorphic to factoring polynomials in algebra.

Exact syllabus may be altered between now and the workshop.

Your Learning Doesn't End with the Weekend

Have you ever crammed for a test? You probably forgot everything afterwards. We’re going to help you absorb these new skills long-term and apply them to your day-to-day work.

The Advanced Software Design Workbook

Between sessions, you’ll be given exercises to drill in the concepts and samples from large projects to critique, so you can apply your learnings to real-world software.

Access to my curated library of readings

I’ve gone through thousands of articles online and hundreds of academic papers to find the few with insights about the general art of software design. And when I couldn’t find anything that explained a topic well, I wrote my own. I’m giving you access to all of these.

Three 60-minute follow-up sessions with Coach James Koppel

That’s right, three 60-minute 1-on-1 sessions with ICF-certified coach James Koppel, to be used any time after the weekend ends. I’ll use my hundreds of hours of experience working 1-on-1 with professional engineers like you to help you be the best engineer you can be.

Is this program for me?

Are you a junior or mid-level software engineer who wants to build systems that take little effort to maintain, and where adding new features is a pleasure? Then this workshop may be the right thing to jump you to the next level?

This is not a beginner’s workshop. I designed it for engineers with at least one year of professional experience, and I’ll talk with you 1-on-1 before the program to make sure that it’s right for you.

If you already have a proven track record of designing systems so that it’s hard to make a mistake in the implementation, or if you routinely show teammates why their code will fail in a year, then you may find this workshop a nice way to put a more principled perspective on intuition you already have. You may also find the exercises too easy. But, in that case, you might be a great fit for my 1-on-1 coaching, where I’ll teach even more advanced material at the pace you desire.


We teach skills which are more fundamental than any particular language or framework. Still, all examples will be in C, Java, or Python, and you should be somewhat comfortable with the syntax of all three.

This is a workshop for professional software engineers. For exercises, you will need to be able to understand code samples from open-source projects we give you to critique, and you will need to be able to reflect on code that you’ve worked with in the past.

About the Instructors

James Koppel (Head Instructor)

Jimmy is a coach with two years experience helping engineers improve their software design skills. He currently works at MIT, doing research on program transformation and synthesis, and was previously the third employee of Apptimize and the founder of Tarski Technologies. He completed his undergraduate education at Carnegie Mellon University, was named a “20 Under 20” Thiel Fellow in 2012, and attained his ICF coaching certification in 2017.

Chase Lambert (Assistant Instructor, Saturday)

Chase started his programming days through businesses serving the Runescape and Myspace audiences. He’s worked for web companies like Indeed, Quizlet, and Stripe, as well as hardware companies like Sphero, Nest, Planet, Boosted Boards, and now Skip. He loves hacking, teaching, learning, and Frisbee. He’s had dozens of coaching sessions with Jimmy.

Elliott Jin (Assistant Instructor, Sunday)

Elliott is an engineer on the Search Infrastructure team at Dropbox, where he works on a distributed text retrieval system.  Previously he was at Palantir, where he worked on a distributed transactional database, and Apptimize, where he met Jimmy.  Elliott has also served as a tutor for Stanford’s Center for Teaching and Learning, a section leader in Stanford’s intro CS course, and a volunteer mentor at the Center for Applied Rationality’s flagship workshop.


The Advanced Software Design Weekend Intensive will meet July 28th and 29th, 10 AM to 7 PM, with an hour break for lunch each day. There will be a group dinner after the end of the program Sunday.

The workshop will be held in San Francisco at the 999 Sutter St., near the Civic Center and Powell St. BART stations.

This workshop is highly interactive, with a 3:1 student to instructor ratio. You will be asked to design APIs, critique example code, and discuss systems you have built – all with real-time feedback from our instructors.

Every attendee will also be offered three 60-minute follow-up sessions with Coach James Koppel, to be used freely throughout the following year.

On the Fence?

This workshop is a big investment in yourself, and, like any big investment there’s some risk it won’t work out. But I’m committed to making this workshop one of the best things you can do for your career.

I’ve put my heart and soul into making this workshop into the most intense learning experience you can imagine. It’s been about a year of planning and practice, and close to 1000 hours of prep. And so I believe in this workshop so strongly that I’m offering a 60-day money-back guarantee if for any reason you are dissatisfied with it. So sign up, because I’m taking all the risk.

Ready to Join?

The upcoming April workshop in San Francisco is sold out, but you can still register early for the next time we run it.


    Privacy Policy

    Act Now

    Since I started helping engineers two years ago, I’ve been amazed at the results I’ve helped people achieve, and at how few resources there are to help them at the higher levels. Even still, to keep our student to instructor ratio small, there are only 6 spots in this workshop, and some filled up even before I even announced it publicly.

    What others say

    Over the past 2 years, I’ve made a big difference in many people’s lives through my 1-on-1 coaching. My goal for this program is to help 100x more people in the same way.

    Amir, Software Engineer, New York City

    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.

    Chris, Menlo Park

    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.

    Chase, Palo Alto

    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.

    Sarah, Senior Software Engineer

    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%.

    Stephen Balaban, CEO, Lambda Labs

    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.

    Eve, New York City

    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.


    Send an E-mail to and I'll answer within 24 hours.