Select Page
Laws of Software

Laws of Software

Laws of Software: Hard Lessons That Gave Birth to Agility

Why You Should Care?

Did you know that many projects are delivered on time, on budget, and on scope… and are still considered failures?
That’s because they don’t satisfy the user. And that disconnect is exactly what many software laws have been warning us about for decades.

 

Leadership

The Unwritten Rules of Software

Before agility was a thing, practitioners were already documenting the harsh realities of software development. These weren’t official standards or processes—they were empirical truths, learned the hard way, and observed so consistently that they became known as software laws. A few stand out:

  • Conway’s Law – Software architecture mirrors the communication structure of the organization.

  • Ziv’s Law – Requirements will never be fully understood until there is a working version of the software.

  • Humphrey’s Law – People don’t know what they want until you show them something they don’t.

  • Brooks’ Law – Adding manpower to a late software project makes it later.

These aren’t just fun quotes for talks—they reflect the reality of building things in complexity, where what’s supposed to work on paper falls apart in practice.

Why These Laws Exist

Because software isn’t predictable like traditional engineering. It:

  • Changes constantly.

  • Is highly abstract.

  • Is based on rules we invent as we go.

  • Is deeply affected by communication, expectations, and context.

And because of that, decisions have side effects. Bad practices don’t just delay timelines—they erode trust, waste resources, and burn teams out.

So What Are These Laws Good For?

On a daily level, they help us:

  • Avoid repeating common mistakes.
  • Justify good technical and team practices.
  • Make sense of the chaos we often find ourselves in.
  • Guide teams and leaders through uncertainty.

Strategically, they help:

  • Transfer hard-earned lessons across generations.
  • Prevent systemic failures by design.
  • Justify why “best practices” aren’t optional—they’re survival mechanisms.
Leadership5

“The Agile principles are the most comprehensive expression of software laws ever captured”

When Management Ignores Them… It Shows

According to the CHAOS Report 2015:

  • Only 11% of Waterfall-managed projects succeeded.

  • 29% completely failed (cancelled or delivered nothing).

  • The remaining 60% were over budget, late, or missed scope.

And that’s because traditional management models operate as if the system were simple or complicated, not complex—they try to control it instead of working with it.

The Turning Point: 12 Principles That Changed Everything

In 2001, after decades of seeing these laws violated again and again, a group of practitioners came together to codify the antidote. The result was the Agile Manifesto, and more importantly, its 12 principles.

They didn’t come from theory—they came from practice.
From Conway, Ziv, Humphrey, Brooks, and thousands of unnamed failures.

The 12 principles and the 4 values are a distilled compendium of observations from the field. They recognize that:

  • Change is constant.

  • Value is more important than scope.

  • Working software matters more than detailed plans.

  • Collaboration beats contract negotiation.

  • Reflection and adaptation are non-negotiable.

And that’s just a glimpse.

These are only a few of the ideas they capture—each principle holds layers of hard-earned wisdom gathered from real-world experience.

Conclusion

Software laws are compasses—not maps.
They don’t offer step-by-step instructions, but they do warn us where the swamps are. In a domain where uncertainty is the norm and perfect planning is a fantasy, these principles and laws help us make wiser choices and build better systems—with humility, clarity, and intention.

So no, agility didn’t invent anything new. It just listened to the laws the software world had been screaming for decades.

They are not rules to follow blindly, but signposts to navigate uncertainty with greater clarity, humanity, and purpose.

The leader is not responsible for the team’s work, but for the team that does the work

Leave your comments

Leadership as a Team Enabler

Leadership as a Team Enabler

Leadership as a Team Enabler

Why Should Leadership Evolve?

Did you know?

According to Google’s Project Aristotle, the most successful teams weren’t the ones with the most technical talent, but those where leadership fostered psychological safety—environments where members felt safe to speak up, take risks, and make mistakes without fear of punishment.

A Gallup study found that 70% of the variation in team engagement is directly linked to the immediate leader. Teams with empathetic and committed leaders show higher productivity, lower turnover, and greater customer satisfaction.

MIT Sloan Management Review revealed that teams led by individuals who adopt a coaching approach—rather than traditional supervision—are 39% more likely to exceed their annual goals.

Leadership

If modern developers have evolved into autonomous, creative professionals—capable of critical thinking and focused on delivering value— (Post)… What kind of leadership do they need?
Does the traditional role of a boss—someone who supervises, approves, and controls—still make sense?
Or is it time for leaders and managers to evolve into something more aligned with the reality of modern teams?

The work of a software engineer today goes far beyond writing code. They contribute to product decisions, collaborate with stakeholders, refine requirements, improve processes—and most importantly, they take ownership of the value they deliver.

Leading a team like this isn’t about knowing more than them or controlling every step.

It’s about creating the conditions that allow them to perform at their best.

Simon Sinek puts it clearly:

“A leader’s job is not to do the work for others; it’s to help others figure out how to do it themselves, to get things done and to succeed beyond what they thought possible.”

That environment includes:

  • Psychological safety

  • A shared sense of purpose

  • True autonomy

  • Ongoing feedback loops

  • Clarity and transparency around vision and priorities

  • Time and space to experiment and improve

