Software Design Simplified

An introduction for curious, driven engineers.

The most accessible design book you'll ever read.

100% money back guarantee if you don't love it.

Reviews

Great book, packed with wisdom.

"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!"

Jacob Knotek, Senior Engineer
Great for engineers that value their time.

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.

Renato Coelho, Engineer

Testimonials

"I've learned more with John in last 3 months than I did on my own in 3 years."

Peter Shutt, Junior Engineer

"I applied to a top graduate programme and I got the job! I owe John a year of my life and probably £20k!"

Frances Maxwell, Frontend Engineer

"I went from being a graphic designer to a frontend developer within 2 years, and I attribute this to having such a fantastic mentor."

Georgina Neilson, Senior Software Engineer

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

Sophie Foreshaw, Engineer

Learning Software Design is Hard

"I was really excited to learn design!

I bought a "classic" design book my colleagues were raving about.

I only read the first 50 pages. It was really hard going.

I feel so guilty that I gave up."

- Depressed Junior Engineer

Other Books? Theoretical. Long.

Struggling to learn design? Not your fault.

  • Problem 1 - Jargon

    "Prefer composition over inheritance". "Decouple the classes by dependency injecting a polymorphic object". These catchphrases are rarely explained well.
  • Problem 2 - Theoretical

    The theory is well served. But when it comes to practical examples... not so much. Any code snippets are usually contrived and written in dead languages.
  • Problem 3 - Boring

    Many technical books are full of waffle and irrelevant anecdotes. As a result they're often 200+ pages long and dull as dishwater.

This Book? Practical. Short.

A practical introduction to software design that you can read in an afternoon.

  • Plain English

    Single sentence explanations your Mum could (nearly) understand. I ditch the jargon and complicated fancy words.

  • Quick Read

    Every word earns it's place. No stories about obscure historical figures, no filler fluff, no longwinded rants.

  • Engaging

    A technical book with just enough personality to keep you reading, but not so much that it obscures the point.

  • Example Led

    One realistic example throughout the book to teach design principles. No weird UML diagrams. No useless abstract analogies.

  • Practical

    Explanations of coupling, encapsulation, polymorphism and abstraction in the context of a real web application.

  • Modern

    Written in a style designed for modern attention spans and modern languages. Written for C# / .NET. Also available for Ruby

What You'll Learn

A broad range of design ideas explained in plain English.

  • Design Practices

    • Four Rules of Simple Design
    • Make the Change Easy
    • Focus On Differences
    • Programming by Intent
    • Separation of Concerns
    • Dependency Injection
  • Quality Measures

    • Coupling
    • Cohesion
    • Encapsulation
  • Design Principles

    • What versus how
    • Abstraction
    • Open / Closed Principle
    • Polymorphism
    • Dependency Inversion

"I read a well known book my mentor recommended.

I tried to apply the ideas in our codebase but ended up making a mess.

I think I get the theory but can't understand how to use it."

- Confused Mid Level Engineer

Espresso Shot of Practical Learning

Packed full of practical information. Read it in 4 hours.

  • Seventy Pages

    A short book that's engaging. Written as though we're pairing.

  • Six Design Practices

    Stop getting lost in the weeds of refactoring and stay focussed.

  • Five Design Principles

    Master these to write cleaner code starting today.

  • Three Quality Measures

    Spot code that's difficult to change then systematically improve it.

  • Three Code Smells

    See how to eliminate Magic Number, Data Clumps and Primitive Obsession.

  • One Real Life Example

    Design ideas only come alive when working with realistic problems.

  • No Fluff

    Time is the most precious resource we have. No waffle. Straight to the point.

"I know my code isn't right but I don't know a better way.

I wish I could find a book that shows me how to improve my designs."

- Frustrated Junior Engineer

Questions

Your questions and objections answered.

  • Learn software design in an afternoon? That's ridiculous.

    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.

  • Why should I trust you?

    1. I love explaining the complex in simple terms
    2. I've mentored engineers to reach that "Eureka!" moment
    3. I've practiced design in real life codebases for 15 years
    4. I've learned from some of the best coaches in the world

    This $4.99 book comes with a money back guarantee and can be read in an afternoon.

    What have you got to lose?

  • How can I buy this book for my team?

    1. See the book in my store 
    2. Select a team license
    3. Enter your payment details
  • What if this book doesn't work for me?

    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 can find this explained on YouTube for free. Why should I pay for a book?

    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.

  • Does the book include any tutorials?

    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 from C# or Ruby

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

Free Sample Pages

Want to read a snippet? Here's pages 41 - 44.

  • Software design simplified  csharp 41
  • Software design simplified  csharp 42
  • Software design simplified  csharp 43
  • Software design simplified  csharp 44

Meet the Author

  • Profile
    John Gallagher
    Senior Engineer

    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.

Software Design Simplified

6 practices, 5 principles, 3 quality measures, 3 code smells.

70 pages. 0 fluff.