We all have a life philosophy (even if it is not written down), which is a set of beliefs, principles, values, and attitudes that guide and shape our approach to life. Having a life philosophy helps us understand our reality, purpose, morality, and how we should navigate the challenges and experiences that life presents.

As having a life philosophy helps us guide our decisions in life, having a professional philosophy helps us make decisions according to our personal preferences and goals. I believe that we have to purposely set and write down our philosophies so we can have a document to check when we are lost and also make us keep track of our changes during life.

An important part of the philosophy is that it evolves with time. As we evolve in life and also in our career, we start focusing on different things and we can even totally change our approach to life and career.

This document is a set of principles that are part of my software engineering philosophy. I am far from perfect and I struggle with most of them, so they serve to me as a goal, something to aim for. Also, I can change my mind and evolve.

My Software Engineering Philosophy

Below are a few of the things that I believe and aim to be/do. The list is not exhaustive but brings the most important things.

Small updates, more frequently

I believe that deploying small changes more frequently is better than less frequent deploy big changes. With small updates, we have a faster feedback cycle and can find more easily which part of the code is not working as expected.

There’s no environment like production

We may try to have staging or environments to mock production, but we will never be able to have that. It is almost impossible to have the same data distribution, usage, and conditions that we have in prod. So, in a way, we need to test in prod.

The faster the feedback cycle, the better

This is not only about small updates, it is also about the development process. The faster that your code goes from committed to production the better as you can avoid switching context.

Let the IDE do most of the work

Automation is the best friend of the developer and IDEs are getting better every day. So learning how to use the shortcuts, the features, and all that the IDEs provide will help you be more productive and happy.

Always leave the code better than you found it

I always try to improve the code even if it is not related to the task at hand. If every time we touch the code we make it a little better than we found it, it will improve over time.

Is it important and urgent?

I try (not that I am able) to only work on the tasks that are important AND urgent. If it is only one of both, we could do it later.

Less code the better

If the code is not used, just delete it. The less code that we have, the lesser the need for maintenance. We are not paid by line for the codes that we provide, but the solution that we provide via code.

Write things down

Writing things down, even if it is only for you helps a lot. We usually work on so many different things that after a few weeks we don’t remember almost anything, so writing things down helps us. Also, recording team decisions in ADR-like documents helps the team to know what and why the decisions are being made.

Always be willing to help

Sometimes is difficult to balance your own work with helping others, but I always am willing to help. People are more important than code. By helping others, you are levering the work. Also, in a few years, you will remember the people you helped (and them you) and not the specific tasks that you were working on.

Own the system

I believe that we should own the system, not only the tasks that we are working on. Ownership helps us make the system better as we are always striving to improve the whole system, with a high-level view.

Everything will break, eventually

We live in an imperfect world. The things we make break when we least expect them to, so it is important to build systems with a fault-tolerant mindset.

Summary

As said, I use these principles to guide the way I work, but they are not set in stone, so I am always learning and evolving them.

Hope they help you as well.


Photo by TheMarketingHustle.com on Unsplash