Skip to content

Feed aggregator

Agile in Context

Agile Learning Labs - Fri, 03/27/2015 - 19:28

“It is not the strongest of the species that survives, nor the most intelligent that survives. It is the one that is most adaptable to change.”
Charles Darwin

Just about everyone agrees that being “adaptable to change” is important.

At the same time, many people believe that we’re entering an age of acceleration. The models underlying society at every level are being redefined as traditional linear models of change give way to the explosive power of exponential growth. According to computer scientist, inventor and futurist Ray Kurzweil:

“The 21st century will be equivalent to 20,000 years of progress at today’s rate of progress; organizations have to be able to redefine themselves at a faster and faster pace.”

At all levels of engineering, we need a management methodology that is “most adaptable to change.”

Is “Agile” the answer? When we ask people to voice their opinions, doubts emerge around the concept of “agile methodologies.” Is it a new buzzword, yet another management fad or a new paradigm for surviving and thriving in times of rapid change? Or is there something better on the horizon?

Join Cathy Simpson of Agile Learning Labs to explore these questions at the next IEEE Technology and Engineering Management Society meeting on April 2, 2015. In this talk, we will look for the “core of agile” that will endure beyond the fad. We will address agile in context. Everything that is old is new again; and perhaps we will discover together that we’ve been agile all along. We just didn’t have the context to know it.

Categories: Companies

7 Habits of Highly Motivated People

J.D. Meier's Blog - Fri, 03/27/2015 - 19:08

Motivation is a powerful skill.

It can lift you up from the worst of places, and inspire you to new heights.

After all, nothing is worse than slogging your way through your days, or working your way through a bunch of mundane tasks.

But, like I said, motivation is a skill.

You need to learn it.   For many people it does not come naturally.   And chances are, many of us have had bad models, bad advice, and worse, bad habits for a lifetime.

One of the most important insights I found was said by Stephen Covey long ago – satisfied needs don’t motivate.

It’s why we need to stay hungry.

Here’s how you stay hungry -- find a problem you hate, and focus on creating a solution you love.

But how you light your fire from the inside out in a sustainable way?

That’s where the 7 habits of highly motivated people comes in.

I wanted to put together a very simple set of habits and practices that actually work for building your motivational muscle and finding your inner mojo.

Here are the 7 habits of highly motivated people at a glance:

  1. Find Your WHY
  2. Change Your Beliefs About What’s Possible
  3. Change Your Beliefs That Limit You
  4. Spend More Time In Your Values
  5. Surround Yourself With Catalysts
  6. Build Better Feedback Loops
  7. “Pull” Yourself with Compelling Goals

There is a lot of science behind the habits.  If you’re that motivated, you can research it through bunches of books, bunches of sites, and brilliant TED talks.

But, I’d much rather that you spent the time simply adopting and applying the habits, so you can set your motivation on fire.

It’s time to do more of what you were born to do.

It’s time to live and breathe the things that you want to live and breathe.

It’s time to rise again from whatever ashes might have burned you down, and let your phoenix fly.

If you aren’t sure where to get started, first read 7 habits of highly motivated people, and then adopt habit #1:

Find Your WHY.

You’ll be glad you did.

I can see your pilot light is on already.

Categories: Blogs

Design Thinking Meets Civic Tech

Rally Agile Blog - Fri, 03/27/2015 - 16:00

As part of our recently announced partnership with Code for America, Rallyers took a leadership role in supporting the annual CodeAcross event here in Boulder, where Rally is headquartered. On a recent snowy Saturday, Code for Boulder—the local all-volunteer Brigade—hosted “Crafting Civic Tech: The Housing Edition.”

Veteran Rally Agilists, company founder Ryan Martens, and Rally coach Ronica Roth led the group of more than 50 community members on a six-hour design thinking journey. The goal: identify ways to improve and increase civic engagement among community members and local government, with a focus on the issue of housing.

Ronica Roth and Ryan Martens explaining the design thinking approach

Digging Into The Topic of Housing

The City of Boulder sums up the area’s housing situation as “Setting + Culture + Opportunities + Quality of Life = High Demand for Housing.” To create a “collaborative community conversation,” the City is teaming with Code for America to increase two-way dialogue with residents and encourage citizens to take a more active role in key local issues.

"The city takes transparency and community collaboration seriously. Communication in the twenty-first century is changing and we want to harness the entrepreneurial spirit of our community—and be part of that change." Jane Brautigam, City Manager

Because the timing of the annual CodeAcross event aligned well with the first few weeks of the project between the City and Code for America, the local Brigade designed the gathering to broaden and deepen the conversation between community members, then share insights and ideas with local government.

Crafting Problem Statements from Empathy Interviews

The Stanford University Institute of Design created a design thinking workbook to lead people through the process of gaining empathy as a critical first step toward creating solutions that solve real human or business needs. Without addressing problems that people want or need solved, products and services are destined to require “push” from the creator rather than “pull” from the user. Participants started the day by practicing empathy interviews on each other. Afterwards, several pairs shared with the whole group the problem statements they crafted after interviewing each other.

“Listening is a critical skill to develop—it was a great setting to practice listening.” Dina Robin, participant

Next we heard from Becky Boone, the Code For America fellow who is conducting an in-depth exploration into the needs and challenges of improving community engagement in Boulder. Becky has done numerous empathy interviews within government as well as the community. As a result, she crafted problem statements on the topic of housing. Here’s a small sampling, written in the design thinking format: [Name] needs a way to [user’s need]. Unexpectedly, in his/her world, [insight].

  • Hugh needs a way to weigh in on housing issues in Boulder. Unexpectedly, in his world, he does not have a computer or internet access.
  • Jake needs a way to feel like his opinion matters. Unexpectedly, in his world, he hasn’t seen public opinion matter when the City Council makes a decision.
  • Tam needs a way to feel like her presence in Boulder matters. Unexpectedly, in her world, she feels her contributions to the local economy aren’t valued, hence her opinions aren’t valued.
  • Bao needs a way to know who to talk to when he wants to talk about housing. Unexpectedly, in his world, he has no awareness of the current structure in place.
  • Darryl needs a way to feel like his demographic is valued in Boulder. Unexpectedly, in his world, people in power have spoken dismissively of what he has to offer.
  • Maxwell needs a way to allow change in his neighborhood. Unexpectedly, in his world, people are squashing ideas for the city, eliminating possibilities in his neighborhood.
Teams Dig Deeper, Craft Possible Solutions

Teams ranging from four to eight people formed around the “problem statements” that attendees had interest in exploring further. For two hours, they talked through potential solutions, continuing to use the design thinking workbook as a guide.

“The Code for Boulder Civic Tech Forum was excellent because we were encouraged to stay in the place of inquiry, rather than racing superficially to find the solution. We worked in small teams with other community members who care deeply about an issue. I am focused on senior housing issues and am thrilled that two very concrete and needed tech solutions arose from our discussions today.” Neshama Abraham, participant

To wrap up the day, each team shared their ideas for solutions with the whole group.

Then participants were encouraged to rate the ideas and solutions that were generated. Each person was encouraged to place two dots next to the idea(s) they believed were most important. Red dots indicated “hot” ideas and blue dots indicated what may be a “quick win.”

The top vote-earning idea was to create a two-way dialogue with citizens, where they could click an online map of current development projects, learn about those of interest, and leave comments that would become part of the public record related to the location. What came to be known as “idea #1” received 12 votes total: 7 blue and 5 red.

Ideas Into Taking Action

The week following the event, both the City Council and Housing Committee received briefings from Becky Boone, and both groups asked to stay informed of how these ideas progressed within the Code for Boulder Brigade.

Brigade members decided at their subsequent meeting to work toward making idea #1 a reality. Because of the bonds formed during the CodeAcross event, there is now open dialogue between the city and this all-volunteer civic tech group to access data sets that have previously not been available to the public or not in a format usable by the latest technology. City employees are attending the Brigade meetups and listening to the requests of how to improve what they offer to residents.

How did the event live up to its goal to identify ways to improve and increase civic engagement among community members and with local government? We’re proud of our “wins”:

  • Over 50 community members worked together for a day of active listening, ideation, and problem-solving. They experienced the design thinking methodology, starting with empathy listening to craft problem statements, before jumping to possible solutions: an approach that they can use in other contexts.
  • Three city leaders and one City Council member joined us throughout the day. They heard firsthand from residents and participated in a collaborative problem-solving process.
  • Three city employees have gotten involved in the Brigade’s new initiative that came out of CodeAcross. The result is not only increased dialogue, but the opening of additional data sets and ongoing project collaboration between civic tech volunteers and local government.
  • The Brigade now has a solid queue of potential projects from other ideas the came out  the event, all of which were generated by community members.
“The event brought together a diverse group of community members and leveraged excellent problem solving approach. Design Thinking brings out the very best in the group by encouraging them to first think broadly, and then to employ a combination of empathy and creativity to find innovative solutions. I believe the event delivered some excellent ideas that may ultimately benefit the entire Boulder community.” Gerry Valentine, volunteer facilitator

Watch a 90-second overview of the day, produced by the City of Boulder’s Channel 8.

Rally’s partnership with Code for America’s Brigade program will continue to bring opportunities to apply approaches like design thinking, Lean Startup, and Agile team processes to the civic tech movement. Our next event? We’re bringing civic tech to RallyON 2015 in Phoenix, June 15-17. Stay tuned for details in the coming months.

