On July 16, I will give a talk at Agile Breakfast Luzern on Steering agile architecture. Here is the abstract:
"Emerge your architecture" goes the agile mantra. That’s great. Developers get empowered and fluffy papers make room for real code structure. But, how do you ensure the cohesiveness of the result?
Testing, pair programming and code reviewing are the proposed means to approach this problem. However, testing is only concerned with the functional side of a system, and thus, it is not able to capture structural contracts. Pair programming and reviewing work well in the small, but they do not scale when you need to handle the millions of details entailed in modern systems.
The architecture of the system is important and it deserves special attention because it is too easy for it to go wrong in the long run. In this talk we sketch a method of approaching this challenge on a daily basis by:
- making architectural concerns explicit,
- crafting automated checkers,
- agreeing on findings, and
- distilling corrective actions.
Why daily? Because architectural integrity is about the most important long term technical asset you have.
This process requires a new kind of infrastructure and associated skills that enable you to craft checkers fast and cheaply. However, this is a technical detail. The critical benefit comes from making architectural decisions explicit, and from the daily actions of cleaning the state of the system.
This talk is targeted to both engineers and managers. We cover the basics of the process, and we accompany the conceptual descriptions with real life examples.
Let me tell you two stories.
Our children are born abroad. As foreigners, we had to get through extra formalities to obtain their first residence permits.
This process required us to first obtain the Romanian passport. With our first born, producing the Romanian passport was delayed for various reasons, and at some point the Swiss authorities sent us a warning letter. So, we went to the alien police and explained that we encountered delays in the process. They told us that we should provide them with some proof to confirm that indeed the Romanian formalities are so lengthy.
We went back to the consulate to proceed with the passport formalities. There, we were told that there were so many enquiries that we need to wait for 3 months just to be scheduled for the official photo shots. There was not much we could do about that, but at least we wanted a little piece of paper saying that it takes so long:
Me: "Could you please provide us with a piece of paper stating how long the formalities take?" Lady: "No, we cannot do that."
Me: "Why not?"
Lady: "Because we are not allowed to sign papers like that."
At this point, we were a bit stuck. Then I had an idea:
Me: "Ok. Then could you please write me a little reminder on a piece of paper with the date on which we are scheduled for the photo?"
Lady: "Oh, sure."
Me: "Now, just so that I do not forget, could you also say next to the date what the purpose is?"
Lady: "With pleasure."
Me: "And now, could you also put a stamp on it?"
Me: "Yes, I see that you have this stamp next to you. Could you just put it on the paper?"
Lady: "Hmm ... Ok."
And we got our official proof that we could send to the Swiss authorities. When I phrased the original request, it appeared unacceptable, although I still do not understand why. But, when I presented the same problem from a different angle and split it in little steps, it was perceived much differently.
You might say that this behavior can be found only in bureaucratic environments. Let me tell you the second story.
Last year, I passed by Gelateria di Berna, our favorite Bernese ice cream shop. I stopped by to get some takeaway.
As I was standing in line, I realized that I only have 10 CHF. The problem was they only have takeaway packages of 14 HCF and 18 CHF. Other than these, they serve regular portions to eat on the spot for 3 CHF and 5 CHF.
I got to the counter: Me: "Look, I only have 10 CHF, but I really would want to get some ice cream for takeaway. Would it be possible to fill only half of the 14 CHF box and I pay for it 10 CHF?"
Seller: "No! We only serve the standard packages. But, you can buy two small portions that you can eat here."
Me: "Hmm, but I cannot really transport these home."
Me: "Then, could I buy just an empty box?"
Seller: "What do you mean?"
Me: "Just the empty box. I give you 2 CHF for it. I am sure it is not worth more than that." Seller: "Ok, I could do that."
Me: "Then could you put in there a 5 CHF portion and a 3 CHF portion?"
He did it, and I had my ice cream to take home. The objective problem did not change a bit. The only thing that changed was the presentation.
These are not trivial examples as they relate to the main business of the characters involved. These people were dedicated to what they were doing and they wanted to do the right thing. We can argue that the focus was wrong, but still, they were not guided by ill-will. And, these are not examples of stupidity either. These are examples documenting that the stories we tell ourselves have a critical influence on the way we perceive and act in the world.
Presentation matters. It’s up to us to see both the power and the responsibility that comes with it.
We are happy to announce version 5.1 of the Moose Suite:
This is a minor release. The key highlights are:
- It is based on Pharo 4.0.
- Roassal2 comes with several new builder, most notably the new Mondrian builder (RTMondrian) and the chart drawing engine (RTGrapher).
- GTSpotter has preview abilities and was extended for multiple search use cases including the navigation through Moose models.
- GTPlayground was extended with sharing possibilities and transparent backup.
- GTExample now offers support for documenting classes with example instances.
- Moose Finder and GTInspector come with more custom presentations.
- PetitParser has seen performance corrections and has been extended with the ability to parse whitespace languages.
The Moose Suite 5.1 comes for each platform as a separate bundle:
The Moose Suite 5.1 can also be loaded in a Pharo 4.0 image either from the Configuration Browser, or by executing the following script:
smalltalkhubUser: 'Moose' project: 'Moose';
The Moose team