Ebb and Flow in Large-Scale Agile Development

Share:        

I’ve found over the years that projects progress in ebbs and flows. This post talks about some of my recent experiences at work.

We’re using the Scaled Agile Framework, and the release train I’m a part of is coming up on the end of our first potentially shippable increment (PSI). While this isn’t the first time the company has used SAFe, this project is larger in team size and scope than the previous one. We’re also trying to coordinate the efforts of a more diverse group of teams. We’ve invited Operations and Infrastructure to join the party, and the effect of spreading agile methodology through the company is contagious.

From the euphoria of our initial planning session, we have been reminded the last few weeks that choosing a dynamic approach to project management does not eliminate hardship, it just makes it more visible. I’ll mention a few examples.

Pushmi-pullyu

Early on in the PSI, I received some mixed signals from management. I’m a rare switch-hitter: I have strong development prowess, and I have strong grassroots agile transformation experience. Sometimes, employers have trouble reconciling the two. I end up feeling like a pushmi-pullyu from Doctor Dolittle. One day, I hear that I should stop being distracted and focus on delivering code. A few days later, I’m asked why I haven’t contributed more to an agile process initiative. After talking with senior management, I’m glad to say that for this upcoming PSI, I think I’ve worked out a fair balance. I’ll continue to chair the agile community of practice, and I have some bandwidth to help see some projects through.

This PSI doesn’t look like we expected. We’ve had a number of technology discoveries that have changed out thinking about the platform. As a result, one of the core teams on the release train made an early course correction that took the final result far afield of what we predicted, but ultimately will result in a better platform. There has been some team member churn as well. And coming into this new PSI, grooming has been a challenge as the product owners and stakeholders feverishly incorporate new findings, re-negotiate scope and generally work to get incoming features to a manageable size.

We felt the pain of some missing ingredients this PSI as well. For example, we learned that the choice of automated acceptance test frameworks like FitNesse and Cucumber can be contentious, bordering on political, which has slowed adoption. In other cases, it was poor timing. At the start of this PSI, the Solutions Release Team was gathering requirements and wasn’t ready for us, so we had to make do without a unified automated acceptance test or continuous integration strategy. And, some key infrastructure proof of concept work did its job in finding out that the anointed solution won’t meet our needs, but it left us scrambling to implement plan B.

I’ve also lost some confidence that I fully understand what our team is building. Yesterday, our enterprise architect talked about his vision for the platform, and as I heard him describe his vision for the SOA piece – the piece my team is responsible for enabling – I realized that we were in trouble.

The vision has always been that our team of two now would be providing the “cars” for the company’s information superhighway, making it easy to expose business functionality to internal and even external callers. Based on what we knew, we decided to implement some commodity functionality in our platform by leveraging the web platform, for example invocation logging through request handlers or filters.

However, in said conversation we learned that there is also a need for our deliverable to be consumed by legacy applications to connect with platform services, ones that run outside of a web service context. Hence, we’ll need to spend some time refactoring our design to separate the service interaction pieces from the hosting pieces. (Note: A System Architect hasn’t been identified for our release train, a role designed to mitigate this situation. It’s a risk I identified but omitted from the article. Thanks to my fellow agilist Holger from Google+ for pointing that out.).

I realized today, though, that this is all part of the ebb and flow of software manufacturing. These are several interrelated examples of inspecting and adapting. The issue is not that we built the wrong thing, it’s that we went so long without knowing that it was the wrong thing. To adapt, during our team retrospective today we talked about ways to close the feedback loop with client teams and that enterprise architect. And, when I look at where we are as a whole at the end of this PSI, we certainly have made a lot of progress and delivered on all our commitments, even though a couple of them were delivered with a modified understanding of the deliverables.

I think we as a team need to stay calm, stay the course and get through these teething troubles. All of these issues are temporary, and I believe the communication and understanding mistakes will lessen over time. I believe in the end vision of the platform and hope that the company will give us the time we need to gel as a release train and build up some successes.

There are hopeful signs on the horizon. For example, the Solutions Release Team will be joining us this PSI – I’m really excited to incorporate early integration into our platform components. And I am glad that I should be able to take a stronger coaching role this leg of the journey.


Doctor Who RPG in Fate, Actual Play report: First Two Sessions

Share:        

This week, I just finished playing an introductory Doctor Who scenario using Fate Accelerated Edition with my teenage kids. We had a blast, and I just had to share our actual play experience. Note: This post is an edited version of a forum post made on Google+, in case you saw it there.

Using the utilitarian rules I posted earlier, my son chose to create his own Time Lord named The Protector. The most common aspects he invoked were Savior of the Universe, Thinks of Others Before Himself, and I Have a Trustworthy Face, though Protector of My Feelings got compelled some. His main attribute is Quick, and he really lived up to that.