Geri Mitchell-Brown
Categories: Companies

What is BDD?

lizkeogh.com - Elizabeth Keogh - Fri, 03/27/2015 - 12:24

At #CukeUp today, there’s going to be a panel on defining BDD, again.

BDD is hard to define, for good reason.

First, because to do so would be to say “This is BDD” and “This is not BDD”. When you’ve got a mini-methodology that’s derived from a dozen other methods and philosophies, how do you draw the boundary? When you’re looking at which practices work well with BDD (Three Amigos, Continuous Integration and Deployment, Self-Organising Teams, for instance), how do you stop the practices which fit most contexts from being adopted as part of the whole?

I’m doing BDD with teams which aren’t software, by talking through examples of how their work might affect the world. Does that mean it’s not really BDD any more, because it can’t be automated? I’m talking to people over chat windows and sending them scenarios so they can be checked, because we’re never in the same room. Is that BDD? I’m writing scenarios for my own code, on my own, talking to a rubber duck. Is that it? I’m still using scenarios in conversation to explore and define requirements, with all the patterns that I’ve learnt from the BDD world. I’m still trying to write software that matters. It still feels like BDD to me. I can’t even say that BDD’s about “writing software that matters” any more, because I’ve been using scenarios to explore life for a while now.

I expect in a few years the body of knowledge we call “BDD” will also include adoption patterns, non-software contexts, and a whole bunch of other things that we’re looking at but which haven’t really been explored in depth. BDD is also the community; it’s the people who are learning about this and reporting their learning and asking questions, and the common questions and puzzles are also part of BDD, and they keep changing as our understanding grows and the knowledge becomes easier to access and other methods like Scrum and Kanban are adopted and enable BDD to thrive in different places.

Rather than thinking of BDD as some set of well-defined practices, I think of it as an anchor term. If you look up anything around BDD, you’re likely to find conversation, collaboration, scenarios and examples at its core, together with suggestions for how to automate them. If you look further, you’ll find Three Amigos and Outside-In and the Given / When / Then syntax and Cucumber and Selenium and JBehave and Capybara and SpecFlow and a host of other tools. Further still we have Cynefin and Domain Driven Design and NLP, which come with their own bodies of knowledge and are anchor terms for those, and part of their teaching overlaps part of what I teach, as part of BDD, and that’s OK.

That’s why, when I’m asked to define BDD, I say something like, “Using examples in conversation to illustrate behaviour.” It’s where all this started, for me. That’s the anchor. It’s where everything else comes from, but it doesn’t define the boundaries. There are no boundaries. The knowledge, and the understanding, and especially the community that we call “BDD” will keep on growing.

One day it will be big enough that there will be new names for bits of it, and maybe those new names will be considered part of BDD, and maybe they won’t. And when that happens, that should be OK, too.

NB: I reckon the only reason that other methods are defined more precisely is so they could be taught consistently at scale, especially where certification is involved. Give me excellence, diversity and evolution over consistency any day. I’m pretty sure I can sell them more easily… and so can everyone else.


Categories: Blogs

7 tips for being an Agile Manager

Growing Agile - Fri, 03/27/2015 - 10:29

We recently gave a talk at the ITWeb Software Development Management Conference in Johannesburg, South Africa. We decided to speak about what should a software development manager of agile teams be focussed on. Personally I think these 7 tips can be applied to anyone in a management or even leadership position.

Here is a summary slide:

SevenTips

 

Here is the full presentation. We tried to put a few notes on each tip, so that even if you didn’t attend the talk – hopefully you can understand what we mean by the slides.

7 tips for managing software development in the age of agile from Growing Agile
Categories: Companies

Neo4j: Generating real time recommendations with Cypher

Mark Needham - Fri, 03/27/2015 - 08:59

One of the most common uses of Neo4j is for building real time recommendation engines and a common theme is that they make use of lots of different bits of data to come up with an interesting recommendation.

For example in this video Amanda shows how dating websites build real time recommendation engines by starting with social connections and then introducing passions, location and a few other things.

Graph Aware have a neat framework that helps you to build your own recommendation engine using Java and I was curious what a Cypher version would look like.

This is the sample graph:

CREATE
    (m:Person:Male {name:'Michal', age:30}),
    (d:Person:Female {name:'Daniela', age:20}),
    (v:Person:Male {name:'Vince', age:40}),
    (a:Person:Male {name:'Adam', age:30}),
    (l:Person:Female {name:'Luanne', age:25}),
    (c:Person:Male {name:'Christophe', age:60}),
 
    (lon:City {name:'London'}),
    (mum:City {name:'Mumbai'}),
 
    (m)-[:FRIEND_OF]->(d),
    (m)-[:FRIEND_OF]->(l),
    (m)-[:FRIEND_OF]->(a),
    (m)-[:FRIEND_OF]->(v),
    (d)-[:FRIEND_OF]->(v),
    (c)-[:FRIEND_OF]->(v),
    (d)-[:LIVES_IN]->(lon),
    (v)-[:LIVES_IN]->(lon),
    (m)-[:LIVES_IN]->(lon),
    (l)-[:LIVES_IN]->(mum);

We want to recommend some potential friends to ‘Adam’ so the first layer of our query is to find his friends of friends as there are bound to be some potential friends amongst them:

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
RETURN me, potentialFriend, COUNT(*) AS friendsInCommon
 
==> +--------------------------------------------------------------------------------------+
==> | me                             | potentialFriend                   | friendsInCommon |
==> +--------------------------------------------------------------------------------------+
==> | Node[1007]{name:"Adam",age:30} | Node[1006]{name:"Vince",age:40}   | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1005]{name:"Daniela",age:20} | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1008]{name:"Luanne",age:25}  | 1               |
==> +--------------------------------------------------------------------------------------+
==> 3 rows

This query gives us back a list of potential friends and how many friends we have in common.

Now that we’ve got some potential friends let’s start building a ranking for each of them. One indicator which could weigh in favour of a potential friend is if they live in the same location as us so let’s add that to our query:

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
 
WITH me, potentialFriend, COUNT(*) AS friendsInCommon
 
RETURN  me,
        potentialFriend,
        SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation
 
==> +-----------------------------------------------------------------------------------+
==> | me                             | potentialFriend                   | sameLocation |
==> +-----------------------------------------------------------------------------------+
==> | Node[1007]{name:"Adam",age:30} | Node[1006]{name:"Vince",age:40}   | 0            |
==> | Node[1007]{name:"Adam",age:30} | Node[1005]{name:"Daniela",age:20} | 0            |
==> | Node[1007]{name:"Adam",age:30} | Node[1008]{name:"Luanne",age:25}  | 0            |
==> +-----------------------------------------------------------------------------------+
==> 3 rows

Next we’ll check whether Adams’ potential friends have the same gender as him by comparing the labels each node has. We’ve got ‘Male’ and ‘Female’ labels which indicate gender.

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
 
WITH me, potentialFriend, COUNT(*) AS friendsInCommon
 
RETURN  me,
        potentialFriend,
        SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation,
        LABELS(me) = LABELS(potentialFriend) AS gender
 
==> +--------------------------------------------------------------------------------------------+
==> | me                             | potentialFriend                   | sameLocation | gender |
==> +--------------------------------------------------------------------------------------------+
==> | Node[1007]{name:"Adam",age:30} | Node[1006]{name:"Vince",age:40}   | 0            | true   |
==> | Node[1007]{name:"Adam",age:30} | Node[1005]{name:"Daniela",age:20} | 0            | false  |
==> | Node[1007]{name:"Adam",age:30} | Node[1008]{name:"Luanne",age:25}  | 0            | false  |
==> +--------------------------------------------------------------------------------------------+
==> 3 rows

Next up let’s calculate the age different between Adam and his potential friends:

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
 
WITH me, potentialFriend, COUNT(*) AS friendsInCommon
 
RETURN me,
       potentialFriend,
       SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation,
       abs( me.age - potentialFriend.age) AS ageDifference,
       LABELS(me) = LABELS(potentialFriend) AS gender,
       friendsInCommon
 
==> +------------------------------------------------------------------------------------------------------------------------------+
==> | me                             | potentialFriend                   | sameLocation | ageDifference | gender | friendsInCommon |
==> +------------------------------------------------------------------------------------------------------------------------------+
==> | Node[1007]{name:"Adam",age:30} | Node[1006]{name:"Vince",age:40}   | 0            | 10.0          | true   | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1005]{name:"Daniela",age:20} | 0            | 10.0          | false  | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1008]{name:"Luanne",age:25}  | 0            | 5.0           | false  | 1               |
==> +------------------------------------------------------------------------------------------------------------------------------+
==> 3 rows

Now let’s do some filtering to get rid of people that Adam is already friends with – there wouldn’t be much point in recommending those people!

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
 
WITH me, potentialFriend, COUNT(*) AS friendsInCommon
 
WITH me,
     potentialFriend,
     SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation,
     abs( me.age - potentialFriend.age) AS ageDifference,
     LABELS(me) = LABELS(potentialFriend) AS gender,
     friendsInCommon
 
WHERE NOT (me)-[:FRIEND_OF]-(potentialFriend)
 
