Archive for the ‘Software Development’ Category
Balancing craftmanship and methodology
Carlo Kruger commented on my last blog post with reference to Martin Fowler’s blog post which is a concise view of a crazy blog and twitter war around software craftmanship. For some reason, Carlo thinks that my last two blog posts (here and here) fall into this space. Either Carlo is baiting a hook for fun
or he misunderstood me. Nevertheless, my dear friend, I shall reply.
Martin Fowler and Dan North put the customer’s derived value from the software as the focal point. The craftmanship movement puts the code that derives the value as the focal point. I don’t feel comfortable about either. It is unbalanced. We always need balance. So, what will provide an equally powerful balancing force to either of these two focal points? I think it is the economic viability of the code base.
In Let scrum die, the key message is that Scrum should not be the end goal but a means to get somewhere better. At some point it will outlive it’s value and I propose a moment in time when that will happen, and one way to force this (i.e. plan the exit of the Scrum master). I also describe “talented developers” which, perhaps, feels like a craftmanship-esque thing. It’s not about that at all. It’s about the balance that is described in the next to last paragraph: developers will represent the interest of the customer, and the code base is under control (i.e. it is economically viable). Balance the focus of methodology with an the economic viability of the code base.
In You can’t let Scrum die, I draw attention to this lack of balance that leads to complacency. I mention two craftmanship things to do with the code – remove duplication and express intentions. Again, it’s not about this alone. It’s about the balance that is needed. That balance is described in the next to last paragraph: look at yourself and look at what you create (i.e. the code base). The reason why I say look at the person next to you is because the economic viability of the code that you create will affect that other person also, including the entire organisation and its customers. Balance the craftmanship with the methodology which is balanced by the economic viability of the code base. This reduces to balancing craftmanship with the economic viability of the code base.
There is one area where I don’t know of a powerful enough balancing force. In Politics of Software Delivery, I draw attention to organisational power grabbing that will always result in non-delivery. I suggest raising the importance of the delivery value. But I think this is still too weak a force to balance the power battle. I don’t know how to fix that one.
Footnote: Jimmy Nilsson reminded me of an article he wrote about why TDD, Refactoring, DDD, and all such things matter.
You can’t let Scrum die
In my last post I said we should let Scrum die. We can’t let Scrum die. It doesn’t behave like that. It will only die off its own accord if we die first and then it dies because it has no reason to exist. So you got to kill it. Here’s why (again?).
Software development is about people and the way people work alone and together. People create code in software development. Without that code, these people don’t exist; they have no purpose. Code is the creation of the people, and people live off this code. When the code is good, then life is good. When the code is poisonous, then people start dying slowly. When the smell of death is in the air, they look for help. Some stare into the mirror called Scrum. They see themselves and the way they behave. It’s an ugly sight. They realise that they should behave better. After all, software is about the way people work alone and together.
Regularly looking into the Scrum mirror, they improve their behavior over time, and everyone is happier than the moment before. That’s a nice view. Just look in the mirror and it looks good. Very rarely do they also look again through the window into the fields of code that feeds them. The poison is still coursing through their veins. They will die, eventually … by the host that they created that was supposed to nourish them. The only way to survive is to deal with the fields of code. Get rid of the toxins. There are two fundamental ways(*) that you can get rid of toxins: (a) eliminate duplication, and (b) make the code as you wish it to be.
If they just stare into the mirror and hardly ever look out the window, they will just exist on the plateau of complacency. In order to avoid that state of being, they need to focus on the fields of code. The urge to look in the mirror is strong, and as useful as it was, it becomes a very unbalanced state of existence.
So, look in the mirror, but look through the window too. Create fields of code without toxins so that you provide nourishment for the next person. That is ubuntu coding.
Actually, the only mirror you need is the person working next to you.
(*) Think deeply about these two fundamental things and try it out. Everything else will fall into place from this. For example, the act of eliminating duplication forces you to consider where to locate a single piece of code, how it should be used and where it can be used, etc. That is design and architecture. With duplication, you don’t need to consider any of those things. That’s toxic.
Let Scrum die
I live in Cape Town, South Africa. Apart from the great beaches, a mountain in the middle of the city, good food, and good wine there is a feeling of enthusiasm for agile software development in this town. It’s been around for a while but really started getting all hot and sweaty with the Scrum wave. I estimate that it’s been at least 2 to 3 years since some teams in Cape Town adopted Scrum. Of course, there are teams adopting Scrum in this community every year. That’s all good, but I’m afraid it’s shaping to be just like Table Mountain.
Regardless of the hyper-performing tagline of Scrum, each team settles down to something with which everyone is comfortable. The big change that has happened is that of changed behaviour. Scrum does that – it alters behaviours. When everyone plays by the rules (i.e. they behave consistently) then you don’t have chaos. It’s better than better – it’s just nice! It is very comfortable. But I see signs of chaos not far away again. This is what is happening and it is almost without exception here in Cape Town. Some are off the table top already.
Let me make the Scrumvangelists feel better for a brief moment. Scrum won’t kill you - directly, but your adoption of Scrum can kill you if you ignore one thing – your code base. It is a code base out of control that leads to certain death, and Scrum won’t be the saviour this time. Bringing your code base under control is not easy. It is all about architecture, design and changing your style of development to live the principles that end up characterising good code. I don’t need to tell you what you need to do. It’s been told so many times – TDD, refactoring, continuous delivery, single code base, etc. At the code face it’s SOLID and DRY and lots more.
The plateau of complacency is an interesting place. We may think we are collaborating but in reality we have just found a way to work together without causing chaos. I call it co-operation. It’s just keeping chaos under control so that we can make the sprint, again and again and again. A sure sign of being on the plateau is when we can’t get rid of our Scrum master. When we work the Scrum master out of the system, then the team will need to take on more on it’s shoulders.
A major limiting factor to get off the plateau will be the people on the development team. Hyper-performing teams have talented developers(*) that are able to design and express that design in code without breaking their principles. A team that is unable to bring a code base under control will compensate by leaning on a scrum master for support.
In the journey of dramatic improvements to bring your code base under control, there are few things that you should take notice off.
- An architecture will emerge that supports the design of the resident parts. Things fit together beneficially.
- The code base will get smaller and the team will shrink to about 2 or 3 people.
- Each developer will take on greater responsibility and will find it difficult to break core principles. The act of living those principles will result in a values that don’t need to be listed on a poster on the wall.
- The scrum master will become redundant.
- The product owner will do more by working directly with the developers.
Then you won’t need Scrum, because the code base is under control, developers represent the interest of their customers, and the bottleneck is now at the customer.
Am I being idealistic? No, it’s about pragmatic decisions and the pursuit of freedom. It’s hippie Scrum.
(*) By talented I mean developers who have the ability to communicate, share, solve problems simply and elegantly, and can sniff out bad design and architecture. Talented developers are not code monkeys that can churn out code. Their single differentiating trait is the ability to design well and express that design in code.
The politics of software delivery
Software is all about delivering something useful to a customer. That’s it – nothing else. Politics is about acquisition of power. Nothing else matters. Now mix the two together. How often have you heard a developer say something like “It’s not my problem, it’s just politics”? That poor developer doesn’t stand a chance. Imagine trying to deliver software while there is a raging power battle going on. I don’t think software delivery stands any chance of success in that battle. In fact, software delivery just becomes a tool for the politicians.
When someone is plotting for power, nothing else matters, not in the least software delivery. I’ve been there and done that. It’s just messy, soul destroying stuff. These days, I look for the power battle and try to focus on software by raising the delivery stakes to higher than the power battle. If I can’t do that, then the software was never the focus in the first place. Then I recommend pulling the plug. Regardless, that’s my cue to leave. Not because I am a coward, lacking courage, but for the simple fact that those power grabs are completely meaningless, except for the power-hungry.
As long as there is a political game being played, you simply won’t deliver software on time, on budget and keep customers happy. BTW you can just forget about collaboration too. That space will always be filled with contempt.
Let me put it another way: Any attempt at being agile in a political environment will always lead to failure. While you are trying to learn, others are trying to gain power. It doesn’t work!
A coach walks into a bar …
One day you are faced with a problem. You succeed or fail in solving that problem. It doesn’t matter. Time passes. You meet someone who paints a picture which has some parallels to what you experienced. A few possible things can happen.
(A)
You tell them about your experience. They listen. They ask questions, you answer, talk, listen, listen, talk …
(B)
You ask them a question. They answer, question, answer, question, answer …
(C)
You chat. It is not anything like your problem. Chat, chat, chat …
Given each scenario above, when are you a coaching? When are you being coached?
My view on coaching is simple. We oscillate between knowing and not knowing so often that it doesn’t matter who is learning from whom. It does not matter !! In any given context, you are either a coach or being coached based on what you know. You fluctuate between these extremes many times in a conversation, in an hour, in a day, in a lifetime.
This is part of my quest for balance through the work that I do. ”Coaching” feels one directional, a fabricated “us and them” labeling of people. That is an unbalanced state of being. Learning is a balanced way of living.
And if you have not yet figured it out … agility is about learning, learning is about living, living is about being in the present, being in the present is about embracing change, embracing change is about being agile.


