Plant Trees
Problem-Solving Strategies
Developing a good repertoire of strategies to deal with the most recurring problems of everyday life is like designing a utility belt. You simply select a few available tools and solve the situation when it arises.
Investing time in building that belt and learning different techniques is necessary throughout the journey of an engineer. It's important to keep practicing. During the implementer phase, the focus is on learning frameworks, tools, and design patterns. In the following stages, you'll expand your understanding of new topics like architecture, system integration methods, asynchronous models, and many others.
Data-oriented Decision Making
Making decisions is not always easy, but understanding what indicators and signs to evaluate while making decisions can make the process easier. A critical aspect of software development is defining ways to evaluate whether a feature works as expected. Having an easy way to access this data is essential for decision-making.
Another critical aspect that is sometimes overlooked is evaluating whether a decision made after a feature has been shipped was really the best one, and how to learn from it in the future.
Every day you'll have to make decisions; some may be small, like defining a class name or something trivial. Others are more significant and begin to affect other people, such as determining the integration model between applications A and B. As you progress in your career, these decisions become more impactful and affect more people. Therefore, early training is key to future success! Whenever possible, look for data to rely on other than your knowledge and instincts.
Remember, sometimes you do not have all the cards on the table. In those moments, you need to understand what the risks are and how to mitigate them, but that should not stop you. Taking risks is part of the decision-making process. The key is to strike the right balance.
Documentation
Documentation is essential to reduce dependencies and friction between people. Documenting something frees up time. Instead of having to explain the same thing to multiple people, you can simply share the content. Creating a holistic view of the platform is critical to facilitate onboarding new team members and planning changes across multiple products. It also gives people the freedom to explore our platform.
It's important to consider the audience that will be consuming the documentation. Take some time to think about the best format and how to convey the point being documented. Typically, documentation is associated with written pages, but if you find that recording a video, podcast, or even a picture of a diagram on a napkin would be better for a particular topic, go for it! The idea is to make it easier to consume and maintain.
When it comes to storytelling, you don't need to prepare to write a book or a college essay. The idea is that good stories tend to stick in people's minds, so use some of your time to think about small details like whether to write in the first or third person, whether to use a formal or informal tone, whether to use a known structure (like a six-page or one-page document) or define a new format.
Finally, documentation can permeate the entire development process, from brainstorming a feature to creating a design document, defining acceptance criteria for backlog stories, creating internal documentation for the team, or even documentation for the end customer of that functionality. Don't limit yourself to the idea that documentation is something that only happens at the end of the development process. Find good opportunities and go for it!
Quality consciousness
Quality consciousness permeates the entire process of delivering value. From refactoring confusing code, to improving acceptance criteria for a user story, to performing detailed code reviews, to increasing testing, to monitoring metrics, rethinking the delivery process because of a critical release, or trying to understand how to improve internal processes when things do not go well, reducing unnecessary dependencies and much more.
Broadening your view of quality is essential. It's about finding the right balance for each situation rather than getting stuck in rules that have no impact. The idea is to think about quality at every stage.