RETURN me,
       potentialFriend,
       SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation,
       abs( me.age - potentialFriend.age) AS ageDifference,
       LABELS(me) = LABELS(potentialFriend) AS gender,
       friendsInCommon
 
==> +------------------------------------------------------------------------------------------------------------------------------+
==> | me                             | potentialFriend                   | sameLocation | ageDifference | gender | friendsInCommon |
==> +------------------------------------------------------------------------------------------------------------------------------+
==> | Node[1007]{name:"Adam",age:30} | Node[1006]{name:"Vince",age:40}   | 0            | 10.0          | true   | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1005]{name:"Daniela",age:20} | 0            | 10.0          | false  | 1               |
==> | Node[1007]{name:"Adam",age:30} | Node[1008]{name:"Luanne",age:25}  | 0            | 5.0           | false  | 1               |
==> +------------------------------------------------------------------------------------------------------------------------------+
==> 3 rows

In this case we haven’t actually filtered anyone out but for some of the other people we would see a reduction in the number of potential friends.

Our final step is to come up with a score for each of the features that we’ve identified as being important for making a friend suggestion.

We’ll assign a score of 10 if the people live in the same location or have the same gender as Adam and 0 if not. For the ageDifference and friendsInCommon we’ll apply apply a log curve so that those values don’t have a disproportional effect on our final score. We’ll use the formula defined in the ParetoScoreTransfomer to do this:

    public <OUT> float transform(OUT item, float score) {
        if (score < minimumThreshold) {
            return 0;
        }
 
        double alpha = Math.log((double) 5) / eightyPercentLevel;
        double exp = Math.exp(-alpha * score);
        return new Double(maxScore * (1 - exp)).floatValue();
    }

And now for our completed recommendation query:

MATCH (me:Person {name: "Adam"})
MATCH (me)-[:FRIEND_OF]-()-[:FRIEND_OF]-(potentialFriend)
 
WITH me, potentialFriend, COUNT(*) AS friendsInCommon
 
WITH me,
     potentialFriend,
     SIZE((potentialFriend)-[:LIVES_IN]->()<-[:LIVES_IN]-(me)) AS sameLocation,
     abs( me.age - potentialFriend.age) AS ageDifference,
     LABELS(me) = LABELS(potentialFriend) AS gender,
     friendsInCommon
 
WHERE NOT (me)-[:FRIEND_OF]-(potentialFriend)
 
WITH potentialFriend,
       // 100 -> maxScore, 10 -> eightyPercentLevel, friendsInCommon -> score (from the formula above)
       100 * (1 - exp((-1.0 * (log(5.0) / 10)) * friendsInCommon)) AS friendsInCommon,
       sameLocation * 10 AS sameLocation,
       -1 * (10 * (1 - exp((-1.0 * (log(5.0) / 20)) * ageDifference))) AS ageDifference,
       CASE WHEN gender THEN 10 ELSE 0 END as sameGender
 
RETURN potentialFriend,
      {friendsInCommon: friendsInCommon,
       sameLocation: sameLocation,
       ageDifference:ageDifference,
       sameGender: sameGender} AS parts,
     friendsInCommon + sameLocation + ageDifference + sameGender AS score
ORDER BY score DESC
 
==> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
==> | potentialFriend                   | parts                                                                                                           | score             |
==> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
==> | Node[1006]{name:"Vince",age:40}   | {friendsInCommon -> 14.86600774792154, sameLocation -> 0, ageDifference -> -5.52786404500042, sameGender -> 10} | 19.33814370292112 |
==> | Node[1008]{name:"Luanne",age:25}  | {friendsInCommon -> 14.86600774792154, sameLocation -> 0, ageDifference -> -3.312596950235779, sameGender -> 0} | 11.55341079768576 |
==> | Node[1005]{name:"Daniela",age:20} | {friendsInCommon -> 14.86600774792154, sameLocation -> 0, ageDifference -> -5.52786404500042, sameGender -> 0}  | 9.33814370292112  |
==> +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

The final query isn’t too bad – the only really complex bit is the log curve calculation. This is where user defined functions will come into their own in the future.

The nice thing about this approach is that we don’t have to step outside of cypher so if you’re not comfortable with Java you can still do real time recommendations! On the other hand, the different parts of the recommendation engine all get mixed up so it’s not as easy to see the whole pipeline as if you use the graph aware framework.

The next step is to apply this to the Twitter graph and come up with follower recommendations on there.

Categories: Blogs

Codehaus & Ben: Thank You and Good Bye

Sonar - Thu, 03/26/2015 - 20:55

It seems very natural today that SonarQube is hosted at Codehaus, but there was a time when it was not! In fact joining Codehaus was a big achievement for us; you might even say it was one of the project’s first milestones, because Codehaus didn’t accept just any project. That may seem strange today, when you can get started on Github in a matter of minutes, but Codehaus was picky, and just being accepted was a big deal.

It was also a big deal because being accepted by Codehaus gave us access to a full suite of best-of-breed tools: IntelliJ, JProfiler, and Nexus, plus Jira, Confluence, and the rest of the Atlassian suite… This, coupled with the fact that Codehaus took on the burden of hosting and maintaining that infrastructure, allowed us to focus on the SonarQube platform and ecosystem. It enabled us to make what we think is a great product – a product that wouldn’t be what it is today without Codehaus.

The first ticket ever created for the SonarQube (née Sonar) project was SONAR-1, entered in the Codehaus Jira on Dec. 17th, 2007. The project was just under a year old at the time (SonarSource hadn’t even been founded yet). Over the next 7+ years, that ticket was followed by nearly 14,000 more across 42 projects, more than 60,000 emails across two mailing lists, and countless documentation revisions over the many versions of SonarQube and its plugins.

Of course, “Codehaus” really boils down to one guy: Ben Walding, who has been running the 1,000-project forge on his own time and his own dime from the beginning. No matter what was going on in Ben’s life, Codehaus was up. And he wasn’t just “keeping the lights on”, either; Ben always made things not just possible, but easy. So when he told us a couple of months ago that Codehaus was shutting down, it wasn’t really a surprise. In fact, as he said, the writing had been on the wall for a while. But it was saddening. Because no matter how many other options there are today for open source projects, Codehaus will always have a special place in the history of the open source movement and in our hearts.

We’ll announce what Life After Codehaus will look like in May, but in the meantime, we say: Merci beaucoup, Большое спасибо, Heel erg bedankt, Grazie mille, vielen Dank, Suur aitäh, Nagyon köszönöm, and Thank you, Ben. Goodbye to Codehaus, and thank you very much.

Categories: Open Source

Operationalizing Strategy with a Systems Perspective

Leading Agile - Mike Cottmeyer - Thu, 03/26/2015 - 14:58

While there are many books and much research on organizational development, this system view combined with some validated learning over time is a powerful way to look at organizational challenges as a coach/consultant.

OD Model

Let’s take a closer look to define these areas then apply some validated learning from my own experience.

Business Outcomes – the outcomes desired from the business strategy selected

Org Structure – the structure of power and authority to facilitate decision making

Incentive Systems – rewards for individual and group performance

Work Systems – how people get work done in the organization

Collaboration Systems – systems to overcome the friction to collaboration introduced by the org structure

People Systems – hiring, firing, development, HR systems – both tactical and strategic

Validated Learning (observations and experiences over time)
  • Business outcomes are required to think about the other dimensions; and interestingly, in my experience even some top leaders can struggle to articulate these, so it may require some elicitation and dialogue. I like to use the pithy term “operationalize strategy” when discussing this topic.
  • Incentive systems usually mirror org structure fairly closely.
  • The org structure will help determine both work systems and collaboration systems; however, collaboration systems have a stronger relationship because they must overcome the friction introduced by the structure itself.
  • Incentive systems and people systems strongly impact everything else except strategy.
  • People tend to focus first on org structure and work systems because they are the most visible, tangible, and even “fun” to work with.
  • Each organization design decision made will impact the other dimensions so as the design is created, the entire system must be reevaluated.
  • Organizations are typically good at people systems when it comes to tactical training and development, but more powerful levers are hiring, firing, and strategic training needs.
  • The most common constraint on change involves incentive systems.

What observations and experiences do you have using a systems perspective to view organizational challenges? Has the use of a systems perspective helped overcome these challenges? Leave your comment below so that we can get the conversation started.

The post Operationalizing Strategy with a Systems Perspective appeared first on LeadingAgile.

Categories: Blogs

Top 10 Tips for Measuring Agile Success

Agile Management Blog - VersionOne - Thu, 03/26/2015 - 14:02

State_of_Agile_Report_2014

Choosing the right agile metric to measure agile success is really simple, right? I wish that were the case, but in reality choosing the correct agile metric can be a little tricky.

So, how do you get the most out of your agile metrics? I reviewed the 9th annual State of Agile survey, which compiles insights from nearly 4,000 respondents, to find out how agile practitioners are measuring the success of their agile initiatives.

 

#1 On-Time Delivery

According to the State of Agile survey, 58% of the respondents* said they measured the success of their agile initiatives by on-time delivery.

With agile, our schedule is fixed and our scope is flexed. What does that mean for on-time? Well, time just happens, so theoretically, we are always on time. But, on-time is generally measured in context with the expectations about what will be delivered. To measure and have visibility of what is being delivered, we may look to the out-of-the box metrics of the burndown or the burnup.