My daughter chose to play a modern-day British woman named Hannah Holmes, who lives in L.A. and is an avid hunter. Her favorite aspects were Hunter: The Weirder, The Better and Younger than Most, but Good. Being Clever, she got good mileage out of her stunt, “Because I grew up hunting with the Winchesters, I get +2 when Cleverly attacking when I’ve just been attacked.”

Episode 1

The scenario Setting the World on Fire starts with an attack on a young George Washington. The Protector and Hannah Holmes dashed after the attacker. As they ran across a stream in pursuit, a set of soldiers engaged them to allow the assassin to escape.

When danger beckoned, she declared that as a hunter, she probably had a knife on her and use it to neutralize a set of mooks. Being Doctor Who, there wasn’t much blood. The fight ended when The Protectors knocked the last couple of mooks into the nearby stream. Meanwhile, the villain got away.

They were in over their heads due to some poor rolling, so they decided to get the Doctor to help them. My son insisted this scenario happened before the Time War, but they couldn’t decide which incarnation to pay a visit to. The Protector landed the TARDIS at the ending of the Five Doctors, which was a clever way to get me to decide. I ended up having the Second Doctor help them overcome the hurdle they were stuck on before the Doctor had to get back to his own situation.

In the end, the Protector and Hannah figured out a way to get history back on track and almost took on a historical personage as a Companion. It really felt like a Doctor Who episode.

I’m being vague about the scenario itself because I hope to play it another time or two – probably via Hangout – before I release it into the wild.

Episode 2, Session 1

The next night’s session got off to a slow and shaky start. Since I didn’t have an adventure planned, I helped the kids do some brainstorming. My son took the lead last time, so I asked my daughter her opinion. We ended up with quite a few elements to work with. We discussed several more, but these are the ones I honed in on:

  • Clockwork Men (from Girl in the Fireplace)
  • the French Revolution
  • her character’s best friend Dean Winchester, a modern-day ghost hunter who always carries salt, the one she is travelling to search for

I took a quick break and did a little research. I decided to set the story in Mende, France around the year 1794, during the height of the French Revolution.

With some simple internet searches, I found the ghost story of Lady Pennyman, which:

  • is set in the French Revolution
  • involves the exchange of money for a large lump of “silver”
  • a rumor of “the Haunting House”

I thought to myself, that’s a perfect Doctor Who episode set-up. For setting and feel, I drew some inspiration from two films, Brotherhood of the Wolf and Chocolat. Whereas I thought that Le Pacte des Loupes – as it’s known in French – would be the primary atmosphere, it turns out that Chocolat was more informative.

The players weren’t as engaged today and seemed a little lost, so we didn’t get very far, but there were a couple fun exchanges, so a good time was had. I need to remember that I need to provide them more structure, that they thrive better in more guided adventures like last night.

So it was that our Time Lord, The Protector, and his Companion, Hannah Holmes, who were travelling in the TARDIS after having saved the day last episode. An alarm sounds, telling of unusual artron energy readings, a side effect of time travel.

Lots of artron energy can mean unsafe time travel and could create a rift in space-time. (One that could bring a modern-day ghost hunter into the past, say. Or destroy the universe, something that’s keenly interesting to the self-proclaimed “Savior of the Universe”.)

The Protector used a once-per-session stunt on his TARDIS to declare that he had some kind of artron energy meter. Detector in hand, they landed. (My son says his “New Age” TARDIS makes the sound of an elevator bell when landing. Reign of Terror, rural France, 1794! Ding!)

They left the TARDIS and started walking through the village of Mende, but their steps echoed on the cobblestones. There weren’t many people about. The Protector decided that it must be Sunday, so they headed to the cathedral to see what was going on.

The only one they found there was a priest taking care of the sanctuary. For some reason, they were keen on getting some period clothes, so with a little rolling, I gave the travellers period garb.

The priest told them most of the people were by the riverbank at a gypsy fair. (Think Chocolat.) There was a man who was happy to let them in for two francs. They had no money, so they wondered what to do.

As they discussed it, the Protector said, “I have 16 PhD’s. I’ve got this.” Hannah Holmes retorted, “Well, I’m from L.A., so shush.”

The Protector tried to invoke his “I’m not human” aspect and asked whether there was a gallows nearby. He got Hannah to help him hang himself, but because of his bypass respiratory tract, he was able to breathe normally. While impressive, the gate attendant was unnerved by the display and didn’t want to have anything to do with the Protector.

In the end, Hannah Holmes managed to traded her salt for admission, and they got in. They looked around and saw various vendors, food, minstrels, and the like. I described it as being akin to the local Renaissance Festival, although there were only a dozen or so wagons of wares. They reached the end of the fair, and found the gypsy’s living quarters.

The Protector decided he had to see inside the tents, because there could be a time machine there. He tried to push his way past a burly guard named Pierre, but that started a shoving match. Hannah Holmes pulled the Protector off, but not before Madame Marie came and spoke to them.

This led them to come to her tent later, ostensibly to have their fortune read. They immediately got a different feeling in the tent, although it was just velvet curtains and candlelight. Madame Marie only wanted one franc for Hannah’s fortune, but they still had no money. The Protector told Madame Marie, “I have a cloth – FROM THE FUTURE.” We all just laughed out loud at that point.

