An introduction for curious, driven engineers.
The most accessible design book you'll ever read.
"I love the practice > theory aspect. It gets straight to the point without any fluff.
The code “tells a story”, and the git diff style makes the story progression easy to follow.
I especially like the recap section at the end; it gives the book tremendous reference value.
I'd recommend this book to any junior or mid-level engineer!"
One of the highest compliments I can offer this book is its unwavering respect for the reader's time. Every paragraph is delivering value and indispensable context on design principles.
I breezed through its pages in just a weekend. Now, whenever I'm stumped by problematic code, I remember to envision my ideal "dream code." This provides clarity and a tangible goal, which I can make incremental progress towards.
This invaluable insight is but one of the many lessons in this book that made my day-to-day more enjoyable as a software engineer.
"I've learned more with John in last 3 months than I did on my own in 3 years."
"I applied to a top graduate programme and I got the job! I owe John a year of my life and probably £20k!"
"I went from being a graphic designer to a frontend developer within 2 years, and I attribute this to having such a fantastic mentor."
"John was my senior and mentor throughout a mobile app project, where he introduced me to various concepts and techniques with infinite patience and enthusiasm."
Learning Software Design is Hard
- Depressed Junior Engineer
Struggling to learn design? Not your fault.
A practical introduction to software design that you can read in an afternoon.
Single sentence explanations your Mum could (nearly) understand. I ditch the jargon and complicated fancy words.
Every word earns it's place. No stories about obscure historical figures, no filler fluff, no longwinded rants.
A technical book with just enough personality to keep you reading, but not so much that it obscures the point.
One realistic example throughout the book to teach design principles. No weird UML diagrams. No useless abstract analogies.
Explanations of coupling, encapsulation, polymorphism and abstraction in the context of a real web application.
Written in a style designed for modern attention spans and modern languages. Written for C# / .NET. Also available for Ruby.
A broad range of design ideas explained in plain English.
- Confused Mid Level Engineer
Packed full of practical information. Read it in 4 hours.
A short book that's engaging. Written as though we're pairing.
Stop getting lost in the weeds of refactoring and stay focussed.
Master these to write cleaner code starting today.
Spot code that's difficult to change then systematically improve it.
See how to eliminate Magic Number, Data Clumps and Primitive Obsession.
Design ideas only come alive when working with realistic problems.
Time is the most precious resource we have. No waffle. Straight to the point.
- Frustrated Junior Engineer
Your questions and objections answered.
I agree! It's a big, complex topic.
I'm not suggesting you'll learn the whole subject in 4 hours.
However, it's possible to give a good introduction in that time.
After reading this book, you'll be empowered to apply at least one principle or practice to your codebase.
This $4.99 book comes with a money back guarantee and can be read in an afternoon.
What have you got to lose?
If you don't like the book or don't find it valuable, I'll give you a full refund.
I only ask you join me on a Zoom and explain why so that I can make the book better for the next engineer.
I've watched hundreds of hours of videos, read all the major books on design and spent hundreds more hours experimenting with design in codebases.
I've condensed the most important principles into this practical 70 page guide.
It'll save you hours of stitching together the same information on your own.
Is that worth the price of a couple of cups of coffee?
Only you can decide that.
Yes! At the end of the book, you'll find a task.
Submit your code for review to get personalised pointers on how to improve.
The code that backs the C# .NET version is in this repo.
Choose the language that makes most sense for you.
Other languages in the works.
// C#
public static async Task<IProtectable> ProtectFromBadActors(
this Controller controller,
Cloudflare cloudflare
)
{
IProtectable policy;
if (user == null)
policy = new Policy(action: ActionType.Allow);
var response = await castleClient.Risk();
policy = new Policy(action: response.Policy.Action);
if (policy.Deny())
await cloudflare.Block(context: controller.HttpContext);
if (policy.Challenge())
await cloudflare.Challenge(context: controller.HttpContext);
return policy;
}
# Ruby
def protect_from_bad_actors(user:, event:)
policy = FraudDetection::CastlePolicyEvaluator.new.evaluate_policy(
user: user,
event: event,
request: request
)
block_or_challenge_bad_actors(policy: policy, request: request)
end
def block_or_challenge_bad_actors(policy:, request:)
action = PolicyAction.new(policy: policy)
action.on_deny { block_ip_address(request.remote_ip) }
action.on_challenge { challenge_ip_address(request.remote_ip) }
action
end
I've been programming for more than 15 years and have experienced the pain from poor design decisions.
This is the book I needed as a junior.
I'll not list my hobbies because I know you don't care.
You'll get an email when Clean Up The Mess is launched in late 2023.
In the meantime, look out for opportunities to be beta readers for the book.