For instance, in this VersionOne burndown chart you can see progress as the team heads toward an expected end date.

metrics1

 

 

 

 

 

This burnup chart, on the other hand, allows you to see the trend of getting stuff done, as well as the impact of scope changes.

metrics2

 

 

 

 

 

 

 

#2 Product Quality

A total of 48% of the respondents to the survey said they measured the success of their agile initiatives through product quality.

Quality is often measured in multiple ways, including looking at the customer satisfaction, revenue growth, and the technical aspects of testing conducted throughout the development life cycle. With agile software development teams, we’ll look at our velocity of completing working software with quality built in. We tightly couple continuous testing and inspection throughout the lifecycle of the development, so we’ll constantly be monitoring testing trends as well as constantly inspecting build and code health.

For instance, in this testing trend chart you can see the cumulative progress around testing activities. Ultimately you want to see all green, but a large amount of red along the line might reflect some issues in the code base or process.

metrics3

 

 

 

 


#3 Customer/User Satisfaction

The survey found that 44% of respondents measured the success of their agile initiatives by customer or user satisfaction.

As with all these benefits, there are multiple ways to measure the outcomes. In the case of customer/user satisfaction, these include looking at the Net Promoter score, sales figures, number of support calls vs. number of features delivered in a time period, or usage statistics of product or site capabilities.

#4 Business Value

Approximately 44% of the respondents to the State of Agile survey stated that they measured the success of their agile initiatives by business value.

And several of the principles of the Agile Manifesto recognize the importance of delivering business value. Measuring business value is very explicit when we know that there’s a contract for work to complete or a compliance need and fines if we don’t finish the work. On the other hand, sometimes measuring value is prospective or speculative in the sense that the market inputs drive decisions and the value is often a best guess. Having a business value score applied to the features to be delivered can measure value.

Here’s a sample epic cumulative flow chart based on value. This helps you see the delivery of anticipated business value as features and other large stories are completed. 

metrics4

 

 

 

 

 

 

 

 

#5 Product Scope (Features, Requirements)

Another 39% of the respondents answered that they measured the success of their agile initiatives with product scope.

Setting a goal around what to get done over the next three months, then tracking status, and getting it completed is hugely rewarding. Actually having real-time feedback as to the progress of work is valuable to everyone on the team, from the engineers to the program managers. With agile software development projects, you can always rely on the burndown charts, or just visualize the progress of the cards moving from left-to-right on the project kanban board.

Here’s an epicboard in VersionOne that helps the team track and visualize the progress of features at a program level. Or if you’re using Scaled Agile Framework® (SAFe®), you can see progress at the release train level.

metrics5

 

 

 

 

 

#6 Project Visibility

Project visibility was the measure of choice for 30% of respondents to the survey.

One of the best ways to build trust is transparency. That means having the plans out in the open and making progress visible to all. Sharing progress at multiple dimensions provides the different stakeholders with information that makes sense from their point of view. Metrics that show feature or overall progress against a targeted plan can provide great insights.

In this chart you can visualize progress on a feature and known work. The red diamond represents what was actually anticipated, so it’s easy to gauge whether you are above or under the anticipated scope.

metrics6

 

 

 

 

 

 

The other reason visibility is important is because we need to have alignment among internal teams so they can best manage their work in relation to component or service dependencies.

Understanding the impact of one team’s work on another team is critical. By looking at the dependency chart below, it’s easy to identify the stories at risk.

metrics7

 

 

 

 

 

 

 

#7 Productivity

According to the State of Agile survey, 29% of the respondents said they measured the success of their agile initiatives through productivity.

The concept of productivity in an agile world is a measure of outcomes, not output. So looking at burnup for a product or based on value is hugely impactful. Simply looking at a burnup of count of stories or features over time is a great way to understand how much the team is actually delivering.

#8 Predictability

Approximately 25% of the respondents from the survey said they measured the success of their agile initiatives by predictability.

A predominant metric used to assess predictability is velocity trend. For a three- to four-month period, this shows how much work has been completed at a sustainable pace on average. A velocity that wildly fluctuates might reflect a team that is changing, work that is unpredictable, or simply a team that is still getting used to defining work small enough to complete in an iteration.

A velocity trend chart like the one below not only helps you see performance, but also gives you visibility into whether or not the team’s output is at a predictable state – as this one shows.

metrics8

 

 

 

 

 

 

 

You can always try to assess velocity based simply on the count of story cards completed every week. This is usually the best indicator of predictability.

#9 Process Improvement

Another 23% of the respondents said they measured the success of their agile initiatives by process improvement.

A core tenet of all lean and agile mindsets is continuous improvement – constantly getting better. But how do you know you are getting better unless you are measuring the outcomes? There are all the metrics above that help, but there’s also the extremely helpful cumulative flow chart which shows how well work is flowing through the lifecycle.

With this team level cumulative flow chart, you can see where bottlenecks or slowdowns may exist.

metrics9

 

 

 

 

 

Also, there’s cycle time – which helps us with planning and predictability. Cycle time is a great metric to view over time to see if process tweaks and adjustments are having an impact on productivity.

For instance, in this cycle time report, you can see the level of variability and performance across the various estimated pieces of work.

metrics10

 

 

 

 

 

 

 

#10 Don’t Know

Just 11% of the State of Agile survey respondents said they didn’t know! Well, if you don’t know the benefits, try to start looking at the metrics above. You’ll see improvements in delivered value, better quality around what is produced, a more predictable cadence, and ultimately happier customers.

Conclusion

These results show that there isn’t just a single metric that everyone uses. Different organizations, types of management, and teams need different metrics.

Not sure which metric is right for you? Check out the 9th annual State of Agile survey to learn more about what nearly 4,000 of your peers are doing.

What metric do you use to measure your agile initiatives’ success?

*Respondents were able to make multiple selections.

State of Agile is a trademark of VersionOne, Inc.

Categories: Companies

Why Managers Ask for Estimates and What They Need to Know

Johanna Rothman - Thu, 03/26/2015 - 13:26

In many of my transitioning to agile clients, the managers want to know when the project will be done. Or, they want to know how much the project will cost. (I have a new book about this, Predicting the Unpredictable: Pragmatic Approaches to Estimating Cost or Schedule.)

Managers ask for estimates because they want to know something about their ability to recognize revenue this year. How many projects can they release? What is the projected effect on revenue; customer acquisition and retention; and on service revenue (training, support, all that kind of service). We pay managers big bucks so they can project out for “a while” and plan for the business.

You need to know this in your life, too. If you are an employee, you know approximately how much money you will make in a year. You might make more if you get a bonus. You might make less if you get laid off. But, you have an idea, which allows you to budget for mortgages, vacations, and kid’s braces.

Remember, in waterfall, there was no benefit until the end of the project. You couldn’t realize any benefit from a project until it was complete: not revenue, not capitalization, not any effect on what customers saw. Nothing.

When you use agile, you have options if you can release early. Remember the potential for release frequency?

If you can do continuous deployment or even release something more often, you can realize the benefits of the project before the end.

If you are agile, you don’t need to estimate a lot to tell them when they can first receive value from your work. You can capitalize software early. Your customers can see the benefits early. You might be able to acquire more customers early.

Agile changes the benefits equation for projects.

Agile is about the ability to change. We see this at the team level clearly. When the team finishes a feature, the team is ready for the next feature. It doesn’t matter if you work in flow or timeboxes, you can change the features either for the next feature (flow) or at the next timebox. You can change what the team does.

Agile is most successful when teams finish features every day (or more often). The faster you finish a feature, the faster the team gets feedback on the feature. The more flexibility the product owners has to update/change the backlog for the team (either for flow or the next timebox). The teams do have to complete their work on a feature in a reasonable amount of time. If your cycle time gets too high, no one sees the flow of features. If you don’t get to done at the end of the iteration, you don’t get the benefit of agile. Teams need to learn how to get to done quickly on small features, so they can demo and get feedback on their progress.

What does this fast delivery/fast feedback cycle do for senior managers?

It allows senior managers to change their questions. Instead of “When will this be done?” or “How much will it cost?” senior managers can ask, “When will I see the first bit of value? Can we turn that value into revenue? When can we capitalize the work?”

Those questions change the way teams and senior management work together.

When teams do agile/lean, and they have a constant flow of features, managers don’t need “assurances” or “commitments to estimates” from the teams. Instead, the team estimates a much smaller chunk of work–time to first delivery value.

You might not know precisely when you can deliver that first value. But, as soon as the team works together if they understand agile/lean, they can create a reasonable estimate. They can update that estimate if necessary.

What else can teams do?

  • Work to a target. If the teams and the product owners know that management has a desired release date, they can work to it. Teams can track their feature flow through their systems, understanding their cycle time. They can use timeboxes for focus. They can measure how close to done they are with a product backlog burnup chart.
  • Demo as you proceed. Always demo to the product owners. Depending on the pressure for revenue/whatever, ask the senior managers to participate in the demo. That way, they can see the product’s progress as you add more features.
  • Keep the backlog item size small. It doesn’t matter how much is in the backlog if the size of every item is small. The smaller the backlog items, the easier it is for teams to estimate. It’s also easier for teams to maintain a flow of features into the ever-evolving system. Who knows? You might be done earlier than you expect.