Hannah Holmes once again came to the rescue and gave Madame Marie a gold bracelet. When she started handling the bracelet, Madame Marie started getting a name… Dee, D-something. Dean. And that’s where I ended tonight’s session.

It’s unlikely we’ll play again until the kids come back from their mom’ parenting time, so the next episode will likely be in early to mid-October.


AsciiDoc revelation

Share:        

I love Asciidoc. It is akin to Markdown, but it provides more functionality, particularly when it comes to transcoding. You can take an AsciiDoc file and turn it into an HTML file with extensive CSS theme support, PDF, DocBook XML file, eBook – many more possibilities especially when using the Asciidoctor rendering engine.

Sublime Text icon

I also love Sublime Text. I looked for a replacement for TextMate for a while, and a co-worker turned me on to it. It’s very flexible. Far more flexible than Notepad++, which is what I used at work for text manipulation. I love the fact that you can extend the editor very easily with Python and JSON configuration, though it has enough support on github that I only have needed to use Package Control to install the extensions I needed, such as one to escape and de-escape XML entities.

Despite that, I had been disappointed by its Asciidoc support until I had a revelation today. I’ve been lamenting that the Sublime Text 2 package for AsciiDoc didn’t seem to perform syntax highlighting in version 3, which is effectively in beta. I went so far as to do some research today to try to port the version 2 package to version 3.

In doing so, I sheepishly realized that syntax highlighting in Sublime Text is dependent on the color scheme you choose. And sure enough, my color scheme Monokai doesn’t have support for the style definitions Asciidoc uses.

Fortunately, the one I use at work, Sunburst, does. As soon as I changed schemes, it was – well, a burst of sunshine. Headers pop, text highlighting is visible. Triumph!

I feel foolish for not realizing this before. I kind of wish the console would show warnings like “I, as your color scheme, am ignoring this style I don’t recognize”.


Lessons Running a Coding Dojo - Five Weeks In

Share:        

dojo

After posting about coding dojos a year ago, I have one started at work. We wrapped up our fifth session today on the bowling game kata by Uncle Bob Martin.

Overall, the experience has been wonderful. I’ve gotten a number of encouraging comments each week, and we have a number of regulars who attend. The survey I sent today affirmed my anecdotal evidence – very positive feedback. Also, I’ve gotten to know a few programmers in different departments that I normally wouldn’t interact with.

I have learned a few lessons I wanted to share, for those of you who are considering starting their own:

Start Slow

When I was first learning the kata, it took a long time to produce it. I wanted to be able to do it from memory before I did it in front of the group the first time. While that was good from a presentation standpoint, it was not from an audience point of view. I introduced a number of keyboard shortcuts which I later found out left people lost. And, although I don’t feel like I type fast, I apparently type faster than I should when leading a class. It took me a few sessions to understand that I needed to slow down some.

Encourage Participation

It’s taken a few sessions for people to feel comfortable sharing that they had questions about a certain piece, that they were falling behind, that they didn’t get it, or even to show off a neat new approach to the problem. I hope to continue to foster a collaborative atmosphere, but I have additional work to do to make participants feel comfortable contributing.

Food Helps

I run my dojo Tuesday mornings. I got the company to sponsor breakfast the first two sessions, but since then, we’ve been foregoing breakfast. While attendance is still about 8-12 people a week, we lost a few people. And, I find that breaking bread with your fellow man helps break down barriers and make the group more cohesive. So, spring for bagels sometimes.

Repetition is the Key

The format I’ve used is to demonstrate the basic kata for the first half hour, then show a variant the second half hour. Last week, I did the kata as a paired programming exercise. This week, I got people to talk about the variations they came up with. This way, people who attend frequently get something new out of it each time.

By repeating the kata at the start each time, it allowed us experienced folk to warm up and the new people to join right in. I encourage newcomers to pair with people who know the kata, although our company doesn’t have a strong pairing culture – something I’m hoping to foster in the dojo.

Please share your experiences in the comments, and contact me with questions or if I can help you start your own coding dojo.


Get the Gist

Share:        

Recently, I discovered Gists, a code snippet publishing platform by GitHub. In fact, a Gist is essentially a one-file GitHub repository.

I published two Gists recently. The first is a C# code sample of an ASP.NET Web API service that uses AttributeRouting. I found some examples of each piece, but not in combination. It took some time to get it working, so I thought it was worth sharing.

The other is a build script for the Sublime Text editor, which renders an AsciiDoc document in HTML on a Windows system. It was inspired by this user’s gist for a Unix system.

If you are looking for a quick way to share a code snippet, Gists are a good choice. Likewise, if you are looking for something similar to Markdown that’s more fully featured, Asciidoc may be the thing for you. Not only can you generate HTML, but it can be used to produce LateX, PDF and DocBook documents amongst others.