How to adopt the mentality of an improved I did a better developer today - ANCAPRA

To continue improving its software, it nourishes a positive and productive thinking.


Despite all the best intentions, it will never be perfect. In this way, the code is like art (except that it continues to refine even after its launch). Because of this, I now try to approach software engineering with a "improvement mentality", focusing on my energy to improve what there is and discover the following.

There is always reach to improve.



You are excited.

It is your first commercial software project, and you are ready to work on a clean and well-architect code base for a great project. Hit it big! Quickly you realize that the code base is not perfect. There may be disappeared documentation or you can find some questionable designs and uncomfortable solutions. "What would Uncle Bob say?" You ask.

It works, but ...

If he expresses the problems he has found, his senior colleagues are likely to agree with you. The product works, but there are definitely some twisting in the code base that you would like to iron. In addition, there are some manual processes that would love to automate. In addition, this component of the system could really use a rewriting. Ah, on the right, and they forgot to inform you about this useful tool that he will need for debugging.

This is normal.

We will explore why that is. But realizing that the production software can always be improved will start on the right foot. The reality is messy, so he hopes to find a little mess. This is where CI / CD practices are useful, allowing the team to accelerate the delivery of those crucial improvements to the client.

Sometimes decisions are made with incomplete knowledge.



Nobody wants to make a bad decision. I like to think that, as a team, we always want to do our best work and make good decisions. Here is the thing: when we take a software decision, we must balance many factors. The accounting of uncertainty is just one of those factors.

Optimal technical decisions always seem clearer in retrospect. However, at the time a decision is made, the future is unknowable. We can tilt us in this uncertainty by favoring dynamic and extensible designs. On the other hand, if we put too much focus on uncertainty, we will not do our things on time. Worse yet, we could lose months by building something very dynamic that does not solve the most pressing problems of our customers.

Software teams balance many factors by making a decision, such as:

  • What is our budget?
  • How fast does this need to be delivered?
  • Are the other teams affected by this decision?
  • How likely is that the requirements for this will change in the future?
  • Is there any limitation in our dependencies that could affect this?

For these reasons, I try to avoid questioning the intention behind a software decision. It always assumes the best intentions and attempting to focus on the content of the decision and how it could be adjusted to work for the new circumstances.


Adopting an improvement mentality



Accepting that a decision made sense at that time, does that mean that we should leave it alone if it is not a critical problem at this time?

Of course not! An attitude of "license, being" will accumulate technical debt that, ultimately, can sink your software project.

We try an improvement mentality instead.

Start with the assumption that we all want to create a great product. If you find a problem, the team has an update opportunity (and that's great).

Identifying a problem is not enough. To make an impact as an improved, you must find a way to improve the situation. Sometimes you can go ahead and fix it yourself. You know, leave the camping cleaner of what you found it. Larger problems are not usually resolved with quick solutions, so in those situations, you will probably need some teammates to put together your heads.

When you are working on a software product as a new developer and finds something questionable, here are five points to consider:

  • It is respectful. Suppose that the person who worked on this before took the best decision they could, given the circumstances.
  • Do not hesitate to ask: "Is this intentional?" Your teammates could provide an additional context.
  • If you understand the context and feel that the problem is fixable, go ahead and solve.
  • If the problem is larger or structural in nature, lift it up to the equipment. Think of a solution in advance, but have an open mind to the ideas of the team.
  • Do not feel bad if the team is not ready to solve a big problem immediately. Some improvements are not critical over time and priorities should be made.
Sometimes you need to defend an improvement for a while. A respectful tone goes a long way to get the technical team on board. For instance:

"I had a feature of implementation of X problems in the Y system. I have a bit of the person's context, and I think we can avoid this problem in the future by the reworking system and. Here is an idea of ​​how we could do it, but what you think? "

If the administration needs convincing, keep them short and concentrate on the impact on the budgets and the time used by the team. For instance:

"Every week, our team is losing 5 hours while working on the X function due to a technical problem. The team agrees that, by the reworking system and, we can save that time running. We estimate that it will take 20 hours in Do. Can we plan this in? "


Conclusion

I believe that an improvement mentality is a highly productive way to approach the old code, and it will make you feel less frustrated as well. It may not always be successful in being this type of encoder, but it is the type of encoder that I strive to be. After all, there is always something to improve.

Then, let's work.

Post a Comment

Lebih baru Lebih lama