Monday, February 13, 2023

You need to make decisions to learn how to make right decisions

You don't automatically learn to design architecture when you become a more experienced developer. Even the best programmers may not have the skills required to make decisions that stand the test of time. 

In that case, the question is: how can you learn these skills?

Courses and Books

If you are interested in software architecture, you should start with books and courses. This is how you can learn about various aspects of this knowledge area. 

One of the most important things is to understand that each option has pros and cons. Unfortunately, there is no perfect solution and each decision has its consequences. 

Books let you get familiar with different ways of solving the problems you experienced in your career. This is a great way to build a solid foundation for further learning.

Yet, this is not only about reading and listening. You should be focused on learning various things and getting familiar with different approaches to the given problem. Don't let yourself be closed-minded. Don't be the guy with default answers for most of the challenges. Neither books nor courses will prepare you for all difficulties you face, but this is the way to get a brief overview of the new solutions and trends fast. 

Make decisions

The books and courses give you a lot of essential information. Yet, reading and practicing in controlled environments is safe by nature. In your daily work, you will face obstacles that bring something more than a technical problem to solve. There will be pressure, stress, resource constraints, communication, and many more. Software architecture is not only about picking a message broker that meets your requirements. What about the cost? Is there anyone familiar with this solution? How much will you need to invest in education? And so on.

You need to make architectural decisions to learn how to balance all those aspects together and find the right solution. 

Of course, it can be hard in the beginning. Some decisions are risky, and many of them are difficult to change. What you can do with that? You can think about how to reduce the risk. A good idea is to build an environment where you can run short-leaving experiments. Then, based on the input, you can either enable the solution fully or roll it back safely. This is a difficult task on its own, but worth the investment. It let you try multiple options at once and make a data-driven decision.

Mentoring

I believe there are two main challenges when we want to learn how to design good software architecture:
  1. You must wait some time to know if a decision was correct. 
  2. You are not making the architectural decision each week/month.
It takes significantly more time to learn how to design the architecture of your software rather than learn e.g. refactoring patterns.

And that's why it is great when you can learn from others' experiences. It does not have to be a dedicated mentor. It can be a friend with a different background than yours. It may be a group of people that want to share their stories about victories and failures. You should always look for someone who can provide feedback and challenge, and improve your ideas. 

After all, it is easier to redraw a couple of rectangles than face problems in production. 



No comments:

Post a Comment