With agile, you don’t have to set the strategy for a year, fund the projects, and expect that the projects will complete within that year. A year is a long time in almost every market. Managers might want the ability to change their strategy, and still get to a first “delivery of value” date.

Our metrics need to change. Cost to release or time to release is inadequate. They are inadequate because we can change the backlog at any time.

Instead, consider these metrics:

  • Time to release value: How long will it take us to release something for revenue? (The smaller the number, the better.)
  • Frequency of release: How often can we release? (The higher the frequency, the better.)
  • Run rate (What the team costs per unit time)
  • When you capitalize software. I will admit too much ignorance here to provide you guidance.

I have other measurement suggestions for programs in Organizing An Agile Program, Part 5: Measurements That Might Mean Something to a Program.

It’s not about #noestimates. It’s about which estimates your managers need. Managers have a fiduciary responsibility to the organization. You have the responsibility to release often, at least internally. The more often you release, the fewer time/cost estimates your managers need. The more your managers can take advantage of capitalizing software and what the software can do for the organization and the customers.

Your managers need estimates. And, they need to change the estimates they request. It’s all about your organization’s transition to agile.

Categories: Blogs

Pulse Roadmap Update

A little madness - Thu, 03/26/2015 - 05:30

Long time users of our Pulse Continuous Integration Server would know that we don’t believe in posting long-term roadmaps. They just never reflect a changing reality! But we have always been happy to discuss features with customers, including keeping our issue tracker (creaky old version of Jira that it is) completely open for all to see and contribute. In that spirit I’d like to talk a little about where we’re heading with Pulse in the near term, the bit that can be predicted, in a format more digestible than disparate issues.

The next version of Pulse (as yet unnamed), will have updates focused on a few areas:

  1. Upgrades of underlying libraries including Equinox, Spring, Spring Security, Hibernate, Jetty, Quartz, EhCache and more. If you haven’t seen a lot of visible changes reported recently this is why: these upgrades have occupied the first part of this development cycle. These are truly the most boring of all changes, which we hope you won’t notice directly at all! What you will notice, though, is a payoff of this strong foundation over time.
  2. Major updates to the administration interface. The interface works well enough at the moment but could be improved in a couple of key areas: discoverability and efficiency. Key goals for these updates include:

    • Improving the visibility of the most commonly-used configuration via overview pages.
    • Making it easier to discover what is overridden (via templating) and where.
    • More efficient navigation, especially through the template hierarchy.
    • Modernisation to take advantage of HTML 5 (which the current interface predates).

    These changes are big enough to warrant a dedicated blog post at a future point.

  3. Improved visibility of the build environment. When builds fail in curious ways the culprit is often a small difference in the environment. Pulse currently publishes environment information via implicit env.txt artifacts, but these haven’t kept up to date with the variety of options Pulse now gives for specifying build properties.
  4. Improvements to the Windows experience. In 2.7 work was done to improve Windows service support, but more could be done to streamline the setup process in particular.

As always we will also be working on dozens of smaller improvements and suggestions from our user base, most of which fall under one of:

  • UI polish, especially in the reporting interface.
  • Increased flexibility of project and build configuration.
  • Updated support for modern versions of build tooling.

Customers are more than welcome to connect with us via our support email, support forum, or issue tracker to discuss these and other changes you’d like to see in Pulse!

Categories: Companies

Python: matplotlib hangs and shows nothing (Mac OS X)

Mark Needham - Thu, 03/26/2015 - 02:02

I’ve been playing around with some of the matplotlib demos recently and discovered that simply copying one of the examples didn’t actually work for me.

I was following the bar chart example and had the following code:

import numpy as np
import matplotlib.pyplot as plt
 
N = 5
ind = np.arange(N)
fig, ax = plt.subplots()
menMeans = (20, 35, 30, 35, 27)
menStd =   (2, 3, 4, 1, 2)
width = 0.35       # the width of the bars
rects1 = ax.bar(ind, menMeans, width, color='r', yerr=menStd)
 
plt.show()

When I execute this script from the command line it just hangs and I don’t see anything at all.

Via a combination of different blog posts (which all suggested different things!) I ended up with the following variation of imports which seems to do the job:

import numpy as np
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
 
N = 5
ind = np.arange(N)
fig, ax = plt.subplots()
menMeans = (20, 35, 30, 35, 27)
menStd =   (2, 3, 4, 1, 2)
width = 0.35       # the width of the bars
rects1 = ax.bar(ind, menMeans, width, color='r', yerr=menStd)
 
plt.show()

If I run this script a Python window pops up and contains the following image which is what I expected to happen in the first place!

2015 03 25 23 56 08

The thing to notice is that we’ve had to change the backend in order to use matplotlib from the shell:

With the TkAgg backend, which uses the Tkinter user interface toolkit, you can use matplotlib from an arbitrary non-gui python shell.

Current state: Wishing for ggplot!

Categories: Blogs

Unleash What’s Next

Rally Agile Blog - Wed, 03/25/2015 - 23:00

The world’s moving faster than ever, and as a partner to some of the most innovative companies in the world, Rally is at the forefront of change. We bring our world-class SaaS platform and the most experienced coaches and consultants in the industry to help customers navigate today’s challenges — including nimble competitors, changing markets, increasing regulation and faster cycles of innovation.  And like you, we too must adapt to change.

Rally has been a pioneer in Agile approaches, with Agile development software that revolutionizes the way companies across the globe accelerate software delivery. We have delivered countless scaled Agile solutions and led large-scale transformations across thousands of people and hundreds of teams, helping our customers to align software development with strategic business objectives and leverage agility across their organizations. Building agility is mission-critical in organizations today. It’s improving the way we work, learn, respond to change, innovate and win in the market.

Just as Rally has evolved, our brand must evolve to better reflect and communicate our expertise in helping organizations worldwide succeed on their Agile journeys.  As a result, you may notice that Rally looks a little bit different. We’re introducing a new logo that modernizes our look while staying connected to our Agile roots.

We have a new tagline, Unleash What’s Next, designed to better communicate what Rally software and services help customers achieve.

You’ll also see our name as Rally instead of Rally Software, because we are more than a software company: we’re a partner to our customers, helping them succeed on their path to agility.

Learn more about our refreshed brand, and how we work with our customers to help make them more successful, efficient, and productive, in this short video.

Our customers, partners, and employees have played a key role in shaping who Rally is today, and for that I thank all of you. Our employees continue to be the heart behind everything Rally does — I’m grateful to you, the Rally team, for taking this journey.

We’re excited about the future and look forward to continuing to innovate with you to step beyond the possibilities of today.

Tim Miller
Categories: Companies

JSHint: Confusing Use of ! (not)

Derick Bailey - new ThoughtStream - Wed, 03/25/2015 - 21:15

I ran in to this error a moment ago, produced by JSHint:

NewImage

The error says: Confusing use of ‘!’

That was certainly a new one to me… but after a moment of thought, it made sense. 

The Potential Confusion

Here’s the original code that I wrote, which produced this problem:

In this code, the potential confusion is not from the JavaScript runtime. Rather, it is potentially confusing from the developer’s perspective.

Does this code say “(not id) in ticket”, or is it saying “not (id in ticket)”?

If you know the order of precedence in JavaScript, this code says … well… I don’t know the order of precedence between the ! and “in” operators. I’m assuming it would evaluate to “not (id in ticket)” but I honestly don’t know.

A Less Confusing Version

Let’s clean this up so it’s less confusing.

In this version of the code, I’m explicitly grouping the “in” statement before running the “!” (not) statement. The code is significantly more clear, already. I also avoided the JSHint error, which is what my ultimate goal was in this case.

If I want to take this one more step, however, I can make the code even more clear.

In this version, I explicitly make the “in” check and assign it to a variable. Now my if statement is even easier to understand because I have given a name to the operation being performed. 

Naming A Concept

Reading “!hasId” is easier for our mind to parse and understand as “not has id”, than “not id in ticket”. We’ve given a name to the concept that is expressed in the code.

This form of abstraction (named variable representing an operation result) is the basis by which we understand everything around us. You don’t look at a bottle of water and think about chains of polycarbons, hydrogen atoms, etc. You think “bottle of water”.

Named abstractions are an important part of the way we think, and should be reflected in our code.

Of course this can go too far. Sometimes there isn’t a proper name for a line of code, and many times that line of code is already wrapped in a named function, which covers the concept.

Taking this idea too far is just as bad as not taking it far enough. The key is to find the balance where names are meaningful and representative of what’s going on, not just names for the sake of naming things.

 

 

 

P.S. If you’re interested in seeing how I set up and use JSHint, check out my WatchMeCode episode on using JSHint from Grunt.

 

 

Categories: Blogs

Retrospectives Are Boring, Are They?

Scrum Expert - Wed, 03/25/2015 - 19:47
People often say that retrospectives are useless, boring and take too long. This means that they are not done right! The difference between a good and a bad retrospective is the structure and the facilitation. Retrospectives are the strongest tools in the Agile toolbox and an important part of continuously inspect and adapt. This presentation discusses the structure of a good retrospective and important principles to follow to get a good retrospective every time.Video producer: http://oredev.org/
Categories: Communities

Agile Results Refresher

J.D. Meier's Blog - Wed, 03/25/2015 - 17:19

We live in amazing times. 

