Wednesday, November 28, 2012

If you happen to be a psychic: Quote of the Week

Just started reading Refactoring to Patterns.  Starts off with a good reminder that YAGNI.

When you make your code more flexible or sophisticated than it needs to be, you over-engineer it.  Some programmers do this because they believe they know their system’s future requirements.  They reason that it’s best to make a design more flexible or sophisticated today, so it can accommodate the needs of tomorrow.  That sounds reasonable – if you happen to be psychic.

Joshua Kerievsky, Refactoring to Patterns p.1

Look at the code you’ve written recently.  Were you pretending you’re a psychic?

Retrospectives and Local Maxima

 

Sometimes we feel like this:

image

We are at the top of the mountain!  We’ve climbed, we’ve improved and we’ve made local, incremental changes such that we’re not quite sure where to go from here.  We don’t know where else we could possibly go to move higher.

What we’re missing is this:

image

Yeah, there’s a higher point behind us that we can’t quite see.  In math this is a “local maximum” where we’ve found the “highest point” but only if we constrain the graph we are looking at.

So can we find a global maximum?  Or at least a higher local maximum?  Why can’t we see it?  And how do we get there?

Most retrospective practices (Stop/Start/Keep style activities) will generally get us incremental improvement and will usually lead us to these local maxima.  I’m a big fan of retrospectives and incremental improvement so I’m not bashing these in the general case.  We need to do this once we find a hill to climb, but sometimes we need to find a new hill.

So what can we do to find a new hill?  We need to shake up our team and give them a Jolt.  While I have several ideas how to do that, today I’m going to focus on one: Defining and Focusing on Team Values.

Team Values?

Whether you’ve defined them or not, your team has unspoken values. The value in defining them and talking about them is ensuring that there is common understanding in the team and giving a common language for the team to use.  The values give you a framework for decision making, especially around how you will execute. 

For example, if your team values “time to market” they might take shortcuts and hack something together but a different team that values “maintainability” may take more time to deliver, but will be more maintainable in the future.  (We can debate the relative merits of each of these and if they are really in conflict but this is just an example.)

Team Values Round 1

On my team, earlier this year we came up with eight team values.  When asked what our team values were, we struggled to remember all eight.  We didn’t really know how to focus on all eight or even did a good job of picking one to focus on.

Lencioni’s Value Model

In The Advantage by Patrick Lencioni he describes four different types of values.

  • Permission to Play – These are values like “integrity” that if you don’t have them, you’re not going to be around long anyway so they are really just a required baseline.
  • Core – These are the values that you currently believe in and embody as a team.  They are also central to what the team is and how they do things.
  • Aspirational – These are values that you want to have as an organization but you’re working on.
  • Accidental – These are values that the organization has developed but you’re not quite sure if you like them or not.

This, in some ways, is a Start/Stop/Keep (Aspirational/Accidental/Core) activity, but at a value level that makes you step back and take a wider view.  In our original list, we didn’t differentiate between different types of team values which didn’t give us a place to focus.

Team Values Round 2

So in a recent retrospective, I explained Lencioni’s model of value types and then challenged the team to refine the list to 5 values and classify them as either Core or Aspirational.

The concept of “Permission to Play” gave us a term to talk about certain values that were proposed and exclude them.  Using Lencioni’s model helped us to clarify why we wanted to certain values listed.

We started with the eight that we had originally come up with and I threw out several additional ideas including the XP values, the values from the Agile Manifesto and Software Craftsmanship Manifesto and other sources.

As a framework for voting and subsequent discussion, we used Fist-to-Five voting (we nick named it “Fist voting”) to decide if values were in or out and if they were Core or Aspirational.  While it might seem silly to quibble over such things, I often go back to this quote:

Often the true value of a thing isn’t the thing itself, but instead the activity that created it.

-Dave Thomas

I found the discussion and the clarification of thoughts and terms to be one of the most valuable aspects of this exercise.  We came to a better common understanding by forcing each other to clarify what we meant with different values.

One example of this was one of the original eight values was “teamwork”.  As we talked about it, it seemed like this might be “permission to play” or at least too broad and poorly defined.  So we debated about words.  What word or phrase would better embody what we really felt we had or needed as a team.

Eventually “Team Ownership” was proposed.  The team liked it but the team was split on whether or not it was Core or Aspirational.  This might seem trivial, but the divide produced a valuable discussion around what that really meant.  Half thought “well, we help each other out and pitch in when needed already, seems like it’s Core” while the others thought “we often have our own areas we’re working in and not really collectively owning all the code or even all the tests”.  Clarifying how we wanted to define Team Ownership drove us to decide it was Aspirational.

Now we have them… so what?

