Learn to write testable, flexible & maintainable code
- 🔥 Write testable, flexible, maintainable TypeScript w/ Node.js
- 🔥 Prevent unmaintainable code. Identify bad design and refactor towards a good one
- 🔥 Use OOP + Domain modeling to tackle apps of any complexity
- 🔥 Structure business logic away from dependencies, frameworks, tools
- 🔥 Integrate Domain models into the heart of your application
- 🔥 Use the SOLID principles to prevent tightly coupled and untestable code
- 🔥 Separate the concerns of your application into domain, application and infrastructure layers
Get lifetime access to the wiki/book
Over 600 pages. Seriously. You'll get instant access on 👩💻 Web + 📱 Mobile + 📝 PDF + 📖 EPUB
or
Frequently asked questions
Why did you write this?
The truth is, not a lot has changed about the fundamentals of software design over the past 20 years, but there's a huge lack of training on it.
I tend to agree with Eric Elliot, who writes excellent content about software composition.
He says, "99% of working developers lack solid training in software design and architecture fundamentals. 3/4 of developers are self-trained, and 1/4 of devs are poorly trained by dysfunctional CS curriculum. And almost zero companies make up for those deficiencies with in-house training and mentorship. In other words, if you simply accept the status quo and refuse to offer training in-house, your team will be the blind leading the blind."
The fact that over $85 billion was spent fixing bad code in 2018, and that massively influential engineering companies like Uber are only now discovering Domain-Driven Design and other essential architectural patterns after 2200+ microservices, is a sign we could do better.
“Those who know not of history are also doomed to repeat their mistakes” (Santayana’s curse).
Software development is a relatively young trade compared to other trades out there. The way we perform our jobs isn't normalized the same way building a house or fixing a car is. Software developers with livelihoods and reputations can't afford to make big mistakes.
Who is this for?
Anyone paid to write software to provide value for a business, and to do it consistently.
Developers who want to learn how to design large-scale applications.
Developers frustrated with writing buggy code and breaking things all the time.
Developers who care about shipping quality code and want to learn how to write code that can actually be tested.
Developers who want to see their codebase actually improve as more code gets added to it, rather than degrade over time.
Junior full-stack developers who are comfortable with JavaScript & Node.js that want to learn how to write clean, flexible, testable, and maintainable software.
Bootcamp graduates who are curious to learn more about backend development.
Team leads, engineering managers, and CTOs who want a single resource to ramp their Junior developers up.
Blog readers interested in Domain-Driven Design.
How can I get future updates?
The wiki is done! But if there are any updates, you'll get an email and can check out the Updates tab in the wiki.
Tell me about the wiki
Books aren’t great mediums. They go out of date and they’re hard to update.
I take all my notes and manage my knowledge in Notion. I wrote a program that takes my Notion and executes a script that converts it to both a book (PDF, EPUB) and the wiki!
Readers who have purchased the book have access to the wiki, which lets you bookmark pages, download new versions, and submit feedback.
Refund policy?
Sorry, we can't offer refunds on this one.
Do you offer Purchasing Power Parity or Student Discounts?
Get in contact with me and I’ll hook you up with a discount.
I already bought the book, how do I download new versions?
How do I access the wiki?
If you’ve bought the book, you can use your login link to read the wiki. If you’re not logged in, you can send yourself a login link by entering your email.
Your site’s not working!
The wiki won’t work properly if you have Third Party Cookies disabled. If you’re using Chrome, you can fix this in chrome://settings/cookies
. If you’re experiencing any other issue, let me knowand I’ll fix it.
I have another question!
Hit me up. I’m happy to hear from you.