Long term over short term.

Long term over short term.
The “yes we can” attitude you will also find back in the old cowboy coding teams. Lot’s of start-ups attract “yes we can” people. But that is not enough for being agile. We also need long term thinking.
Long term thinking in agile is best described in the 11th core commitment “Don’t do anything dumb on purpose
Some people have the tendency, when they look for a long term vision, to think about the perfect world. Oh, yeah, it’s nice to envision the perfect world.
Let me tell you about how my partner and I envisioned our future house. 10 years ago, on our holiday we did a “Begin with the end in mind” exercise. It helped to find out what kind of house we wanted. It worked because we did focus on a big vision and not on details. When we bought a house a few months later, the house had everything on our list. We did not even look at the list when selecting the house. We had a clear vision and we had internalized it. Part of why it worked was because it was the second time I had bought a house. (Third time if you count the house my parents bought after I burned down theirs.) I bought my first house alone. I never had discussions about what I wanted. (Who would I have these discussions with?) I forgot about aspects important to me (Being easy to reach was one of them.)
As long term vision for the new house, we focused on things that we would not be able to change later. Things like:
– close to a highway
– close to a train station
– close to a school
We did not focus on having a perfect house. We planned on doing some reconstruction of the house later.
so let’s come back to agile. I see people creating a perfect framework, for the sake of long term vision. Long term vision is not the same as implementing a large framework full of functions you might need in 3 years. In Lean we call this Muda (waste)
We consider it Muda because statistically we know that most of these functions will never be used.  Agilists use YAGNI (You ain’t gonna need it) for this.
On top of that I don’t know which part you are not going to need. I’m no better at predicting the future of your framework than a 16 year old who thinks about his future with a potential partner. Now I know that you are smarter than me. And you might think that everything I wrote about predicting the future is true for Joe developer but not for smart people like you. You are an expert in what you do.
I’m sorry to say that the more you are an expert, the more, it’s true. In his book The black Swan Nicholas Talib  explains why experts are bad at predicting an unpredictable future.
If you can not make a perfect framework, why am I talking about long term vision?
Long term vision is about making it possible that things keep working. For me that means, long term vision is about making it possible to change things later. Today this is typically done by  keeping your code clean, with tests as safety net.
Now personally I don’t mind about dropping a practice, as long as you find other practices that will support the same value of the agile mindset.
If you think that TDD is not working at your company for whatever reason, I’m OK that you drop it. As long as you make sure in another way that your code stays maintainable, and you find another way that tells you when you break things that work now. Then drop TTD.
For now, unit tests, integration tests etc are some of the best ways to guarantee this.
For me, it’s no coincidence that from all the teams I coached, the team that had most (+25.000) tests, was the most predictable in implementing new stuff. Of course your mileage my vary, and actually I’m pretty sure it will. This is how it worked for me at a team I coached. You are different, you need to find your practise to support long term over short term.

Update:Paul Sloane published a blog post with 20 of the Worst Assumptions Made by Experts. If you look at this list, you see that these people are(were) really top experts in their field. Bigger experts then I, and probably you will ever be in our field. And yet these experts made such wrong assumptions. That is why I say we should not make assumptions about the future need of our applications.

Agile practises that support long term over short term
– Unit testing
– TDD
– Continuous integration
– Continuous deployment
– Passionometer
– Scary idea protocol
– Far Vision

Books:
The Seven Habits of Highly Effective People
The art of possibility (Thank you
Books proposed by others:
Mastery: the keys to succes and long term fulfillment (Thank you Dadi Inggolfsson)
Clock of the long Now (Thank you Dale Emery)
The Way of the Bodhisattva: A Translation of the Bodhicharyavatara (Thank you Miles Parker)
Foundation  (Thank you Antoine Vernois)
A la recherch du temp perdu (Thank you Olaf  Lewitz)