It took me couple of decades to realize something: I hate Software Development! It was not what I expected at all.
I still remember when I was a young student, realizing I could do so much with code. The juicy problems I could tackle and solve. See my thoughts becoming real after hours of banging with my head against the wall. It was a huge sense of accomplishment. I loved it!
Fast realized it was not enough. I had to be part of a Team. I should produce code more simple and readable, so others could understand it better and faster. I should not solve all by myself, instead use Design Patterns, because it presents better solutions. I should write the tests before the code and make the code testable. The rush from jump head-first into the problem, slaying it heroically, was forever lost.
No matter how much I read and research, I keep finding gaps in my knowledge. One knowledge gap I never manage to overcome was UML. UML crossed my path so many times and despite my efforts, I never succeed to apply it professionally. I must say, when I first heard about Agile, I thought it was the end of UML. I was so relieved for never dedicating enough time to it.
Agile hype started to pass. Empowerment shows its dark side. It was never about having more power, but more responsibilities. It’s no longer about the Team, but what’s best for the company. Developers are responsible for the Software Development and cater for its future. This scope made me realize something was missing. Some questions about Agile were not answered: How to incrementally build a system into a considerable size in a feasible way? How to make it easy to change constantly?
In a incremental development environment, system architecture should design to be easy to change in the future, without compromising the current design. It is very important for the system architecture to be kept clean and readable as possible. Clean and readable at such high level of abstraction? At a low level of abstraction it is easy to understand, but at a high level? Yes. For example, diagrams are a great way to describe a system architecture. It’s easier to understand the whole system, without getting into details, helping us to make better decisions. Oh no… UML became more important than ever.
Here I am, many years later, revisiting UML. Going back to books I so quickly dismissed. Filling in yet another gap I found in my knowledge: documentation. Documentation in Waterfall is so much easier: document everything to the bare minimum, in advance, only once. In Agile, you document just enough, Just In Time, planning for future changes you have no idea of.
I came a long way from the programmer, solving hard problems writing code, to the software developer that reads books, writes documentation, codes using “recipes”. Am I a better developer today than 20 years ago? No doubt about it! To be honest, I would never hire my “programmer” version. But it was so much more fun…