My 2 cents about UML

There were some interesting posts about UML recently. Mainly being  Has UML died without anyone noticing?” and “ Why UML “Really” Died”. I also made some posts about UML in the past — mainly “ UML Hidden Gems” and “ Architecture 101: Thinking about Design” and “ Internal System Design: The Forgotten Discipline “. IMHO success means decline and eventually abuse. That happened to all successful movements, technologies, and methodologies I can remember such as Agile, Architecture, DevOps, Docker, Spring, and many more. Yes UML was abused and used in the context of the heavy and rigid process. UML was often used for all CRUDs which does not make sense and does not add value. But honestly, if we see things with DDD lens even CRUDS don’t make sense especially with UX sense CRUD are not ideal at all. IMHO what happens is we are exposed to fashion and marketing. There is internal and external pressure to do things in one way instead of another. UML had issues yeah for sure I’m not denied that. However, I believe we throw the baby with the bathwater. UML was about making you think about different perspectives. The big issue of everything is not to understand the principles, values, and core foundations of engineering, distributed systems, and Lean/Agile. By doing things we dont understand(and doing them FAST) we create more issues than we fixed. Sam Newman talks about that is his last book “ Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith “ where he describes experiences doing Microservices workshops and people were trying to do Microservices but they did not know why and did not know what problems they were trying to solve.

It’s about Learning

Lean was always about learning. In the classical book “The Goal” Goldratt tells a classical tell about a factory that was doing local optimizations and was not maximizing results and mainly increasing WASTE in the form of inventory and operational expenses. The same issues/fallacies I saw with SOA(Service Oriented Architecture) where one the first wave there was a massive push from vendors to REBRAND solutions to SOA and make people BUY first and think later. IMHO represented by the classical ROI fairy video. The same re-brand tool rush happened with Agile and JIRA(Capture by the parody Jira JR video).

Learning needs to EARNED. It cannot be acquired by a TOOL and by hiring a software vendor or consultant. Proper vendors can help you to accelerate your LEARNING however what often happens is the focus on IT delivery hater than business learning.

It’s about the business

We cannot do software ignoring the business domain. It’s very easy for engineering to focus on CODE problems and forget about business processes and business flow. Our failed attempts to do microservices pushed complexity upwards and create the need for BFF aggregators and even PR coordination nightmares (vide Uber DOMA story).

It’s easy to be trap thinking about if Spring Boot or Quarkus is the best choice and miss how the business change data and how the Domain should evolve, we need more DDD. We need to understand the business. As time pass and we have more and more legacy, even the business experts are rare in several companies and people need to look at the legacy code in order to know what's going on — we went full circle now.

It’s not UML fault — it's about Thinking

IMHO we need to think. We need to have time to think and properly collaborate with the business. UML is a way to force you to think from different perspectives and understand how your domain works. Notation and formalism are not the point and really dont add much value. Thinking is bigger than planning. That’s why we need retrospectives and collaboration with the business.

If we continue doing things we dont understand. If we continue to ignore the business domain. Any tool, Service, or Vendor can save us. We need to break the CONTROL fallacies and embrace complexity, care about people and understand that Learning is the only way forward.

Cheers,

Diego Pacheco

Popular posts from this blog

C Unit Testing with Check

Having fun with Zig Language

HMAC in Java