DEV Community

Cover image for Understanding Software Architectures: Go Horse vs LEAN
Rodrigo de Oliveira
Rodrigo de Oliveira

Posted on • Edited on

Understanding Software Architectures: Go Horse vs LEAN

Have you ever noticed how implementing new functionalities on an inadequate architecture can lead to problematic decisions? Let's explore this by comparing two distinct approaches: the "Go Horse version" and the "LEAN version".

The Challenges of Go Horse Architecture

Initially, the Go Horse version might seem more appealing than LEAN due to its apparent simplicity and speed. However, it proves problematic over time. Quick and improvised solutions, which initially seem harmless, accumulate, creating more work, bugs, and security vulnerabilities. This accumulation of temporary fixes eventually leads to a critical point where the only solution seems to be: "We need to rewrite everything from scratch!" Unfortunately, rewriting a project is often an unfeasible or extremely costly option.

Warning Signs to Identify Go Horse Architecture

To avoid reaching this critical point, it is important to recognize the warning signs indicating the adoption of a Go Horse architecture:

  1. Focus on Immediate Convenience: When the implementation is chosen more for the immediate workload reduction of the developer than for its long-term effectiveness.
  2. Unnecessary Initial Complexity: Implementations that are born complex, trying to predict future requirements that may never materialize.
  3. Difficulty in Explanation: If it's hard to explain the implementation of a feature, it may indicate excessive complexity or a lack of clarity in the solution.
  4. Lack of Theoretical Foundation: The developer acquires skills only in practice, without studying the theory or underlying principles.
  5. Ignoring Suitable Design Patterns: There are established design patterns that are not being used, even though they are perfect for the problem at hand.
  6. Neglecting Good Practices: Due to "lack of time", good development practices, such as rigorous testing, are ignored.

The Importance of Continuous Development

In my experience, the most successful projects are those that minimize or avoid these problems. It is crucial to understand that software development does not end with deployment. A system is a "living" entity, which continues to evolve while in use. Adopting a LEAN approach and maintaining good practices throughout the project's lifecycle is essential for long-term sustainability and success.

Top comments (0)