You influence people and you manipulate bits. If you do it right, they will deliver what you expect. Even though there is a vast difference in how leadership and development work - and you can presume that based on the disparity of meaning between "influence" and "manipulation" - some software development principles serve as a great guide to better leadership. 

Tell, Don't Ask

"Tell-Don't-Ask" is a principle in object-oriented programming that reminds us that rather than asking an object for data and acting on that data, we should instead tell an object what to do. Changing the vocabulary to a more declarative approach, the lesson is don't micro-manage data, and don't remove responsibility from your team. Tell people what you expect from them, share known data, and trust that they will do what they know how to do. In the end, delegation mandates trust. 


"Don't repeat yourself (DRY)" is a principle aimed at reducing repetition in software patterns, replacing it with abstractions. A well-defined level of abstraction is fundamental for decoupling responsibilities, defining ownership, and avoiding duplicate work while making sure the vital information is shared between interested parties. A leader should set expectations, define interfaces, deal only with essential information, and not waste everyone's time (WET). 

You Aren't Gonna Need It

"You Aren't Gonna Need It" is the principle that helps us avoid complexities that arise from adding functionalities you think you may need in the future. As a leader, your time to respond to problems is often more important than your ability to avoid them, primarily because you can't anticipate all issues. Together with the "Keep It Simple, Stupid" principle - universal among software developers but initially noted by the Navy - the message here is to be productive with your time and others' time. If you keep adding processes and tools to prevent future problems, those premature optimizations may become the problems you will be trying to solve. 


Single source of truth (SSOT) in software development is the practice of structuring information so that it is stored and managed centrally, avoiding overlaps and duplication. As a leader, you will face situations where normalized data is a must because you won't have time for redundancies. As you deal with higher expectations and riskier decisions, information is critical, and the only thing worse than no data is the wrong data. So learn to manage your sources so that information is reliable and available at all times, keeping a single source of truth.

Differences and Takeaways

Write your commands accurately, and software is always going to deliver as expected. On the other hand, people might consider your input, and maybe they will provide what you need, but the result depends on complex variables, including a diversity of personalities. The most beneficial thing you can and should do is be empathic and actively listen to everyone. Collectively, through the art of soliciting feedback, you will create the best way to achieve the expected result with mastery. 


Marcio Viegas

Marcio Viegas is a Technical Manager at Avenue Code. He loves learning and is passionately curious. He enjoys studying different subjects that could be related to technology or not and considers that his greatest and most valuable professional skill is his ability to bring together his diverse knowledge and creativity to propose solutions for complex problems.

How to SOLID


How Java Garbage Collection Works and Why You Should Care - Part 2


How Java Garbage Collection Works and Why You Should Care - Part 1