The world is full of opportunity at your fingertips.

You can inspire your mind and the art of the possible with TED talks.

You can learn anything with all of the Open Courseware from MIT or Wharton, or Coursera, or you can build your skills with The Great Courses or Udemy.

You can read about anything and fill your kindle with more books than you can read in this lifetime.

You can invest in yourself.  You can develop your intellectual horsepower, your emotional intelligence, your personal effectiveness, your communication skills, your relationship skills, and your financial intelligence.

You can develop your career, expand your experience, build your network, and grow your skills and abilities.  You can take on big hairy audacious goals.  You can learn your limits, build your strengths, and reduce your liabilities.

You can develop your body and your physical intelligence, with 4-minute work outs, P90x3 routines, Fit Bits, Microsoft Band, etc.

You can expand your network and connect with people around the world, all four corners of the globe, from all walks of life, for all sorts of reasons.

You can explore the world, either virtually through Google Earth, or take real-world epic adventures.

You can fund your next big idea and bring it to the world with Kickstarter.

You can explore new hobbies and develop your talents, your art, your music, you name it.

But where in the world will you get time?

And how will you manage your competing priorities?

And how will you find and keep your motivation?

How will you wake up strong, with a spring in your step, where all the things you want to achieve in this lifetime, pull you forward, and help you rise above the noise of every day living?

That's not how I planned on starting this post, but it's a reminder of how the world is full of possibility, and how amazing your life can be when you come alive and you begin the journey to become all that you're capable of.

How I planned to start the post was this.  It's Spring.  It's time for a refresher in the art of Agile Results to help you bring out your best.

Agile Results is a simple system for meaningful results.  It combines proven practices for productivity, time management, and personal effectiveness to help you achieve more in less time, and enjoy the process.

It's a way to spend your best time and your best energy to get your best results.

Agile Results is a way to slow down to speed up, find more fulfillment, and put your ambition into practice.

Agile Results is a way to realize your potential, and to unleash your greatest potential.  Potential is a muscle that gets better through habits.

The way to get started with Agile Results is simple.  

  1. Daily Wins.  Each day, ask yourself what are Three Wins you want for today?   Maybe it's win a raving fan, maybe it's finish that thing that's been hanging over you, or maybe it's have a great lunch.  You can ask yourself this right here, right now -- what are Three Wins you want to accomplish today?
  2. Monday Vision.  On Mondays, ask yourself what are Three Wins you want for this week?  Imagine it was Friday and you are looking back on the week, what are Three Wins that you want under your belt.  Use these Three Wins for the Week to inspire you, all week long, and pull you forward.  Each week is a fresh start.
  3. Friday Reflection.  On Friday, ask yourself, what are three things going well, and what are three things to improve?  Use these insights to get better each week.  Each week is a chance to get better at prioritizing, focusing, and creating clarity around what you value, and what others value, and what's worth spending more time on.

For bonus, and to really find a path of fulfillment, there are three more habits you can add ...

  1. Three Wins for the Month.  At the start of each month, ask yourself, what are Three Wins you want for the month?  If you know your Three Wins for the Month, you can use these to make your months more meaningful.  In fact, a great practice is to pick a theme for the month, whatever you want your month to be about, and use that to make your month matter.  And, when you combine that with your Three Wins, not only will you enjoy the month more, but at the end of the month, you'll feel a better sense of accomplishment when you can talk about your Three Wins that you achieved, whether they are your private or public victories.  And, if the month gets off track, use your Three Wins to help you get back on track.  And, each month is a fresh start.
  2. Three Wins for the Year.  At the start of the year, ask yourself what are Three Wins you want to achieve for the year?  This could be anything from get to your fighting weight to take an epic adventure to write your first book.
  3. Ask better questions.   You can do this anytime, anywhere.  Thinking is just asking and answering questions.  If you want better answers, ask better questions.  You can exponentially improve the quality of your life by asking better questions.

A simple way that I remember this is I remember to think in Three Wins:

Think in terms of Three Wins for the Day, Three Wins for the Week, Three Wins for the Month, Three Wins for the Year

Those are the core habits of Agile Results in a nutshell. 

You can start with that and be well on your way to getting better results in work and life.

If you want to really master Agile Results, you can read the book, Getting Results the Agile Way: A Personal Results System for Work and Life.

It's been a best seller in time management, and it’s helped many people around the world create a better version of themselves.

If you want to take Agile Results to the next level, start a study group and share ways that you use Agile Results with each other around how you create work-life balance, create better energy, learn more faster, and unleash your potential, while enjoying the journey, and getting more from work and life.

Share your stories and results with me, with your friends, with your family, anyone, and everyone – help everybody live a little better.

Categories: Blogs

A Little Risk Goes A Long Way

Leading Agile - Mike Cottmeyer - Wed, 03/25/2015 - 14:51

Risk is a big topic, but generally for beginning agile teams (or any team) it can be calculated in a minimalist way as dependencies. To me, dependencies represent a binary probability. Either they are resolved or not.

When paired with value, risk becomes super important to look at because it can tell you how much of that value is in danger. Specifically, we can use it to make informed decisions about investment.

Regarding value

For now, I will take a look at value through the lens of Net Present Value (NPV) because the program I am currently coaching is already using it. I am not advocating for NPV, just meeting the program where they currently stand. Boiling it way down… Net Present Value is used in capital budgeting to represent the profitability of an investment over time. In agile, this might be an investment in an epic or a feature or a capability, etc. You also might use story points as a super simple starting place until you figure out what value means in your organization. Net Present Value and a few other valuation methods can be seen here.

Risk-adjusted Net Present Value (rNPV) has been used in pharmaceuticals to determine if a capital investment is worth pursuing. The basic reason for the use of this method is that new medications are expensive… Expensive expensive. Like $2.5 billion expensive to get one for which the market approves. There is a high probability that drug trials won’t work out and the drug won’t make it to market on time or at all.  For that reason, risk of failure is assessed and applied to the valuation. That can lead to investment decisions in large capital projects.

How About Doing That In The Small?

With proper breakdown of strategy, I  encourage organizations to do some form of analysis for the next three months at a tactical level to make sure that they inform themselves of the level of risk so they can determine the likelihood that they will realize a return on their investment.  The risk exposure is smaller than NPV is usually concerned with and we may be willing to take on a larger risk profile, but the problem is the same.  If you have a relatively significant investment, you want a reasonable shot at realizing your return.

Looping in Agile

Take a look at programs and portfolios. Sure there are plenty of risks that can prevent projects or features from succeeding, but to keep it simple, I am focusing on the binary dependency. It is done or not done. Therefore, the probability of the risk being removed is 50%. Continuing the math for a bit, for each dependency on the outcome we target, we have a factorial of possibilities… or in English:

If we have two dependencies, we can have four possible outcomes.
For Example:

  • Resolved | Resolved
  • Resolved | Failed
  • Failed | Resolved
  • Failed | Failed

That makes the probability 25% that we will have an outcome of Resolved | Resolved.

If we have three dependencies you can have 8 outcomes and thus a 12.5% probability and so forth and so on. So now forget about NPV. We don’t care. We need a way to make good investment decisions for things that will actually come true. We also need this method to be lightweight.

Given 100 points are in a release and we have 2 dependencies that need to happen in order for us to release the features. We have  a 25% probability that we will release 100 points. Your risk to point value that you can count on is 25 points assuming that all points are blocked by those dependencies. Granted, that’s not a value assessment, it’s a point assessment. But that’s an ok place to start.

So Now What?

With this new information, there is a definitive incentive to remove risk early. Really early in the release. As a matter of fact, I want relatively new teams that are just starting out to plan a release that has an 80% certainty of delivering it’s value. That means that before the release, we need to remove most of the dependencies. I have been toying with capturing this as a risk burndown. Here’s a quick wireframe of it.

burndown

 

In this figure, we are burning down the percent of the release that is impacted by risk. Like I said, I like relatively new programs that hit 80% of their value delivery. We can use the percent impacted to drive risk points down to below 20% before the start. It’s a pretty simple, good way to look at the probability that programs and portfolios are making responsible commitments and have the math to back it up. Speaking of math… this stuff can get a ton more complex. A great goal is to keep it simple so we can all relate. I know this is a little off math wise, but it’s enough to inform and get people started toward developing reliable release plans and roadmaps that mean something.

The post A Little Risk Goes A Long Way appeared first on LeadingAgile.

Categories: Blogs

Agility for Nonprofits Means Better Business, Greater Impact

Rally Agile Blog - Wed, 03/25/2015 - 14:00

With the constant pressure in the non-profit sector to do more and create more impact, while at the same time continuing to be good steward of resources, it’s become imperative that nonprofits develop a business sense that isn’t typically associated with our sector. Working with Rally has given us a huge advantage in developing team processes and skillsets. Rocky Mountain MicroFinance Institute (RMMFI) isn’t just fulfilling a great mission; we’re well on our way to becoming an efficient and productive agile team, capable of delivering outstanding results.  

"We strongly believe that being a nonprofit is no excuse for not operating based on solid business principles. Adopting ‘the agile way’ has reshaped and strengthened the manner in which we live this organizational value."