In this model, the leader is no longer a task manager, but an architect of the environment—someone who removes barriers, shapes culture, and protects the team’s overall health.
They’re not responsible for the work itself, but for ensuring that the team has the conditions to do it well.

And there’s data to support this:
Teams led under this model show up to 39% higher goal achievement (MIT) and 25% greater performance (Zenger & Folkman).

Leadership5

“The leader becomes an architect of the environment—someone who removes obstacles, shapes culture, and safeguards the health of the team.”

Another fundamental trait of modern leadership is the recognition that the team is responsible for its work—and for everything required to make it happen.

The leader is not accountable for the team’s output, but for the team itself—the people doing the work.
This perspective has also been expressed by Simon Sinek, who states:

“Leaders are not responsible for the results. Leaders are responsible for the people who are responsible for the results.”

The team is made up of professionals who are fully capable of organizing themselves, making decisions, and executing—often better than any external figure, including the leader.
The true value of leadership doesn’t lie in telling people what to do, but in ensuring the conditions exist for the team to do it well.

That means taking responsibility for the team across multiple dimensions:

  • Their emotional well-being, by avoiding toxic or unsustainable environments.
  • Their relational health, by fostering trust, respect, and open dialogue.
  • Their operational clarity, by removing friction, ambiguity, or overload.
  • And also their holistic development: supporting their professional, economic, technical, personal, and collective growth.

A healthy team doesn’t just work better—it learns, innovates, and stays.

In this transformation of leadership, we’re talking about a fundamental shift in how we think, act, and relate to teams.
Leadership rooted in control, obedience, and top-down supervision no longer works in environments that demand adaptability, ownership, and critical thinking.

This shift isn’t just about tone or personality—it’s about moving from control to trust, from supervision to support, from task focus to value creation. It requires letting go of outdated habits like micromanagement, rigid reporting structures, and one-way communication, and instead embracing collaboration, clarity, feedback, and shared purpose.

Conclusion

A leader of a team made up of highly skilled professionals—like the developers mentioned in a Previous Post—must be much more than a traditional “manager.”

Their role is to create an environment of trust, clarity, and autonomy where the team can take full ownership of their work, thrive collectively, and deliver value sustainably.

More than a supervisor, the leader becomes an architect of the environment, a promoter of organizational health, and a facilitator of continuous learning.

The leader is not responsible for the team’s work, but for the team that does the work

Leave your comments

The Software Engineer as the Product’s Core

The Software Engineer as the Product’s Core

The Software Engineer as the Product's Core

Why reducing the Software Engineer to just a “code writer” is a strategic mistake

Before discussing leadership—a topic I’ll cover in the next post—it’s essential to understand the teams that will be led. In this particular case, I want to focus on a key figure within any tech organization: the Software Engineer. Leadership will be addressed in the next post.

Throughout my experience, I’ve witnessed how their role has evolved, as well as the expectations regarding their skills and responsibilities.

The software industry has undergone profound transformations—largely thanks to thought leaders who redefined how we develop digital products and services—and, as a result, the expectations for Software Engineers have changed.

Although some corporations still attempt to rigidly dictate what an engineer should do or code, the reality is that their role has expanded: today, they actively participate in decision-making and solution definition.

The modern software engineer is a key collaborator, the technical heart of the product.

It’s crucial to recognize that their impact doesn’t solely depend on their technical knowledge. To provide true value, they need to develop both technical skills (hard skills) and interpersonal and organizational skills (soft skills).

Soft Skills 
    • Teamwork and collaboration
    • Adaptability and change management
    • Effective communication
    • Critical thinking and problem-solving
    • Proactivity and autonomy
    • Feedback and continuous learning
    • Customer and value orientation
    • Time management and prioritization
Hard Skills 

    • Programming and language proficiency
    • Administrative and documentation tools
    • Version control and repository work
    • Automation y DevOps
    • Testing and QA
    • Cloud Computing
    • Architecture design
    • Secure development
    • Databases and data modeling
    • UX and accessibility

A programmer’s work goes far beyond just writing code. In addition to programming, they engage in essential activities to ensure the team continuously delivers business value. This ranges from collaborating with stakeholders to the ongoing evolution of the team and the product.

If we were to imagine the weight of each of these areas in their daily work, coding would likely occupy only a portion. The rest is distributed among design, validation, communication, support, technical decisions, and product evolution.

Software Engineer Task Distribution (Percentages)

1. Programming and Development (30%-40%)

    • Writing and reviewing code.

    • Implementing features based on sprint requirements.

    • Code refactoring to maintain quality standards.

    • Automated testing (unit, integration).

