Introduction to Four Principles Of Simple Design

With agile and extreme programming, the focus is on keeping your design simple. How do you keep your design simple? How do you decide whether your code is good enough?

Software Design Principles

This is the first article in a series of articles on important Software Design Principles:

What is Simple Design?

It is very important to keep the design of your application simple.

In almost all agile projects, the aim is to meet today’s requirements, with clean code.

You go for complex design, only when simple design does not solve your problem.

The Four Principles Of Simple Design

A software application is said to have a simple design if it:

  • Runs all tests
  • Contains no duplication
  • Expresses intent of programmers
  • Minimizes number of classes and methods

Let’s now look at these aspects a little closely, by turn.

Runs All Tests

We want to keep running all the tests continuously, because we want the code to work, at all times.

An important corollary of this principle is you need to have a large number of automation tests. All unit, integration and API tests must be automated.

You should launch these tests as part of your build, and they should also be a part of Continuous Integration (CI).

With CI, you commit code into the repository, all the tests are run, and immediate feedback is there for you to act on.

Since the software is being tested all the time, it is stable.

Contains No Duplication

The second principle stresses on the fact that your code should have as little duplication as possible.

A good example is to create common components, whereever possible, in the design of large applications. This helps centralize the logic and allow other applications to reuse them.

Why do we hate duplication?

If there is a need for a change, the same change needs to repeated at all these locations. The result : More effort and also possibilities of more defects when you miss making the change in every location. That is a sign of bad design.

Expresses Intent Of Programmers

Your code should be easy to read, and your design, simple to understand. This principle is also called Clarity Of Code.

Have a look at the following piece of code:

Example-01 v1

image info

Do you understand what it does?

Now look at the following version of the same program:

Example-01 v2

image info

Do you understand what it’s trying to do?

Actually, Example-01 v2 results from applying the Four Principles of Simple Design to Example-01 v1.

Start with creating good names for variables, methods and classes. That improves clarity.

Minimize number of classes and methods

You should have

  • Small methods
  • Small classes
  • Minimum number classes and methods

Isn’t it simple.

Lesser code you have, lesser code you have to maintain.

Always aim to keep things simple.

Do check out our video on this:

image info


In this article, we looked at the four principles of simple design. These are the first steps to ensure that the design of your application remains simple. It lays the foundation for applying more advanced principles to improving your design.

Related Posts

Spring Boot Tutorials for Beginners

At in28Minutes, we are creating a number of tutorials with videos, articles & courses on Spring Boot for Beginners and Experienced Developers. This resources will help you learn and gain expertise at Spring Boot.

Spring and Spring Boot Video Tutorials for Beginners

At in28Minutes, we are creating a number of tutorials with videos, articles & courses on Spring Boot for Beginners and Experienced Developers. Here's a list of video tutorials and courses for you

Creating Spring Boot and Vue JS CRUD Full Stack Application with Maven

This guide helps you create a full stack application with all the CRUD (Create, Read, Update and Delete) features using Vue JS as Frontend framework and Spring Boot as the backend REST API. We use Maven as the build tool.

Software Design - Separation Of Concerns - with examples

Software architects and programmers love having Seperation of Concerns. What is it? Why is it important? Let's get started.

Object Oriented Software Design - Solid Principles - with examples

Software design is typically complex. Object oriented design takes it to the next level. There are a number of design patterns and other stuff to be aware of. Can we make things simple? What are the goals to aim for when you are doing object oriented design? SOLID Principles is a great starting point for Object Oriented Design.

Software Design - Open Closed Principle - with examples

Open Closed Principle is one of the SOLID Principles. You want your code to be easily extended. How do you achieve it with minimum fuss? Let's get started.

Software Design - What is Dependency Inversion Principle?

Dependency Inversion Principle is one of the important SOLID Principles. Dependency Inversion Principle is implemented by one of the most popular Java frameworks - Spring. What is it all about? How does it help you design good applications?

Software Design - Single Responsibility Principle - with examples

For me, Single Responsibility Principle is the most important design principle. What is Single Responsibility Principle? How do you use it? How does it help with making your software better? Let's get started.

What is an In Memory Database?

In this article, we understand what the term "In-Memory Database" actually means. We see what scenarios they can be used, and why they are important.

What is an Embedded Server?

In this article, we focus in exploring what an embedded server is, and how they help make application deployment simpler.