RMMFI has always taken a non-traditional approach to the business planning process in our work to help low-income and otherwise marginalized individuals launch and grow micro-enterprises. Day in and day out, we preach simplicity, focus, and the experiential learning process to our aspiring entrepreneurs. But sometimes—especially in times of high growth—we have trouble swallowing our own medicine. Through RMMFI’s partnership with Rally, we’ve had the opportunity to learn from a number of experts and gain exposure to valuable agile principles that have, in many ways, come to define our approach to work planning and project management.  

One of the things we’re most excited about is our shift toward a more intentional, “agile-inspired” organizational planning process. In 2015, RMMFI changed the way we defined our annual plan to be more focused on the priorities of the organization while being realistic about our capacity to get the work done. Our goal is to increase the visibility of the work being done across the organization, increase collaboration among team members, and put a system in place to continually reassess the workload for changes in priority and scope. This shift has or will affect all phases of planning across the organization, from the printed Annual Plan we share with stakeholders to the individual sticky notes hanging on a team member’s Kanban board.

In recent weeks, RMMFI has been working with our coach, Rachel Weston Rowell, to develop the project planning abilities of the team. In a matter of weeks, RMMFI will begin implementing a sprint planning method with the hopes of making the workload more approachable, making deliverables more valuable, and making our staff more organized and happy. In addition, Rachel led us through a work planning exercise to determine problem areas in our client recruitment process. This exercise helped the team identify blockages in our “value stream” (pictured below) and helped us define improvement projects that would allow us to get to better results—such as more client applications in the door with the same or less effort/strain on the part of staff.

“Working with RMMFI has been an incredibly rewarding experience. Being able to take the agile and lean concepts that we leverage both inside Rally and in our work with our customers, and bring them into the nonprofit space means we get to impact an even larger community. I’ve seen RMMFI take huge steps in transforming their processes and practices, how they collaborate, and how they steer their business. Nonprofits are hungry for the same things that for-profit business are – to be more effective at what they do and how they engage, all in service to their mission.”

In the last three years, Rally’s experts have helped us develop time management trainings for our clients, facilitated strategic planning sessions for our Board of Directors, and assisted staff with the development of process improvement activities that are now in regular use. Additionally, through a grant funded by the Rally For Impact Foundation, our leadership team has taken the Leading Collaborative Meetings course from Agile University. By taking that class we better understand how to work collaboratively across teams and projects as our organization grows. Nearly every interaction with the Rally team becomes a learning opportunity in facilitation methods—a skillset that’s very valuable in the delivery of our core client-facing work.    

Part of RMMFI’s mission is to create for our clients a network of expertise, and provide them with access to business knowledge that doesn’t naturally exist in their world. In many ways, Rally has played that exact same role for RMMFI. Instead of being stuck at a certain level of impact or performance, we’re now able to use some of these practices to do more and create more: maximizing our time and resources on what matters most. The better we become at actually doing the work, the more opportunity there is for low-income or otherwise marginalized individuals to turn their ideas into a business that works—a business that has the potential to transform a household, a neighborhood, and ultimately, an entire community.

Graduates of RMMFI Class #11, who all got a little dose of agile planning as part of our Boot Camp curriculum

Brendan Landry
Categories: Companies

i’m terrified right now… and I hope I stay that way

Derick Bailey - new ThoughtStream - Wed, 03/25/2015 - 12:00

In less than one week of writing this, I’ll be doing my first keynote talk at a conference – the 2015 SpaceCityJS conference.

Sitting here, typing this; I’m thinking about the talk that I’m going to do… and my stomach is turning. My heart is racing. I want to crawl under a desk and hide. I want to call the conference organizer and tell him I’m sick.

nervous-speaking

The spot-light on me… the entire conference looking at me, expecting me to say something meaningful. I’m terrified. I don’t want to do it. Don’t make me do it.

The Terrified, Stomach Turning Feeling

I’ve done more than a few conference sessions, musical performances in front of large audiences, acted in plays and other public things up on stage. I’m not new to this.

And I seriously hope I never lose this feeling of being terrified by what I’m about to do.

A Strong Correlation

In all the times I’ve been up in front of people, doing some sort of performance, I found found one particular correlation to hold up almost perfectly:

the higher my stress level, the better I do

There are multiple factors at play, here – it’s not one simple, single thing. But time and time again, I find this to be true – for both the benefit and detriment of my talks / performances.

A Miserable Failure

I know what failure looks like, standing in front of people. I screwed up so badly in front of an audience once, that half the people left the room after I had whizzed through my material in less than half the time I was allotted.

I planned the talk for the wrong audience and didn’t realize it until I was standing in front of everyone. I was unable to recover. It was so bad, the conference organizer asked me if I was ok afterward… and he wasn’t even in the session to see me fail. He heard about it from multiple other people.

A Outstanding Success

I recently found myself wanting to hide in a corner and cry just before a talk. I was incredibly nervous about doing a session with zero code, and no demonstrations. I had never done that before.

It turned out to be one of my best talks, ever.

The emotion, the passion, the conveyance of exactly what I was intending through the stories of my experience – it all came together near perfectly. There were more than a few people in the audience who told me that it was the best talk of the conference.

Stretching Myself

there are multiple reasons that my stress level is a good indicator of success – not the least of which is the fact that I am stretching myself to do new things. It’s part of why I keep changing up how I do my presentations, and which talk I give.

I don’t like to give the same talk over and over and over again. I prefer to practice one to death, become incredibly nervous about it, deliver it like a preacher at revival and record that one session so that I never have to give that talk again.

Doing things this way means I never have the comfort of giving the same talk twice, and that’s what I want.

I Want This Gut-Wrenching Feeling

Not because I enjoy the nervousness and sick feelings – that part is truly terrifying and awful. But when I get this way, I know it’s because I am stretching myself to do new things.

I want this horrible, sick feeling because it means I care about what I’m doing. It means I understand that I can really screw this up, and I really don’t want to. It means I care enough to make sure I have every detail right, because I am not confident enough to breeze through it (unlike the over-confidence that turned in to a total fail with the wrong audience).

This gut-wrenching sick feeling that I have right now, means I am growing in some new way and doing something new and potentially amazing … and potentially terrifying and horrible, too.

Not Just Speaking Engagements

A little over a year ago, I convinced my client to let me build a custom batch process scheduling and execution system. We had evaluated a lot of off-the-shelf solutions, and none of them did everything we needed. I recommended an architecture that I was unsure of, but with the confidence that I could learn it in time and create a solution that worked well. It was another gut-wrenching moment when I suggested that solution and they accepted.

Last week (from the time of writing this), that system went live and is working well. The go-live was another nausea-inducing scenario for me.

There are so many scenarios that I put myself in to, where I feel completely and totally out of my element. But I continue to do so because I believe I can step in to those roles and in to the knowledge and experience that I need for that situation.

No Reward Without Risk

I am giving my first keynote at a conference in less than a week. It’s terrifying, but it’s going to be worth it.

If I can pull this off, I can work my way in to bigger and more prestigious conferences. I can turn the exposure in to a larger audience for my mailing list. I can grow my own personal audience with other developers that think I have something valuable to say and to offer.

Yup. I can totally screw this up, and deliver a horrendously awkward keynote. I could put people to sleep or make them all incredibly uncomfortable. I may even have the wrong audience in mind, again. It scares me. A lot.

But it’s going to be worth it if I can pull it off.

But Not Too Much Risk

In spite of the risk involved, and in spite of my stomach tying itself in knots right now, this isn’t a huge leap for me.  I’ve done dozens of talks and more performances of other types than I can count.

This is not a giant leaping attempt to move in to something completely unknown to me. This is another step in the direction that I want to head.

Each step comes with another round of nausea and terror. But it’s only one step. Even if I fall off that step, I’ll probably land on the previous one or two steps where I have my current foundation. From there, I can figure out what I did wrong and where to go next (if I want to go somewhere different).

Never Lose That Terrified Sickness

If you do lost that desire to hide under your desk, you might be sitting in your comfort zone a little too much. You might not be valuing your own abilities or contributions. You might not be taking enough risk to move yourself forward.

Of course there are times when you need the comfort of familiarity. It’s a safe place to be, to recharge yourself and prepare for what lays ahead.  But don’t let yourself lose focus while you rest in your all-too-familiar surroundings.

The comfort you need today should be replaced with fear, uncertainty and doubt that you face head-on, tomorrow.

– Derick

 

Categories: Blogs

Topic Modelling: Working out the optimal number of topics

Mark Needham - Wed, 03/25/2015 - 00:33

In my continued exploration of topic modelling I came across The Programming Historian blog and a post showing how to derive topics from a corpus using the Java library mallet.

The instructions on the blog make it very easy to get up and running but as with other libraries I’ve used, you have to specify how many topics the corpus consists of. I’m never sure what value to select but the authors make the following suggestion:

How do you know the number of topics to search for? Is there a natural number of topics? What we have found is that one has to run the train-topics with varying numbers of topics to see how the composition file breaks down. If we end up with the majority of our original texts all in a very limited number of topics, then we take that as a signal that we need to increase the number of topics; the settings were too coarse.

There are computational ways of searching for this, including using MALLETs hlda command, but for the reader of this tutorial, it is probably just quicker to cycle through a number of iterations (but for more see Griffiths, T. L., & Steyvers, M. (2004). Finding scientific topics. Proceedings of the National Academy of Science, 101, 5228-5235).