Once we defined what our values were, we used a variation on the Values-driven Retrospective.  Specifically we used the Believe Statement format (which is We Believe in [insert value], therefore we will [insert what we do]) to generate ideas of what actionable items to work on.  From there we used dot voting to narrow the field and decide.

The other value that our values has given us is the framework to talk about what and how we are going to do our work in a more focused way. 

I hope that this method can help you and your team to jump off your local maxima and find a taller hill to climb as a team.

Addendum

For those interested, our team values are currently (in no particular order):

  • Core
    • Learning
    • Testability
    • Sustainable Pace
  • Aspirational
    • Ease
    • Team Ownership

They actually ended up very similar to our first eight, but more focused.  As a side note, I fully expect to reexamine these again in the future.  As our team changes and grows, our values will likely need some tweaking.

Wednesday, September 12, 2012

Global Day of Coderetreat 2012: Utah Style

Global Day of Coderetreat (GDCR) is coming up on December 8th this year.

Don't know what Coderetreat is? Check out http://coderetreat.org/about

Don't know what GDCR is? Check out http://globalday.coderetreat.org/

Pluralsight (@pluralsight) and Ancestry.com (@Ancestrydotcom) are sponsoring two Coderetreats in Utah. David Adsit (@davidadsit) is organizing both (I personally think he's a little crazy for doing that, but David is a little crazy). They will be at the two Pluralsight offices (Layton and Lehi).

You can register for one of the two events below on Eventbrite.

If you’re in Utah County or South Salt Lake County…
Facilitated by Kay Johansen (@utahkay)
http://lehi-ut-coderetreat.eventbrite.com/
http://coderetreat.org/events/global-day-of-coderetreat-2012-lehi-utah-us

If you live further north…
Facilitated by Jim Cooper (@jimthecoop)
http://layton-ut-coderetreat.eventbrite.com/
http://coderetreat.org/events/global-day-of-coderetreat-2012-layton-utah-us

If you have any questions, please feel free to contact David or me directly or check out http://utahsc.org/ for more updates.

Saturday, September 8, 2012

Agile and the Chasm

In the book Crossing the Chasm: Marketing and Selling Technology Project, Geoffrey Moore discusses the idea that technologies start with early adopters and at some point must “cross the chasm” to majority.

At the recent Salt Lake Agile Roundtable meeting, there was a brief exchange on if Agile had crossed the chasm.

My thought (which is informed by recent experiences with the majority) is that the term “Agile” and some of the practices (Scrum/Scrum-like practices) have crossed the chasm but the values expressed in the manifesto have not.

What do you think?  What has your experience been?

Thursday, September 6, 2012

Does the Manifesto matter?

I recently had the chance to interview candidates for a position on my team.  I put together a list of questions that I believed would be a unique and effective way of phone screening candidates.  Without giving away the whole list (I may disclose it later), here are the first two questions:

  1. Tell me something about yourself that isn’t on your resume.
  2. Are you familiar with the Agile Manifesto?

I had two out of seven candidates that I phone screen answer in the affirmative to question 2.  Now not being familiar with the Agile Manifesto isn’t necessarily uncommon, I guess.  But the inconsistency came from the answer to the next question:

“What Agile practices are you familiar with and/or have used?”

I figured the answers would be “I haven’t used any”.  Because if you have done “Agile practices” you’d certainly know what the Agile Manifesto is, right… right?

BUT…

the answers were mostly in the “like, Scrum? Stand ups? Yeah, we do that stuff on my team.”

So… these candidates had presumably been introduced to the term Agile, to some Agile practices but hadn’t taken the time to investigate further, to understand the roots of the Agile movement, to do a quick Google search!  Granted none of them had incredible answers to the Agile practices question, but they did have answers.

I guess I just don’t get it.  I mean, I do.  But I don’t.

Would this matter to you?

Friday, June 15, 2012

CodeRandori.com and AgileCodeGames.com

I recently purchased these domains and while I have plans for them, I haven’t done anything yet.  So I decided to just have them forward here to my blog for the time being.

The plan for CodeRandori.com is to have a “one stop” resource for what a Code Randori is, how to facilitate and some example problems to use.

I’m not entirely sure about AgileCodeGames.com  I was thinking maybe to have a “Tasty Cupcakes”-like site but for coding games (like katas and randori and pairing games) but I’m not sure.

So what do you think?  Any ideas on what to build at these domains beyond what I’ve planned?

Monday, May 7, 2012

On Speaking… and not speaking

So as I mentioned in a previous post, I’m working to expand my speaking footprint this year beyond Utah.  This started out pretty well with a three session gig at Boise Code Camp which was a blast.  There is a great dev community up in Boise and I plan on going back next year.  I was able to attend Agile Games 2012 in Boston which was amazing.  Need to do a write up on that soon before everything leaks out of my brain :)   Again, more great people and I felt super enriched after the three days.

