The Software Development Pyramid

When I was at the university, I learned that software development principles can be classified at different levels, depending on the impact that they affect the structure of a software project. This means that they have a different use, different abstraction level, and different difficulty. So, if you want to learn this discipline in deep, you can know where to start, according to this hierarchy.

But, what is a software development principle?

Over the last decades, since the computer era began, billions of lines of code have been written. Millions of developers have fought against incalculable numbers of problems, generating thousands of solutions.

Over the years, good and bad ways to create software have been propagated. The evolution of technologies, languages, and techniques have build the software development world we have today.

For our luck, this evolution has brought to us many fantastic concepts and “good practices” that we can apply to improve our solutions. Many of them, are known as software development principles.

Fundamentals

They are the basic concepts of development. All the theory of the development is built up over of these pillars.

Fundamentals are the first floor of the pyramid, and they are the most important ones. You must master the concepts in order to scale the pyramid.

Development Principles

There are a set of recommendations and bases that act as a guideline through the design process. Development Principles helps us to create more robust, extensible and simple solutions. This makes better to grow and to maintain software.

At this level of the pyramid, a lot of good principles can be found, advice or rules. These ones do not solve any particular problem, but they can guide your decisions during the design process.

Knowing them it’s important, but learning where to apply them its more important. In general, you should apply them. But, applying these principles depends on the context and the trade-offs between the cost of applying them and the value you get.

It’s important to understand why they exist, because they are not dogmatisms or mathematical formulas to create good software. They have contributed to create better software solutions over the years.

Design Patterns

Are solutions to solve specific problems.

It’s more important to know the problem a pattern solves than how to implement it.

The more patterns you know, the more options you will have the moment you build software solutions. But it’s important that the usage is justified by the problem they solve, some times when we learn a new pattern, we tend to overuse it. Remember that there is no silver bullets.

There are a lot of them, in a lot of different contexts of the development. Each time you try to learn a new area of software development, ask yourself what patterns you can find there, to understand the common problems in the area, and the specific solutions you can apply.

Architectural Styles Patterns

Patterns and styles that define the structure of software solutions.

This is the top of the pyramid, here you find the patterns that affect the big picture, and the most complex ones. In essence, these styles define and condition how the structure of solution should be designed and implemented.

Like design patterns, the architectural styles should only be applied when they problem justify it.

So if you want to start exploring this pyramid, make sure you do not start building the house from the roof.

But this does not mean that It’s all done!

In order to always create better software, you must think by yourself and distill all these principles, and many other concepts.

This pyramid will never stop building. New principles, will be born in the next years, so be alert.