Engineering requires more Science

Peter Drucker once said, "Culture eats strategy for breackfast". Technology is a very awkward field. In theory, we came from Math, science thinking should be our default mindset but we are far from it. We need science more than ever, as a society we are living a pandemic crisis, for sure will lead to some sorta ice age economical period who not only is never saw at this scale but also nobody can tell for sure what will happen. So yes, we need science because of the need for a COVID-19 vaccine and cure but we also need that in Software Engineering and Digital products. For some reason we are losing the basics, we are losing how to build software properly. Mostly because people don't understand how technology should work. Deming, one of the founding fathers of Lean once said Second-grade teacher creates second-grade students.  Crises times are often tough and difficult but for sure there are opportunities not only to improve things but also to re-think what we are doing.

Technology Flat Earthers

Flat Earth arrived in technology a long time ago with TDD and Clean Code. There is no scientific evidence proofing that 10-15 lines code means that the code is bad. TDDs claims to improve design but making features with tests. This is like losing weight by eating. What is funny is that in Flat Earthers there is no scientific proof and they believe just because they believe. TDDs/CleanCoders often fight like there is no tomorrow, and most of them never ever read the clean codebook. For sure we need a Detox.

I was thinking and actually is much worst them TDD / Clean code, our entire field losing senses. It's funny because we are leaving a technology moment where Data Science and Machine Learning are growing like crazy and are realities. So the question is why are we not applying Science to Engineering like we are going in Data Science?

We live in a are where everybody has an opinion and you need to hear people's opinions no matter is they are completely based on bullshit and people don't bother to even read 1 book or do any basic research. So I believe we are living a kind of middle age are of technology where there are lots of things we dont understand and we do not want to understand because we just choose to have feeling over-engineering, feelings over science, feelings over reality, feelings over sense.

Wrong values

Do not get me wrong. Collaboration matters, listen do your work-maters matter, however we need to be able to apply the right values. Otherwise, we will have very poor and mediocre results. For instance, it's important to everyone has a voice, for sure. But if you are saying 1 + 1 = 42. There is nothing to argue, there is no reason to listen and fulfill bullshit and fantasy. That's the big issue I see going one now, everybody wants to add value to the table, which is great but very feel and studying and doing the homework properly to do it so in the way that makes sense.

So going back to the values, what really matters? Have the FAKE sense of Adding value and being right and have an opinion or LEARN and do the right thing? Agile and Lean are about Effective Learning. In order to learn we need to be humble and say "I don't know".

Science-based movements

Deming was a statistician and Lean end up rasing from the manufacturing floor. Lean was always in favor of Data. Data Science is. In Data We Trust! Amazon, Google, and several SV companies are Data-Driven. DevOps is about data and is about proper learning.

Lean Startup is about experiments and assuming you dont know and you need to validate your assumptions with experiments. Product discovery goes on the same track, we need to validate our ideas with several experiments like User Surveys, Landing Pages, A/B/N Testing, Wizard of OZ and so on and on.  Functional Programing is based on Math. All new languages have functional programming concepts that are going more and more into the rabbit hole.

How to Improve? 

If you are an engineer get back to the basics: Algorithms and Data Structures, they matter, stop trying to fix everything with a relational Database and some old OOP language. Software Design matters and if you did not read it yet I recommend read the Philosophy of Software Design. If you are a Software Architecture you need to make sure you have clear and real use cases and do proper Trade-Offcs, Pocs and benchmarks to make sure you are on the right track. 

If you are a discovery professional like Ux or Lean BA you need to make sure you apply science in your experiments and follow the scientific method. If you are a manager do not manage by common sense in numbers, understand why something happens, work with RCAs, 5 whys and system thinking tools. Increase your talent density and hire engineers with a science mindset.  More process and control you have, more slow your system will be and worst results you gonna get. Sharing is caring, make sure information flows and there are regular training, Lighnigh talks, Dojos, Hackathons, Code Rethreads, Host meetups, and incentive open source commitment.

Cheers,
Diego Pacheco

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java