… hasn’t been found yet in the case of software development.
We used to say that a good singer could sing the phone book without boring his or her audience. Nowadays, I feel like a good test for singers would be to make them sing all the Agile acronyms without putting our managers to sleep. Or when your tired at night, instead of counting sheep, recite the acrony… Zzzzzzzz…
In the past couple of years, we grew so fed up with the classic waterfall model of software development that we started shooting in every direction at once in the search for the right way to develop software.
We have Agile development, with short and fixed iterations. Then Lean software development came about a said to hell with fixed iterations! We do it like Toyota is doing it (so much so that I actually wonder why they didn’t call it Toyota Software Development, or TSD in short.) This is where a lot of our Agile terms come from, by the way. If you ever wondered what was up with all the Japanese terms in our field today, they come from Toyota: Kaizen, Andon, Kaikaku and Kanban are the ones I’ve heard the most, but there are about 10 others.
Sprinkle all of this with a bit of DRY, POCO, SOLID, DSL, BDD, TDD, DDD, IoC, MVC and PVC and you get a giant pool party where only the smartest ones that have had time to research all this are invited. It is our own Playboy mansion party!
It’s like being 15 all over again
It seems like we are entering our teenage years as a community. We are going through our identity crisis, trying to figure out who we are. Is writing software like building a house, or is it like manufacturing? Maybe it is like growing a garden? It’s probably none of those things. We don’t know for sure and these days, we are sticking with the manufacturing metaphor. Maybe in a couple of months we’ll think coding is like being in the police: you take your problem and circle it, make sure you have your snipers into place and don’t let any bug escape!
Eventually, however, we’ll start settling down in the same way other, more ancient fields have done. Engineering has it’s own set of rules and guidelines, and so do the people in manufacturing and construction, lawyers, cooks, doctors and party planners. They’ve been through it before. In the meantime, being teenagers, we get excited by the new stuff: “this new watchamacallit is soooooo gonna replace Kanban boards!” But it the end, we need to show restraint.
What has been very hard to me recently was how to learn everything and how to use the new methodologies. Behavior Driven Development and Test Driven Development, for example, are two ways of driving your development. There can be only one driver, however, so which one is it? It seems like BDD has superseded TDD and is the way to go. Thank God I skipped TDD!
I also started learning Domain Driven Design to be a better designer. However, the methodology calls for a lot of coding *while* you design your model. Ooookay, so do I have to code using BDD? I guess I could! And where does Activity Modeling fit into all this? Hmmm, I could use it to help me figure out my model. But where do DDD and Activity Modeling meet? At what point do I switch from designing the user experience to designing the domain model? I know they overlap a bit, but not completely. Do I use DDD to create my model layer and the create the app and UI layer using activity modeling and user stories? And can you use a Kanban board if you do DDD?
Etcetera…
This stuff is hard and people can’t do and test everything out. Some methodologies are known to be incompatible and some might repel each other, except that we don’t know it yet! Some very smart people are doing the hard work of figuring it all out and mostly end up saying that “you don’t have to follow every methodologies to the letter.” Great, now we can mix and match to circumvent things that won’t work together. What’s more, each team is different. What works somewhere won’t work everywhere. We need to adapt.
God damn it, I feel like a freaking headless chicken right now! Nobody has a perfect answer, everyone is still searching and every branch has its own dedicated evangelist saying that their way is THE way. I almost want to give up. The waterfall model seems so attractive compared the junk yard of methodologies in front of me…
Let’s make this work
Okay, let’s see. What have we got here…
Here’s what I know:
- Coding takes time: a loooong time.
- Coding always takes more time that you think
- Coders are a constraint in the system. Software cannot be shipped faster than coders can code.
- Modifying code is hard
- Programmers and users never seem to understand each other
Being a constraint in the system, coding must at all costs be protected so that it never stops. While this is all good in theory, it won’t be so in practice because we have to talk to our users, fix build servers, etc. This is what I like about Lean development: the idea that one must look for waste and get rid of it. In my mind, waste is anything that slows down development, like interruptions, waiting for customer response, waiting for DBAs, business analysts or managers. All of this waiting should be minimized, and any technique that helps you do that is good.
Oh, and why not throw in some good design practices in the mix? Your code should be easy to understand, easy to modify, easy to test and easy to reuse. Phew! Now for the rest of us mortals, try to make it as easy as possible, okay? Taking the time to understand code or being stuck when adding new features to unmanageable code: this is waste.
Another form of waste is the fact that users never seem to speak our language. This is why I love DDD. It helps develop a domain model and language in unison with the users. If done right, it increases the chance that the software will actually do what the users want! Novel, I know…
Hence, every methodology that I will ever follow will do the following:
- Protect the coder by minimizing waste, and
- Help users and coders understand each other
That’s it. The rest are just tools to help me achieve the above points.
It took since the industrial revolution to get to the way Toyota manufactures cars today. Software development is barely 40 years old. Hang in tight, it’s going to be a bumpy road.