Big ball of mud
Tags: discuss, webdev, programming, career
Published: 2019-08-31 16:15:14

Like many passionate people who program, I love progress. I'm fascinated by inventions and hyped by innovations.

I truly believe that professionals in our sector are curious about technology with varying degrees. 

Many soft-skills or traits shape our work style. Rigorous, for instance, improves the robustness of our task. Creativity sparks crazy or smart hacks. Determination energizes our tough sprint.

Curiosity powers us, combine it with passion and this premix could kick off any profile into any sector.

Curiosity calls for discovery, innovation and progress. Obviously I never innovated, technically-speaking. Most of my “mind-blowing” or “life-changing” tech discoveries which pulsed my career were in fact established ideas that were theorised decades ago.

Curiosity fertilizes technical debt, risk we couldn’t afford, knowledge we partially understood, patterns naively implemented.

Bringing new tech, the last storage engine, the last framework and the last orchestrator is already a risk and you've got enough rants on Twitter for any of them. 

Worse… I’ve witnessed lately that devs would bring in architectures or software engineering principles hyped by the community. 

This. Is. A. Nightmare. Behind is a great intention, beyond is a technical debts factor on almost each commit. 

Few years ago, when a junior would build and run a Web based application: the code could be spaghetti and the dedicated Debian, a public trash. 
Now, imagine the same junior: 

* a backend language/framework with CQRS/ES using NoSQL and SQL, probably some messaging bus.

* a frontend framework. The whole frontend ecosystem is trying to reach maturity at the moment.

* a container orchestrator deployed in the cloud relying on 3 to 10 services.


**A decade ago, rookies were crafting artisanal mess. Now, they produce industrial disasters.** *I'm no better and would surely be a 10x on that field.*

The problem is always the same: "meaning", the lack of. 
In our code, in our commit message, in our acronymized best-practices, in our company, in our team.

**Internet is so real-time and crowded that trends are wrongly positioned as standards.**

In the last 5 years, php was stormed by DDD (domain driven design). Amazing. Now the reality will be more like a repository that’s totally messed up with the infra layer, app layer, core domain, aggregate root, services.
 
DDD is trying to solve something so obvious that we missed the benefits of it, while paying the cost of the upfront complexity (+ the debt). 

This is one specific example but others crossed my paths regarding dev, ops, data…

Stay focused on the meaning.
* What's the meaning of what I'm doing. 
* What's the meaning of this feature at this stage of the project in this business context.
* What's the meaning of this pattern/tech.
* What's the meaning of these 400 LOC and 300K dependencies for this Hello World.

Iterate on your knowledge as well, failing is learning. Innovation is great: you bring it, you own the risk.

A big ball of mud or a serverless microservice won't define a meaning or express any.

The machine is still stupid, so our job is mostly to give it a meaning, **meaningfully**.

*Thanks to Azurrex for the proofreading*