Since I haven’t yet had the time to dive into the paper or explore how to use the appropriate option in mallet I thought I’d do some variations on the stop words and number of topics and see how that panned out.

As I understand it, the idea is to try and get a uniform spread of topics -> documents i.e. we don’t want all the documents to have the same topic otherwise any topic similarity calculations we run won’t be that interesting.

I tried running mallet with 10,15,20 and 30 topics and also varied the stop words used. I had one version which just stripped out the main characters and the word ‘narrator’ & another where I stripped out the top 20% of words by occurrence and any words that appeared less than 10 times.

The reason for doing this was that it should identify interesting phrases across episodes better than TF/IDF can while not just selecting the most popular words across the whole corpus.

I used mallet from the command line and ran it in two parts.

  1. Generate the model
  2. Work out the allocation of topics and documents based on hyper parameters

I wrote a script to help me out:

#!/bin/sh
 
train_model() {
  ./mallet-2.0.7/bin/mallet import-dir \
    --input mallet-2.0.7/sample-data/himym \
    --output ${2} \
    --keep-sequence \
    --remove-stopwords \
    --extra-stopwords ${1}
}
 
extract_topics() {
  ./mallet-2.0.7/bin/mallet train-topics \
    --input ${2} --num-topics ${1} \
    --optimize-interval 20 \
    --output-state himym-topic-state.gz \
    --output-topic-keys output/himym_${1}_${3}_keys.txt \
    --output-doc-topics output/himym_${1}_${3}_composition.txt
}
 
train_model "stop_words.txt" "output/himym.mallet"
train_model "main-words-stop.txt" "output/himym.main.words.stop.mallet"
 
extract_topics 10 "output/himym.mallet" "all.stop.words"
extract_topics 15 "output/himym.mallet" "all.stop.words"
extract_topics 20 "output/himym.mallet" "all.stop.words"
extract_topics 30 "output/himym.mallet" "all.stop.words"
 
extract_topics 10 "output/himym.main.words.stop.mallet" "main.stop.words"
extract_topics 15 "output/himym.main.words.stop.mallet" "main.stop.words"
extract_topics 20 "output/himym.main.words.stop.mallet" "main.stop.words"
extract_topics 30 "output/himym.main.words.stop.mallet" "main.stop.words"

As you can see, this script first generates a bunch of models from text files in ‘mallet-2.0.7/sample-data/himym’ – there is one file per episode of HIMYM. We then use that model to generate differently sized topic models.

The output is two files; one containing a list of topics and another describing what percentage of the words in each document come from each topic.

$ cat output/himym_10_all.stop.words_keys.txt
 
0	0.08929	back brad natalie loretta monkey show call classroom mitch put brunch betty give shelly tyler interview cigarette mc laren
1	0.05256	zoey jerry arthur back randy arcadian gael simon blauman blitz call boats becky appartment amy gary made steve boat
2	0.06338	back claudia trudy doug int abby call carl stuart voix rachel stacy jenkins cindy vo katie waitress holly front
3	0.06792	tony wendy royce back jersey jed waitress bluntly lucy made subtitle film curt mosley put laura baggage officer bell
4	0.21609	back give patrice put find show made bilson nick call sam shannon appartment fire robots top basketball wrestlers jinx
5	0.07385	blah bob back thanksgiving ericksen maggie judy pj valentine amanda made call mickey marcus give put dishes juice int
6	0.04638	druthers karen back jen punchy jeanette lewis show jim give pr dah made cougar call jessica sparkles find glitter
7	0.05751	nora mike pete scooter back magazine tiffany cootes garrison kevin halloween henrietta pumpkin slutty made call bottles gruber give
8	0.07321	ranjit back sandy mary burger call find mall moby heather give goat truck made put duck found stangel penelope
9	0.31692	back give call made find put move found quinn part ten original side ellen chicago italy locket mine show
$ head -n 10 output/himym_10_all.stop.words_composition.txt
#doc name topic proportion ...
0	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/1.txt	0	0.70961794636687	9	0.1294699168584466	8	0.07950442338871108	2	0.07192178481473664	4	0.008360809510263838	5	2.7862560133367015E-4	3	2.562409242784946E-4	7	2.1697378721335337E-4	1	1.982849604752168E-4	6	1.749937876710496E-4
1	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/10.txt	2	0.9811551470820473	9	0.016716882136209997	4	6.794128563082893E-4	0	2.807350575301132E-4	5	2.3219634098530471E-4	8	2.3018997315244256E-4	3	2.1354177341696056E-4	7	1.8081798384467614E-4	1	1.6524340216541808E-4	6	1.4583339433951297E-4
2	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/100.txt	2	0.724061485807234	4	0.13624729774423758	0	0.13546964196228636	9	0.0019436342339785994	5	4.5291919356563914E-4	8	4.490055982996677E-4	3	4.1653183421485213E-4	7	3.5270123154213927E-4	1	3.2232165301666123E-4	6	2.8446074162457316E-4
3	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/101.txt	2	0.7815231689893246	0	0.14798271520316794	9	0.023582384458063092	8	0.022251052243582908	1	0.022138209217973336	4	0.0011804626661380394	5	4.0343527385745457E-4	3	3.7102343418895774E-4	7	3.1416667687862693E-4	6	2.533818368250992E-
4	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/102.txt	6	0.6448245189567259	4	0.18612146979166502	3	0.16624873439661025	9	0.0012233726722317548	0	3.4467218590717303E-4	5	2.850788252495599E-4	8	2.8261550915084904E-4	2	2.446611421432842E-4	7	2.2199909869250053E-4	1	2.028774216237081E-
5	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/103.txt	8	0.7531586740033047	5	0.17839539108961253	0	0.06512376460651902	9	0.001282794040111701	4	8.746645156304241E-4	3	2.749100345664577E-4	2	2.5654476523149865E-4	7	2.327819863700214E-4	1	2.1273153572848481E-4	6	1.8774342292520802E-4
6	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/104.txt	7	0.9489502365148181	8	0.030091466847852504	4	0.017936457663121977	9	0.0013482824985091328	0	3.7986419553884905E-4	5	3.141861834124008E-4	3	2.889445824352445E-4	2	2.6964174000656E-4	1	2.2359178288566958E-4	6	1.9732799141958482E-4
7	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/105.txt	8	0.7339694064061175	7	0.1237041841318045	9	0.11889696041555338	0	0.02005288536233353	4	0.0014026751618923005	5	4.793786828705149E-4	3	4.408655780020889E-4	2	4.1141370625324785E-4	1	3.411516484151411E-4	6	3.0107890675777946E-4
8	file:/Users/markneedham/projects/mallet/mallet-2.0.7/sample-data/himym/106.txt	5	0.37064909999661005	9	0.3613559917055785	0	0.14857567731040344	6	0.09545466082502917	4	0.022300625744661403	8	3.8725629469313333E-4	3	3.592484711785775E-4	2	3.3524900189121E-4	7	3.041961449432886E-4	1	2.779945050112539E-4

The output is a bit tricky to understand on its own so I did a bit of post processing using pandas and then ran the results of that through matplotlib to see the distribution of documents for different topics sizes with different stop words. You can see the script here.

I ended up with the following chart:

2015 03 24 22 08 48

On the left hand side we’re using more stop words and on the right just the main ones. For most of the variations there are one or two topics which most documents belong to but interestingly the most uniform distribution seems to be when we have few topics.

These are the main words for the most popular topics on the left hand side:

15 topics

8       0.50732 back give call made put find found part move show side ten mine top abby front fire full fianc

20 topics

12      0.61545 back give call made put find show found part move side mine top front ten full cry fire fianc

30 topics

22      0.713   back call give made put find show part found side move front ten full top mine fire cry bottom

All contain more or less the same words which at first glance seem like quite generic words so I’m surprised they weren’t excluded.

On the right hand side we haven’t removed many words so we’d expect common words in the English language to dominate. Let’s see if they do:

10 topics

1       3.79451 don yeah ll hey ve back time guys good gonna love god night wait uh thing guy great make

15 topics

5       2.81543 good time love ll great man guy ve night make girl day back wait god life yeah years thing
 
10      1.52295 don yeah hey gonna uh guys didn back ve ll um kids give wow doesn thing totally god fine

20 topics

1       3.06732 good time love wait great man make day back ve god life years thought big give apartment people work
 
13      1.68795 don yeah hey gonna ll uh guys night didn back ve girl um kids wow guy kind thing baby

30 topics

14      1.42509 don yeah hey gonna uh guys didn back ve um thing ll kids wow time doesn totally kind wasn
 
24      2.19053 guy love man girl wait god ll back great yeah day call night people guys years home room phone
 
29      1.84685 good make ve ll stop time made nice put feel love friends big long talk baby thought things happy

Again we have similar words across each run and as expected they are all quite generic words.

My take away from this exploration is that I should vary the stop word percentages as well and see if that leads to an improved distribution.

Taking out very common words like we do with the left hand side charts seems to make sense although I need to work out why there’s a single outlier in each group.

The authors suggest that having the majority of our texts in a small number of topics means we need to create more of them so I will investigate that too.

The code is all on github along with the transcripts so give it a try and let me know what you think.

Categories: Blogs

Knowledge Sharing


SpiraTeam is a agile application lifecycle management (ALM) system designed specifically for methodologies such as scrum, XP and Kanban.