2. Refinement and Discovery (15%-20%)

    • Participating in refinement sessions to understand and break down user stories.

    • Requirements analysis with the Product Owner and stakeholders.

    • Engaging in discovery to research technical solutions or alternatives.

    • Validating and clarifying technical doubts during the planning phase.

    Ingeniero de Software Coding

    3. Communication and Collaboration Meetings (15%-20%)

    • Daily stand-ups: Reviewing progress and coordinating with the team.

    • Planning and retrospectives: Defining sprint goals and improving processes.

    • Synchronization with other areas: Collaborating with UX designers, DevOps, QA, etc.

    • Communicating with stakeholders to align the technical vision with business expectations.

    4. Testing y Control de Calidad (10%-15%)

      • Desarrollo basado en pruebas (TDD/BDD) para asegurar un código robusto.
      • Code reviews para mantener estándares de calidad y compartir conocimiento.
      • Corrección de bugs detectados en ambientes de prueba o producción.
      “Su labor comienza desde las etapas más tempranas del ciclo de vida del producto: participa en el descubrimiento, colabora en el diseño, comprende las necesidades del negocio, conceptualiza soluciones viables y se hace responsable de su calidad y mantenimiento”

      5. Research and Continuous Learning (10%-15%)

        • Exploring new technologies or patterns that add value to the team.

        • Training in best practices and development tools.

        • Documenting processes and continuous improvements.

      6. Continuous Improvement and Automation (5%-10%)

        • Optimization of development processes.

        • Contributing to improved development practices within the team.

        • Monitoring and adjusting CI/CD tools to streamline workflows.
      Developer Creating

      Conclusion

      A Software Engineer should not be reduced to an operational role limited to writing lines of code. Their work starts from the earliest stages of the product lifecycle: they participate in discovery, contribute to design, understand business needs, conceptualize viable solutions, and take responsibility for their quality and maintenance.

      They must be invited to engage actively in business rules, hypothesis validation, and technical decisions that directly impact the product. In this sense, they should be treated as value creators and co-owners of the outcomes—not just the deliverables. With this recognition also comes the duty to take responsibility—positive or negative—for their involvement or absence.

      They should not be assessed solely on their ability to write code or based on raw productivity metrics. Their real impact is reflected in how they contribute to business understanding, team engagement, continuous product improvement, and shared ownership of quality.

      Treating them as co-responsible for success means broadening how we evaluate them. It’s not about controlling their output, but observing their growth as well-rounded professionals: How do they add value? How do they adapt? How do they improve? How do they collaborate?

      Therefore, evaluations should focus on quality of work, technical maturity, team collaboration, and the ongoing improvement of their processes—without neglecting the shared technical responsibilities of the team.

      Traditional or Agile Management?

      Traditional or Agile Management?

      Traditional or Agile Management?

      Why does the type of problem matter?

      Did you know that over 70% of projects following a traditional approach fail in environments with high uncertainty or constant change?
      Studies like the Chaos Report have shown that failure often lies not in execution… but in choosing the wrong approach.

       

      What if the real issue isn’t the method you choose, but not understanding the kind of problem you’re facing?

      Before deciding whether a traditional or agile approach is best, it’s essential to understand the nature of the problem.
      To do this, we rely on two complementary frameworks:

      • The Stacey Matrix

      • The Cynefin Framework

      The Stacey Matrix is an analytical tool developed in the 1990s by Professor Ralph D. Stacey, a specialist in organizational management and complexity theory.
      It emerged in response to a common problem in business environments: the tendency to always apply the same management approach without considering the nature of the issue.

      This matrix has become especially relevant in contexts where innovation, digital transformation, or product development require adaptive responses rather than strictly procedural ones.

      Stacy Matrix
      Cynefin framework

      The Cynefin Framework was created in 1999 by Dave Snowden, a Welsh researcher in complexity theory and knowledge management.

      This framework is a decision-making tool based on the nature of the context or problem. It is widely used in business management, strategy, leadership, and the resolution of complex problems.

      Both frameworks help diagnose what you’re dealing with.

      The Stacey Matrix helps by evaluating two key dimensions:

      • Certainty – How clear is the problem and its solution?
      • Agreement – How much consensus exists among those involved?

      Stacey Matrix
      This matrix cross-references certainty and agreement to classify the type of problem and suggest the most suitable approac

      High Agreement Low Agreement
      High Certainty Simple Problem: known solutions, repeatable processes.
      Traditional approach
      Complicated Problem: requires expert analysis.
      Detailed Planning

      Low Certainty

      Complex Problem: many variables, unclear relationships.
      Needs short cycles, trial and error.
      Chaotic Problem: no time for analysis.
      Act, contain, then reflect.
      The Cynefin Framework

      It reinforces the idea that not all problems should be approached the same way, as they depend on the nature of cause and effect.

      1. Simple (Clear)

      Approach: Standard procedures, best practices.

      2. Complicated

      Approach: Expert analysis, robust planning.

      3. Complex

      Approach: Experimentation, short cycles, continuous learning.

      4. Chaotic

      Approach: Immediate action, containment, stabilization.

      Conclusion

      It’s not about being a fan of agile or traditional methods.
      It’s about understanding the problem before applying the solution.

      When the environment is stable and predictable, a traditional approach may work.
      But in uncertain, changing environments with multiple actors and viewpoints, you need flexibility, adaptation, and short cycles.

      The approach shouldn’t be a dogma.
      It must be a conscious response to the context you’re facing.

      Comments