Unfortunately, around that time, my sessions were turned down for MADExpo and Chicago Code Camp.  I was pretty bummed about it, more than I thought I would be.  I plan to try again next year and market my sessions better.  Need to figure out how to get more buzz words into my titles :)

Happily I have been accepted to Agile Roots.  I’ll be running “Hands-on Group TDD with Randori” (title pending).

Additionally, I’ll be presenting at the Utah .Net User Group this Thursday (May 10, 2012) on “Linq (from the inside)”.

I’m still waiting on Portland Code Camp and Seattle Code Camp which I hope to still speak at.  I’ll likely go to Portland Code Camp either way as we’ll be in Portland to visit family.

I am hoping to attend SCNA in Chicago in November.  And that should round out the year.  Should be exciting!

Monday, March 12, 2012

Utah Code Camp Spring 2012 Slide Decks

I had the opportunity to speak at Utah Code Camp again (my fourth code camp presenting Fall 2011 Spring 2011 Fall 2010) which was a lot of fun. Not sure if I would do three presentations again, but it was a lot of fun and I met a lot of great people.

If you attended one of my sessions, please take a minute to rate the session at SpeakerRate (not official eval… please do that too):

Here are the slide decks. Contact me with any questions!

The Randori starter project is available at https://github.com/mdclement/NumbersToLcdRandoriBase

The Code Katas session was presented as two slide decks.  One with the introductory material and the other with the guided FizzBuzz kata.

The code base that I started from (tests and methods without implementation) is available at https://github.com/mdclement/Linq--from-the-inside--Presentation-Base

Friday, February 24, 2012

Expanding my Speaking Footprint in 2012

So one of the things that I plan to do more of this year is presenting at Code Camps and the like.  I’ve presented several times at Utah Code Camp (Spring 2011, Fall 2011), but want to expand my footprint.  So, I’m currently submitted to Boise Code Camp, Chicago Code Camp and MADExpo.  Over the next few weeks/months I’ll see how well my session topics are received outside of the Utah community.  I also plan to submit to Portland Code Camp and Agile Roots this year once their calls for speakers are open.

If you’ve attended (and hopefully enjoyed) previous sessions that I’ve presented, please rate me at http://speakerrate.com/mdclement

The topics that I’ve been submitting (and that I’ll be presenting at Utah Code Camp Spring 2012) are listed below along with the abstract.  I’m looking forward to an exciting year of meeting with developer communities both inside and outside of Utah!

Linq (From the Inside)

Knowing how to use Linq is useful if you're doing any coding using .NET 3.5 or newer.  But have you ever thought about what is going on "under the hood"?

Join us as we dive into the guts of Linq and implement Linq extension methods such as Where, Select, Any, All and Sum.  Not only is it interesting to see what's going on, it'll help you to build better code using Linq.

Code Katas: Practicing your Craft

One of the key values as part of the Software Craftsmanship movement is to be "skill-centric" and as part of that, practicing our skills as software developers is key! The Code Kata format is a coding exercise that is repeated and perfected. It provides one of many ways to practice the craft of software development. We'll discuss the Code Kata format, introduce a few katas and discuss some other practice formats.

I will be guiding the Kata in C# (no previous knowledge necessary though). As this is hands on, to take full advantage of the session have Visual Studio or SharpDevelop installed, NUnit installed (or via NuGet) and an integrated unit test runner (recommend Resharper or NCrunch for VS).

Randori: Group Practice

Looking for a new way to practice your craft? Randori provides a complementary way type of training when compared with katas.

Elements of Randori are: Pair Programming, Pair changes with mechanism (Time box, Ping Pong), Start from scratch, Use TDD, Everyone should be following, Pair should be explaining, Audience gives suggestions only with when Green

An example is at http://vimeo.com/2499540 . This is a hands on session!

Tuesday, January 31, 2012

But I really learned from writing: Quote of the Week

Note: Might be silly to call this a “quote of the week” given that it’s been years since I posted one but… oh well.

Heard this this morning on NPR from an interview with the composer Philip Glass:

What this amount of music has done for me is taught me how to write music. Oh, I had great teachers. Boulanger was one. Another was Ravi Shankar. And I went through the Juilliard process, and that was good, too. But I really learned from writing, which is how painters learn to paint, and writers learn to write, and how even dancers learn to dance. In a way, that's true. But what was the value of being so prolific? It's how I learned my trade.

Philip Glass from Philip Glass At 75: Listening With Heart, Not Intellect

What I heard in there is "But I really learned from writing, which is how painters learn to paint, and writers learn to write, and how even coders learn to code."

Original design by andrastudio
Blogger port by Blogger Templates