• Alistair-style 2009 Resolutions

    by Raman Ohri

    @panozzoaj righteously smited new years resolutions on twitter:

    Do you do New Year’s Resolutions? I view them as a retrospective instead of kaizen.

    So inclined to not do them and instead make changes throughout the year instead.

    Ok, maybe not quite a righteous smite, but he should have. If you wanted to change something, why did you wait?

    As he seems wont to do, @TotherAlistair posed a brilliant alternative:

    I got tired of making new year resolutions that I didn’t follow up on (lose weight, go to gym, cook healthier, etc), so I reversed the format doing a sort of “new year resolution, seer style” …

    So imagine that it is now one year ago, you have full knowledge of what will happen in this year, and you now get to make your new-year resolution … You will naturally make your resolution something that you do accomplish during the year, not something you abandon!

    So make a great resolution for the year gone by, and celebrate that you achieved it!

    Read the rest of his post for examples.

    What a great idea … we engineers are a cynical bunch, and celebrating the positives (especially our own) can be challenging. As a matter of fact, I had to think on it for a day before I could even come up with some. Without further ado:

    On the work front, Jan 1, 2009: “I resolve to grow into my new title and role (VP) at work. I’ve been with the same company for 16.5 years (happily), but now find myself far from the day to day work I started with and my role continuing to evolve.” Feeling pretty good about this  … I’m finding my path.

    On the personal front, Jan 1 2009: “I resolve to take more time off work and to find a way to help my oldest with his math homework while maintaining our collective sanity.” Check (a legitimate vacation in October and two weeks off right now) and check – though surely still a work in progress, our fridge is proudly adorned with a couple A and B math tests.

    Thanks Alistair!

  • Deliberate Practice in Software

    by Raman Ohri

    Agile 2009 Session Info

    Presenter: Mary Poppendieck

    Mary is well known as a lean software engineering leader, but gave this session talking about the idea of deliberate practice and our field. She referenced studies by Anders Ericsson about what it takes to be truly world class at something (she particularly focused on a juvenile music school example).

    The key take away from that research was that genetics was not the critical element; deliberate practice was. Just as Chris Shinkle’s Dreyfuss stuff talks about, it takes around ~10,000 hours of deliberate practice to become a true expert at something.

    <tangent>The concept of craftsmanship in software (which is really what this was about) was a consistent thread among the ‘rock stars’ who spoke at the conference. The current state of industry really is working against this with ineffective project management techniques, lack of respect for the individual, constant job hopping, and lack of mentorship. And yet, craftsmanship is one of the primary solutions to our problems …</tangent>

    Deliberate practice has four elements:

    1. A mentor/teacher/coach who knows the skills involved and the exercises needed to improve them

    2. Being challenged to improve, frequently … not just doing what you’re already good at

    3. Feedback, feedback, feedback … that coach telling you what you’re doing right and wrong

    4. The dedication/passion to stick with it

    Amongst people who become world class, they are often driven externally early (think children with music or sports), but later feed on the success and the activity becomes its own reward.

    As she was explaining all this, I wondered exactly what that meant for us. Is she saying that only professional development done ‘off the clock’ is deliberate practice? She further clarified that the analogy to sports and music was somewhat flawed and that she felt the day to day work we do as developers was in fact deliberate practice – so you can now go back to seeing yourself as an expert. ;-)

    She went into great detail on the four elements, what it takes, etc. I can’t reproduce all that here, but there were some things that really jumped out at me:

    · Teachers are NOT product champions (project leaders in our world) … they are competency leaders. SEP is kicking around some ideas we’re calling ‘practice management’ that can help us in that area, but we’re still in the early stages there.

    · Teachers (competency leaders) should: hire and grow people involved in their topic, review and guide work, set company standards, and ensure excellence.

    · One thing she said a lot: “If something is difficult, do it more often and it will get easier.” She cited frequent deployment and continuous integrations as examples.

    · Regarding challenge, she asked a hell of a question: who in your organization is thinking about what someone’s next assignment should be so that they can continue to grow? Are you consistently trading short term project performance for long term career growth? As I type this, I wonder about the relationship between this and liquidity

    · Getting developers exposure to actual users actually using the products we build is critical. This idea came up a lot throughout the conference. I would love to see more of this, though it can be a challenge in our scenario – our end user is often our customers’ customer.

    · She was a big fan of anything that sped up the feedback cycle – continuous integration, pair programming, TDD, etc. She feels that one of the reasons people like working on open source projects is actually the fast (and sometimes violent) feedback. She has also observed that having good feedback mechanisms typically improves companies retention of talent.

    · On the dedication topic, she explained the process a design engineer at Toyota goes through. I’ll save you the details, but it’s around 6-7 years before they’re allowed to do anything significant! They have a very strong apprentice-journeyman-master concept. Despite the looooong period of hand holding, their satisfaction and retention rates are exceptional.

    · She cited the fact that most companies don’t provide a technical career path. I felt a little pride for a moment, then remembered that we still have a ton of work to do with ours.

    · She cited something called Dijkstra’s Challenge, that essentially said “software can’t get better until we inject fewer bugs”. He wrote that over 30 years ago.

    · Quality construction should be the goal of all software processes. Measuring percentage of time spent in test and fix may be an effective measure of technical competence.

    · The software craftsmanship manifesto. This was new to me, would love to hear what you all think of it.

  • Liquidity in Information Work

    by Raman Ohri

    Agile 2009 Session Info

    Presenter: David Anderson in an "open jam" session.

    Liquidity is the ability to easily turn one asset into another (not just money!). Anderson’s idea on liquidity in a software organization relates to the skills of the people on the team and how we assign them to roles/tasks.

    Let’s say we have three skill areas that are relevant for projects: A, B, and C. We have four engineers available with the following profiles (the number is their skill level, ranging from 1 {novice} – 5 {world class}):

    E1: A3  B3   C3

    E2: B2  C4

    E3: C2

    E4: C2

    Now let’s assume we have three roles to fill:

    R1: requires B

    R2: requires C

    R3: requires C

    How do you think most organizations typically allocate resources to those assignments? If you didn’t say:

    R1: E1

    R2: E2

    R3: E3

    … you are cheating. This is exactly how we typically assign resources to projects (and often, people to roles within projects). Why wouldn’t I want my best available designer designing? My best Java guy on a Java project?

    But what if a task, project or crisis arrives later that requires skills A or B? We have already assigned our competent+ people and they aren’t available anymore. It is quite likely that the cost of having a novice B doing B is a lot more than the money saved by having an expert C over competent C. We have reduced our ability to take work and our talented people and turn it into business value for our customers. If your experts are already assigned, you have to make costly choices such as putting someone not-quite-ready into a role or moving resources between projects, both sub-optimal solutions.

    What Anderson is telling us is that we should be paying attention to our current liquidity and making decisions that optimize it for the whole organization rather than optimizing performance on a specific project. We optimize it by NOT assigning our generalists. The right answer for maximized liquidity in the above example is to assign our specialists (those with a more narrow skill set) first, and hold our generalist in reserve.

    R1: E2

    R2: E3

    R3: E4

    He is even going so far as to explore numerical values associated with this (a liquidity score, if you will). I’m reserving judgment on the value of going that far … might not make sense in an organization of SEP’s size. Or, it might be a nice dashboard metric for us to have in staffing and hiring. We have a career path skill assessment system in place that may be a good starting point for this, though they don’t consider strength in different technologies, which is highly relevant in staffing decisions. At this point, I’m planning to incorporate this into my own planning as just a “good thing to do”.

     

  • Emergent Interview Design

    by Raman Ohri

    I’m heavily involved in recruiting here at SEP. We recently did something that we haven’t done in at least 15 years: hired an experienced project manager. In our history, we’ve always always always grown our own; it’s too critical of a position to put in the hands of a stranger. The risk/criticality hasn’t gone away, but we have realized that A) we need another experienced hand while our up-and-comers get some experience under their belt, B) we’re pretty good at interviewing and C) we’re pretty good at managing our work, so we can handle it.

    We did get our PM, in a reasonable amount of time and with a reasonable amount of effort (woot!). This story is more about the how than the who though.

    So It Begins…

    The right thing to do would have been to follow Johanna Rothman’s process, detailed in Hiring The Best Knowledge Workers, Techies & Nerds. We’ve even done all the heavy lifting, with fairly well defined job descriptions and career path skill tree in place. Alas, I got busy and found myself face to face with an oncoming tidal wave of phone interviews … so I winged it.

    Some criteria was obvious: experience managing projects, at least some exposure and openness to lean/agile, and great communication skills. And of course, we have our standard criteria (shamelessly pillaged from Joel Spolsky): smart, fit, and get things done. Past that, I didn’t really have a hit list of topics to explore and evaluate the candidates on.

    Oh Look, Criteria!

    Thus poorly armed, I started the phone interviews and what do you know … the candidates helped me figure out what I cared about. I don’t mean that they sold me; instead, the back and forth discussion of what they’ve done, challenges they faced, and what being a PM at SEP means revealed for me what I actually cared about. I also learned what experiences and skills I didn’t care about, either because they weren’t applicable to the job or within our domain. Within three phone interviews my key criteria had solidified to:

    • Experience managing projects
    • Lean & Agile friendly
    • Team-facing skills (leader or mentor, not manager)
    • Great communication skills
    • Engineering and software development background
    • Exposure to rigorous or regulated software development process
    • Heavy interaction with clients

    I used simple stop light color grading for each candidate on these criteria (Excel conditional formatting is fantastic for this), giving me a quick and dirty heat map to which candidates were the best.

    After a couple more phone interviews, I had nice-to-have criteria:

    • Who did they report to in their past experiences as a PM? (Project Manager has a pretty broad definition, need to make sure they understand what it means here.)
    • Are they suffering from any cultural burn-in? (A big part of the reason we like to grow our own people.)
    • Do they already have some business facing skills? (Sometimes challenging for us engineer-turned-manager types to develop.)

    And that was pretty much all I needed to get down to our finalists. I don recommend this as a standard operating procedure, but it’s certainly something to consider when you’re dealing with difficult interviewing situations, like interviewing for a position you don’t tend to hire externally for. Simply discussing the job with viable candidates can help you figure out what matters.

    Making A Decision

    When we got down to the finalists, we had several good candidates who all probably would have worked out. Auditioning is a big part of our engineering interviews, but auditioning a PM is difficult … in fact, I couldn’t come up with a satisfactory way to do it, so we didn’t even try. Instead, we used a lot of behavioral questions, learning about the candidate through the stories they told.

    The final deciding criteria for my vote was a more qualitative evaluation of the person. You can try to process-ize your interviews all you want, but some gut feel always seems to be necessary. The final straw for me was: Is this a person who, if I got to know them, would want to find a place for in my organization in advance of even knowing what they do? That’s my candidate.

  • Chris Shinkle Talking Kanban

    by Raman Ohri

    Our very own Chris Shinkle will be talking Kanban a couple times in the next few weeks:

    Check him out if you get a chance … he’s had some great experiences with Kanban here at SEP, including:

    • making it work in a contracting environment
    • introducing it to new teams
    • applying it to different sorts of work (pure verification projects, personal kanban, product development vs. maintenance, etc.)
    • experimenting with swim-lane techniques
  • We’re Hiring

    by Raman Ohri

    Indiana is officially out of recession, so we’re hiring. (No, that’s not really why we’re hiring)

    We currently have openings for software engineers, senior software engineers, lead software engineers, project managers, and perhaps even a network engineer/system admin. Go here to apply if you’re interested. And highly qualified. And awesome.

  • New Approaches to Risk Management

    by Raman Ohri

    – I was lucky enough to attend the 2009 Agile conference. This post is one in a series of session reports from it.

    Presenter: David Anderson

    David framed this session with the idea that much of the stated value of Agile is in managing risk. Wanting to dig deeper, he tried to find a good Agile definition of risk or even just some articles treating risk from an agile perspective. He was pretty shocked to find very little published about it, so came up with his own definition:

    “The likelihood and magnitude of the difference between a desired outcome and an actual outcome.”

    I can live with that. I like that it acknowledges that risk isn’t always bad. Reinertsen tells us that risk is, in fact, good. We take some risks to get the rewards/returns that go with them. DeMarco also talked about this in Waltzing With Bears – a project without risk is a project not worth doing.

    David suggested two approaches: manage risk with allocation and manage risk with classes of service.

    Managing Risk with Allocation

    Prioritization of work is always a chief concern on agile projects. David has “become disillusioned with prioritization schemes, asking the business people to do something they can’t do”. He feels like there is too much uncertainty at too many levels and that uncertainty gets multiplied together to give us bad prioritization advice. I can certainly relate to this in my own work; too often, the decision makers on a project don’t have enough context to make great decisions on priority. Their business units are too silo-ed, with little transparency due to the political dynamics of large companies.

    Instead, David proposes taking some ideas from the MBA world. Let’s think of our projects/products/even features in the following terms:

    • table stakes – things you have to have to be able to play, such as your network if you’re a cellular provider; they are commodities, undifferentiated
    • cost reducers – reduce cost/increase margin
    • differentiators – something unique and loved that your customers will pay for
    • spoilers – moving in on someone else’s differentiator (push to talk, for instance)

    Given these categories, we can think differently about how to tackle these kinds of features/projects/products:

    image

    Table stakes are not dynamic … they don’t change out from underneath you in the middle of a project/product. They have to get done, but they aren’t ‘exciting’. He advises getting them done first, and not bothering with agile methods. This commodity work doesn’t need to be done by “highly paid American engineers.” (yeah, he really said that). If you can buy these rather than building, do so.

    Cost savers are nice, but similarly non-dynamic. Differentiators and spoilers, however, are quite likely to change out from underneath you. They probably haven’t been done before, or they wouldn’t be differentiators, and you can’t buy them. They are also the things that are likely to drive real value and profits to your company. So … they should be handled with lean and agile methods to deal with the dynamic market conditions.

    He doesn’t show it on the graph, but the size of an MMF for each of these classes increases as you move down the chart. This dovetails nicely into managing risk with classes of service.

    One caveat I would add to this set of ideas: the environment can get dynamic for table stakes or cost reducers if the target organization is not mature. I have worked with clients that were still sorting out their processes and procedures, assigning roles and responsibilities, and determining their market direction. Lean and agile methods have been tremendously helpful in building software for groups in this situation.

    Back to the topic. We can manage our risk by managing the distribution of work in our project/product/company, just as you would manage the risk in your retirement portfolio. I don’t know how much application this has for my teams since we’re not in the product design business, but perhaps we’ll get to observe how our customers do this and eventually provide good advice to them about the mix of features on a project. We can also look at the overall structure of a product development and note incongruities, such as a long development cycle without interim releases on a product with lots of differentiators. Those differentiators are risky, so we should deliver them early and often to see how the customers/market respond.

    Managing Risk with Classes of Service

    The idea here is really around classes of service as used on a Kanban board. We already use some classes of service (bugs, scenarios, silver bullets, etc.), but I suspect we’re still not doing them at the level he prescribes. Different items have different levels of inherent risk, so we shouldn’t execute them all with the exact same procedure. We can apply allocation thinking again here by limiting the number of each kind of ticket that can enter the system.

    He then tied together two concepts I keep hearing about in a nice way:

    “Classes of service should be defined according to the cost of delay.”

    I’m not the right guy to explain cost of delay, but it really is what it sounds like: what is the quantitative pain that comes from delaying this release one week/month/year/etc. He brought up really valuable point here as well. Cost of delay can often be represented as a curve. We might resist drawing this because we or the business people don’t know the real numbers that should be on it. BUT even if we can’t put specific numbers on it, we/they can probably draw the shape of it, and that alone is very useful thing to have.

    The samples classes he provided were Expedite, Fixed Delivery, Standard, and Intangible. I’ll let someone more in touch with classes of service and cost of delay provide more depth there *cough*Shinkle*cough*, but hopefully you can see how this ties in.

    What does this have to do with us?

    First, David actually called out our very own Chris Shinkle (as well as distinguished alum Eric Willeke) by name in the presentation, wanting them to comment on Kanban’s response to staff allocation. (Sidebar: in a typical project, adding people gives a non-linear {decaying} improvement in productivity; many Kanban teams are showing linear response to adding people.) Being able to adjust our staffing and get linear responses in productivity is a powerful risk mitigation technique.

    Second (and this is the big one for me), even if the specific techniques aren’t immediately applicable, this language is fantastically useful in talking to clients. Engineers consistently struggle to talk business value with the business people. This simple framework (diff/spoiler/cost reducer/table stakes) is easy to explain and gives a great basis for discussion. I tried this with a customer we’ve had for eight years (“Hey, I don’t really know where this system fits into the big picture for you. Is it a …”). He was a veritable font of information when pinged this way; I literally couldn’t write down everything he said it was flowing so fast.

    The presentation can be found here. There’s a lot more there than I could capture (you understand if you’ve heard him speak). Feel free to comment with further insights you glean from the presentation itself.