Welcome to my blog!

I’m starting this project as a way to revisit some important concepts, study a little and share some of the knowledge I’ve accumulated with my trajectory so far!

In this first phase of studies, I would like to revisit the concepts employed in the studies about the 12 factors for modern application development, inspired by the books of the legendary Martin Fowler.

This study was coordinated by developers of Heroku, a platform focused on delivering SaaS (Software as a Service) type applications.

So let’s get to know the first factor:


Every application should have an active version control system, some options are Git, Mercurial or Subversion.

A copy of this database is known as a code repository, repository or just the nice repo.

This is where we will store the code for our application, and this codebase always has a 1:1 relationship with the application, i.e., each application has its own codebase.

This codebase can be shared with another application but as a part of its own codebase. When this situation occurs we have a distributed application and not an application. A distributed application is a composition of several highly linked applications.

For a distributed application to be suitable for the 12-factor model it would be necessary to break this application into libraries and thus create the correct dependency between the application and the appropriate packages.

However, this does not mean that we cannot have multiple environments running the same code, in fact, this is one of the advantages of the 12 factors. We can create our own environments for development, testing, staging, and production.

Each environment can run a version of this repository, and each environment has its own reason, for the developer an environment for making changes, an environment for testing and checking with production-like data, and the production environment, which is the ideal version for the client, free of bugs and fully functional.

We call the distribution of the repository to the environments deployment or just deployment.

This image shows these environments well:


Summarizing the image, we can have the same application running different versions, each with a reason for existing.

When it comes to versioning tools, Git is widely used, becoming almost a standard in most companies. Not only that but Git was developed by Linus Torvalds, the same creator of the Linux kernel. 😁

When searching in Google trends we can see its popularity:

In a future post, we can talk more about this fantastic tool. But until then I recommend reading this material on the Git website.

Until next time!