<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>The Regenerate Web</title>
  <subtitle>facilitating the regeneration of software teams</subtitle>
  <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog"/>
  <link rel="self" type="application/atom+xml" href="http://www.regenerateweb.net/blog/atom/feed"/>
  <id>http://www.regenerateweb.net/blog/atom/feed</id>
  <updated>2007-02-18T14:31:47-06:00</updated>
  <entry>
    <title>Priorities</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/363" />
    <id>http://www.regenerateweb.net/blog/node/363</id>
    <published>2007-09-20T21:20:58-05:00</published>
    <updated>2007-10-10T07:32:21-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="consensus" />
    <category term="Planning" />
    <summary type="html"><![CDATA[<p>Priorities - a cautionary tale<br />
Earlier this month was the first time in twenty years that I have not<br />
gone to work<br />
late on the first day of my kid's school. &nbsp;Don't get me wrong,<br />
I still have kids in school, it is just that due to a conflict between<br />
other work and personal schedules, I needed to schedule a critical<br />
meeting at work this morning. &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Priorities - a cautionary tale<br />
Earlier this month was the first time in twenty years that I have not<br />
gone to work<br />
late on the first day of my kid's school. &nbsp;Don't get me wrong,<br />
I still have kids in school, it is just that due to a conflict between<br />
other work and personal schedules, I needed to schedule a critical<br />
meeting at work this morning. &nbsp;</p>
<p>In my family, we have a tradition, that on the first day of school, my<br />
wife and I drive or walk the kids to school or load them on the bus,<br />
and spend some time together over breakfast remembering the summer, and<br />
thinking about how they have grown, or any school concerns we have.<br />
&nbsp;Usually my wife is concerned about being alone more.<br />
&nbsp;Over the years it has been a precious tradition, and my wife<br />
and I have come to rely on it. &nbsp;My kids have too.<br />
&nbsp;That day my 8th grader was unhappy that I was not going to be<br />
there to see him off to school. &nbsp;</p>
<p>I was scheduled to be off work the following day, as I was building a<br />
storage shed in my<br />
backyard. &nbsp;Since I arranged for a friend to come and help me<br />
with that, I had already ordered the lumber and torn down the old shed,<br />
when this meeting came up, I didn't want to try to reschedule the shed<br />
project. &nbsp;</p>
<p>My attitude that morning was one of resentment. &nbsp;I had very<br />
little confidence that this meeting would accomplish it's objective.<br />
&nbsp;We had a specific technology problem that we had been<br />
postponing solving for 6 months. &nbsp;Several times people had<br />
offered suggestions and attempted to build consensus around a solution<br />
and it had not happened. &nbsp;I was one of those and I got beaten<br />
and bruised for my effort. &nbsp;Our project was critically late,<br />
and at risk of failing it's political viability date. &nbsp;That is<br />
the date at which if we haven't delivered, it is not politically viable<br />
to be affiliated with the project. &nbsp;</p>
<p>Before the meeting I said this prayer:</p>
<div>Dear God, I<br />
pray specifically for this meeting, its outcome,<br />
and its potential to become a ruck. &nbsp;I ask that you would<br />
intervene and allow participants to behave rationally, and that<br />
consensus would emerge. &nbsp;I also pray that a plan for action<br />
around implementing the solution would also emerge that allows us to<br />
deliver before our project ceases to be politically viable. &nbsp;</div>
<p>In spite of my poor attitude, the meeting did go well and we did reach<br />
consensus.</p>
<p>So why is this about priorities? &nbsp;Because I had a personal<br />
conflict of priorities around this meeting. &nbsp;This meeting<br />
became<br />
critical, because of our lack of priority around resolving this issue,<br />
which has now become the critical path of our project. &nbsp;As a<br />
manager, I recognize that part of my job is to make sure that I (or<br />
someone I assign) control<br />
the critical path of each project by making sure that all the<br />
appropriate decisions get made before they hit the critical path.<br />
&nbsp;While there are always things that happen that are beyond our<br />
control that change the critical path - resource issues, and external<br />
forces that are unforseen, but the vast majority of things are well<br />
within our control, if we just would exercise that control.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Losing It... and Finding It Again!</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/362" />
    <id>http://www.regenerateweb.net/blog/node/362</id>
    <published>2007-09-20T21:04:48-05:00</published>
    <updated>2007-09-20T21:06:10-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="personal growth" />
    <summary type="html"><![CDATA[<p>Losing It... &nbsp;(and Finding It Again)<br />
Just dealing with the facts of a meltdown are not enough.<br />
&nbsp;Last<br />
week, I had such a meltdown. &nbsp;The circumstances are less<br />
relevant<br />
than the damage and subsequent damage control that such an event can<br />
cause. &nbsp;</p>
<p>In a phone conversation with a liaison from a software consulting firm<br />
that I employ, I lost my temper. &nbsp;I said things that threaten<br />
the<br />
relationship, that could make working with this person, and his firm<br />
much more difficult. &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Losing It... &nbsp;(and Finding It Again)<br />
Just dealing with the facts of a meltdown are not enough.<br />
&nbsp;Last<br />
week, I had such a meltdown. &nbsp;The circumstances are less<br />
relevant<br />
than the damage and subsequent damage control that such an event can<br />
cause. &nbsp;</p>
<p>In a phone conversation with a liaison from a software consulting firm<br />
that I employ, I lost my temper. &nbsp;I said things that threaten<br />
the<br />
relationship, that could make working with this person, and his firm<br />
much more difficult. &nbsp;</p>
<p>I let the frustration, and annoyance that I had been experiencing in<br />
dealing with this group leak out in my words. &nbsp;Now, when the<br />
project is in the red zone, is not the time for this. &nbsp;In any<br />
case, the lack of maturity and self-control that I displayed could have<br />
had dire consequences for the project, for the company, and for my<br />
career. &nbsp;</p>
<p>I was lucky, there was little direct damage, and the collateral damage<br />
was manageable. &nbsp;The biggest consequence was my management<br />
realizing how volatile I can be when pushed past my limits.<br />
&nbsp;In<br />
twenty-four years of employment I have probably only had<br />
two or three meltdowns like this.</p>
<p>--</p>
<p>What can I learn from this? &nbsp;How can I use this experience to<br />
diagnose risks, to identify warning signs, so that from a project<br />
perspective, I can find&nbsp;bombs like this before they go off.<br />
&nbsp;How can I communicate to my management the conditions that I<br />
was<br />
asked to work under that allowed the bomb to form. &nbsp;Where are<br />
the<br />
raw materials, the timer, the detonator? &nbsp;In other words, how<br />
can<br />
I be prepared to dismantle this bomb before it goes off?</p>
<p>--</p>
<p>Raw Material<br />
Bombs require raw material or explosive - TNT, Nitro, C4, or some<br />
incendiary agent, benzene, gasoline, etc. &nbsp;In this case it was<br />
the<br />
combination of two ingredients: a vendor who expressed a certain<br />
arrogance and unwillingness to work within the processes that constrain<br />
our other resources. &nbsp;Even the smallest facets of their work<br />
required adaptation by any person who needed to collaborate them.<br />
&nbsp;Whatever the reasons they had for doing this, it created an<br />
attitude of resentment in me, that I simply repressed and stuffed down.<br />
&nbsp;It's not that that was my first response, my first response<br />
was<br />
to confront these issues, and negotiate some compromise that allowed me<br />
to get more of what I need. &nbsp;That bringse me to the second<br />
ingredient: a perceived lack of control or power to change things.<br />
&nbsp;My manager(s) were very sold on this firm, and I inherited<br />
the<br />
relationship when I joined the project. &nbsp;As a manager, I have<br />
had<br />
varying levels of control and have had managers who were more or less<br />
prone to direct me in specific details. &nbsp;I had&nbsp;never<br />
had a<br />
vendor with more juice with my own boss than I had before. &nbsp;It<br />
was<br />
a new experience, and not terribly pleasant. &nbsp;It seemed that<br />
every<br />
time I tried to bring some visibility or accountability to bear, I got<br />
thrown under a bus and the vendor was allowed to skate. &nbsp;So<br />
the<br />
second ingredient could be a lack of support, or empowerment; or it<br />
could be a lack of control; or it could simply be my not asserting<br />
myself by presenting my manager with an ultimatum (I manage or you<br />
manage, but I can't manage if you wont stop managing).</p>
<p>The Timer<br />
Projects have built in timers. &nbsp;The schedule is<br />
always<br />
agressive, pressure builds during the project and as things slide,<br />
crushing forces converge. &nbsp;As things move towards a state<br />
where it<br />
is obvious that we cannot succeed without superhuman effort there is a<br />
building of pressure that allows events, comments, or circumstances to<br />
trigger an explosion. &nbsp;In this case it was the<br />
many&nbsp;accomodations that I and my team had made or tried to<br />
make to<br />
help this consulting vendor be successful, from pulling work back to<br />
hiring a project manager and analyst, to hiring more resources to work<br />
with their team. &nbsp;The harder I worked to help them, the more<br />
they<br />
expected me to do, and the more they attempted to identify me as the<br />
excuse for their slippage.</p>
<p>The Detonator<br />
Most explosive materials will not combust spontaneously, but require<br />
some initiation or detonation to start the explosion - be that<br />
electrical, chemical, or physical. &nbsp;In this case it was<br />
chemical.<br />
&nbsp;Consulting firm hired a new liaison who in his first week<br />
started<br />
to push expectations towards my team for work that we had agreed to do,<br />
before he was on the scene. &nbsp;He didn't even know that when he<br />
pushed the button that there would be a reation. &nbsp;However,<br />
when I<br />
started to get defensive, he just kept pushing the "BIG RED BUTTON".<br />
&nbsp;Eventually, the detonation was effective. &nbsp;</p>
<p>Instructions for<br />
dismantling<br />
When I find my self in this situation, I need to make sure that I<br />
disconnect the detonator before it gets pushed repeatedly.<br />
&nbsp;Take a<br />
walk. &nbsp;Hang up the phone. &nbsp;Tell the button pusher<br />
that you<br />
will get back to him later. &nbsp;That is a quick fix, but it<br />
doesn't<br />
dismantle the bomb. &nbsp;</p>
<p>I need to deal with the materials or the timer for that.<br />
&nbsp;Behind<br />
each of these was a conflict or a confrontation that needed to happen.<br />
&nbsp;Each conflict or confrontation had consequences. &nbsp;I<br />
needed<br />
to take responsibility for allowing the ingredients to mix to create<br />
the combustible mixture. &nbsp;By not facing up to the conflict, or<br />
confronting the situation I had allowed my own attitude to deteriorate.<br />
&nbsp;I had&nbsp;chosen to absorb all of this into my own<br />
world, and<br />
had not taken responsibilty for it. &nbsp;I allowed myself to move<br />
into<br />
the victim quadrant. &nbsp;</p>
<p>The truth is that my issue was not with my consultant, but my<br />
management. &nbsp;I needed to identify the consequences of the<br />
nature<br />
of the relationship with this vendor, and allow them to mitigate those<br />
consequences. &nbsp;After all, this wasn't personal, but business.<br />
&nbsp;If management was not willing to acknowledge the<br />
consequences,<br />
shame on them. Managers (like me) are paid to do the right thing;<br />
the right thing for the company, the project, and the staff.<br />
&nbsp;When<br />
they make decisions that have consequences that they are unwilling to<br />
acknowledge or manage, they put the people who report to them in a<br />
trick bag. &nbsp;That does not absolve me of the responsibility for<br />
staying in the bag.</p>
<p>As I now see it, I had several opportunities to crawl out of the bag:</p>
<p>1) Confront my manager with the issues - give her an opportunity to<br />
fold up the bag and move on.<br />
2) Work through an alternate tactic or strategy that mitigates the risk<br />
- perhaps my manager feels she has no alternative.<br />
3) Expose the risk beyond my management circle... &nbsp;This is a<br />
very<br />
dangerous because the person you confide in needs to protect your<br />
confidence. &nbsp;<br />
4) Move away from the project - as a last resort, one can always simply<br />
choose to walk away. &nbsp;</p>
<p>I actually contemplated 3 and 4 at various times, and thought that<br />
"hanging in there" was a better strategy. &nbsp;I realize that I<br />
discounted numbers 1 and 2 without sufficient consideration, believing<br />
that I would not be heard or respected. &nbsp;I assumed that the<br />
managers that had put me in the trick bag was unwilling to make a<br />
different decision.</p>
<p>--</p>
<p>Finding It<br />
A week later, things are different. &nbsp;My managers are now<br />
aware, of<br />
how much I was stomaching and how much resentment had built up.<br />
&nbsp;The vendor is now aware of how close their relationship was<br />
to<br />
being fruitless. &nbsp;They have made some adjustments and somehow,<br />
more progress is being made than before, and more people are happy than<br />
before. &nbsp;I don't attribute all of the change to this event.<br />
&nbsp;I think that some of it was planned or working itself out<br />
before.<br />
&nbsp;</p>
<p>I thank God that things did not turn out much worse. &nbsp;This<br />
certainly could have been a career limiting event, or even a ticket to<br />
a worse position. &nbsp;I also recognize that a more controlled<br />
confrontation can be very effective. &nbsp;I should consider being<br />
more<br />
confrontational when things are difficult and change is required and<br />
slow in coming. &nbsp;</p>
    ]]></content>
  </entry>
  <entry>
    <title>Grind It Out!</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/256" />
    <id>http://www.regenerateweb.net/blog/node/256</id>
    <published>2007-09-01T08:37:22-05:00</published>
    <updated>2007-09-20T21:09:25-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="Interviews" />
    <category term="Motivation" />
    <category term="Recruiting" />
    <summary type="html"><![CDATA[<p>Grind It Out!<br />
How do you assess a candidate's attitude toward work during an<br />
interview. &nbsp;Once on the job, and employee may exhibit an<br />
eagerness<br />
to deliver value, or a sense of urgency. &nbsp;He or she may may<br />
get<br />
bogged down in details or decisions. &nbsp;He may have expectations<br />
that he will be provided with tools, and have questions answered<br />
satisfactorily, in short, that he will be spoon fed. &nbsp;She may<br />
have<br />
a tendency schedule more meetings than are necessary. &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Grind It Out!<br />
How do you assess a candidate's attitude toward work during an<br />
interview. &nbsp;Once on the job, and employee may exhibit an<br />
eagerness<br />
to deliver value, or a sense of urgency. &nbsp;He or she may may<br />
get<br />
bogged down in details or decisions. &nbsp;He may have expectations<br />
that he will be provided with tools, and have questions answered<br />
satisfactorily, in short, that he will be spoon fed. &nbsp;She may<br />
have<br />
a tendency schedule more meetings than are necessary. &nbsp;</p>
<p>What you want is someone who will turn the handle and GRIND IT OUT!<br />
&nbsp;You want someone who pulls out a machete and hacks his way<br />
out of<br />
the details and decisions to a solution! &nbsp;You want someone who<br />
makes his own tools, proposes answers to his own questions, and rips<br />
raw meat off the bone! &nbsp;You want someone who schedules a<br />
meeting<br />
to start the project and another to plan migration when it is complete!</p>
<p>In my experience, most contract employees get this. &nbsp;They are<br />
mercenaries, hired guns who may have high opinions of themselves, lots<br />
of pride, arrogance, and swagger, but in general, they know they have<br />
to show value, fast! &nbsp;Full-time Employees may need to be<br />
reminded<br />
of this expectation, and when we hire them, we need to assess whether<br />
they have this expectation of themself. &nbsp;</p>
<p>How can we assess this aspect of a candidate during an<br />
interview? &nbsp;How fast do they like to go? &nbsp;Are they<br />
able to<br />
handle a sting of 60 hour weeks? &nbsp;Can they dig in and get<br />
started<br />
without direction? &nbsp;Are they like a tire with a slow leak -<br />
you<br />
have to keep pumping them up to keep going?</p>
<p>Ask them to describe their experience in situations where these<br />
tendencies would come out. &nbsp;</p>
<p>"Can you tell me about a time when you were on a project that was behind<br />
schedule?"<br />
"How did the team handle it?" &nbsp;<br />
"How well did that work?"<br />
&nbsp;<br />
"Given what you know now, what would you do differently?" &nbsp;<br />
What you are looking for along this path is a response that shows the<br />
candidate wants to focus, work and deliver. &nbsp;</p>
<p>"Tell me about a time when you had to start working with little or no<br />
direction?"<br />
"How did you approach this?"<br />
"How successful were<br />
you - did you get the job done?"<br />
"If you had to do that over, what<br />
would you do differently?"<br />
What you are looking for along this path is a response that shows<br />
internal leadership, bootstrapping, and digging in, not asking for help.</p>
<p>"Can you tell me about a time about a time when you were on a project<br />
where<br />
team motivation or morale was low?"<br />
"what did you personally do to overcome<br />
this?"<br />
"How well did that work?"<br />
What you are looking for is a response that indicates that this person takes responsibility for their own motivation, morale, and drive...</p>
    ]]></content>
  </entry>
  <entry>
    <title>Is there such a thing as &quot;Agile Project Management&quot;</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/202" />
    <id>http://www.regenerateweb.net/blog/node/202</id>
    <published>2007-08-20T19:27:49-05:00</published>
    <updated>2007-08-20T19:32:28-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="agile" />
    <category term="velocity" />
    <summary type="html"><![CDATA[<p>Glen Alleman of Herding Cats has been blogging about "agile project<br />
management" - and mostly I would agree with him. &nbsp;Agile<br />
project management is mostly wrapped up in a software development<br />
lifecycle, and doesn't really apply to projects dealing with in the<br />
domains of construction, engineering, or the like. &nbsp;I also<br />
agree that agile project management is a misnomer, because it misses<br />
many of the aspects of project management altogether. &nbsp;On the<br />
otherhand, it is more than a means of fulfilling certain project</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Glen Alleman of Herding Cats has been blogging about "agile project<br />
management" - and mostly I would agree with him. &nbsp;Agile<br />
project management is mostly wrapped up in a software development<br />
lifecycle, and doesn't really apply to projects dealing with in the<br />
domains of construction, engineering, or the like. &nbsp;I also<br />
agree that agile project management is a misnomer, because it misses<br />
many of the aspects of project management altogether. &nbsp;On the<br />
otherhand, it is more than a means of fulfilling certain project<br />
management activities, because it attempts to alter the conversation<br />
with the customer.</p>
<p>OK Glen, &nbsp;so perhaps by your definition, I am not an agilist.<br />
&nbsp;However, I suspect that your statement about agilist's<br />
abandoning<br />
planning, and scheduling are unfair.</p>
<p>When I started to investigate agile "practices", it was primarily a<br />
reaction to the culture of the organization that I was in, and a<br />
particular fixation with the schedule. &nbsp;My experience with<br />
software development projects as a practitioner (software<br />
developer/requirements engineer/analyst/designer) revealed that once<br />
the schedule was proposed, all discussion of value delivery stopped.<br />
&nbsp;As project lead, my job became to delay the proposal of<br />
schedules<br />
until all of the scope decisions had been made. &nbsp;Because the<br />
schedule was fixed, we weren't free to re-sequence delivery, we<br />
couldn't dynamically swap one valued feature for another. &nbsp;We<br />
were<br />
required to adopt a "change control" mentality that effectively blocked<br />
out change at any time in the lifecycle after the schedule was<br />
proposed, because any change would cause the schedule to move.<br />
&nbsp;Management was<br />
completely fixated on the schedule.<br />
 style="font-weight: bold;"&gt;&nbsp; I have<br />
blogged about this phenomenon before.</p>
<p>What I found with agile practices was not a solution to all of the<br />
problems of software development (agile does not help you design a user<br />
interface), nor a comprehensive solution to the problems associated<br />
with software development projects. &nbsp;What I found was a<br />
different<br />
way of framing the value/scope/schedule discussion, so that I could<br />
fix&nbsp;the schedule in smaller chunks (iterations) and the<br />
business<br />
could continue to evolve their priorities without imposing change on<br />
the current fixed portion of the schedule.</p>
<p>So, now agile has devolved into XP+Scrum, and the rest of the practices<br />
that were agile, have sort of gone their way, there are many people who<br />
are "post-agile" - those that embraced the agile practices, understood<br />
them for what they are, and adopted those that added value to their<br />
work. &nbsp;As I work in the financial industry, I have had to<br />
adopt a<br />
more "enterprise-friendly" set of agile practices. &nbsp;But the<br />
benefit of being able to have a continuous conversation about scope,<br />
priorities, and value deliverywith your customer and user community, is<br />
that one can deliver value in smaller chunks, much more frequently, and<br />
this mitigates the risk of DAO&nbsp;(delivered already obsolete)<br />
software, or having your project cancelled before you delivered<br />
anything (I have lived through both). &nbsp;</p>
<p>Lemme rip into another statement you made casually in a previous post<br />
called <a br /><br />
 href="http://herdingcats.typepad.com/my_weblog/2007/06/more-statistics.html"&gt;more<br />
statistics</a>. &nbsp;</p>
<div>"The traditional agile<br />
approach is to push these questions to the<br />
customer, then use velocity or some other "driving in the rear view<br />
mirror" approach to inform the customer how much money has been spent<br />
and how many features made it into the current release. All interesting<br />
things to cost accountants. But not that useful for forecasting the<br />
credibility of the plan, compliance with the "not to exceed" budget and<br />
the probability of fulfilling the business case on the "go live" date."</p>
</div>
<div>
The planning/tracking approaches that I have been promoting fall<br />
directly in the path of forecasting the credibility of the plan,<br />
compliance with budget, but not the probability of fulfilling the<br />
business case on live date - unless you wish to consider work moved out<br />
of scope to comply with a schedule or budget. &nbsp;Perhaps what<br />
you are missing is the connection between velocity and distance to the<br />
target. &nbsp;By taking weekly snapshots of resource burn, distance<br />
to the target, and&nbsp;velocity of the team, we can create a very<br />
credible forecast. &nbsp;Any planning/tracking approach, is based<br />
on metrics that ought to be designed to corner the truth of our status<br />
with some certainty (or very little wiggle room). </p>
<p>The problem with these or any other metrics, is that &nbsp;when<br />
there are no adjustments to be made on the race car, the metrics only<br />
tell us that we are going to lose the race. &nbsp;When your budget<br />
cannot accomodate any additional resources, your dates cannot slip,<br />
there are two choices - reduce value delivery, reduce quality, or both.<br />
&nbsp;What the agile practices do better for software projects is<br />
to move initial value delivery (and the conversations that go with it)<br />
earlier in the lifecycle. &nbsp;</p>
</div>
    ]]></content>
  </entry>
  <entry>
    <title>Zealots vs. Mercenaries</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/23" />
    <id>http://www.regenerateweb.net/blog/node/23</id>
    <published>2007-04-06T21:45:10-05:00</published>
    <updated>2007-04-06T21:45:10-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <summary type="html"><![CDATA[<p>In my last post, I used an analogy between software development tools<br />
and religions. &nbsp;I found the analogy amusing, and illustrative,<br />
and wanted to blather on for a bit about it. &nbsp;Not all<br />
developers are religious, some developers do it for the money.<br />
&nbsp;In this analogy, there are two breeds of software developers,<br />
mercenaries and zealots. &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>In my last post, I used an analogy between software development tools<br />
and religions. &nbsp;I found the analogy amusing, and illustrative,<br />
and wanted to blather on for a bit about it. &nbsp;Not all<br />
developers are religious, some developers do it for the money.<br />
&nbsp;In this analogy, there are two breeds of software developers,<br />
mercenaries and zealots. &nbsp;</p>
<p>Mercenaries<br />
are concerned about weapon proficiency. &nbsp;They want to be<br />
comfortable using any weapon, &nbsp;they know how to assemble and<br />
disassemble any kind of gun, can set up any development environment in<br />
a heartbeat. &nbsp;They are focused on firepower, and maximum<br />
utility, pure take down. &nbsp;They don't necessarily know the<br />
deepest secrets of the lore of the weapon manufacturer. &nbsp;They<br />
are not gun collectors, they are&nbsp;marksmen. &nbsp;They<br />
would select a weapon (software tool, language, compiler) for it's<br />
ability to produce software. &nbsp;They will use whatever the<br />
customer provides, whatever their employer has available, they will<br />
become proficient on new tools quickly, because that is what they do.<br />
&nbsp;That is how they survive and succeed. &nbsp;Mercenaries<br />
are agnostic, or at least non-denominational. &nbsp;They will use<br />
whatever is available and complain when it doesn't have sufficient<br />
firepower.</p>
<p>Zealots are<br />
a different breed. &nbsp;They are always looking for the ultimate,<br />
the best, the most amazing, the most elegant, the most efficient, the<br />
most pure. &nbsp;They have a need to believe, to believe that the<br />
tool that they have chosen is the best. &nbsp;They are into the<br />
lore, they know the name, and some personal history of the original<br />
author of the language they have chosen. &nbsp; They are part of<br />
the "community" for the tools that they choose. &nbsp;They want to<br />
master, to tame, to understand how to wring, squeeze, or coax the last<br />
ounce of capability out of a tool. &nbsp;They "go native", and<br />
understand the tool, in the way that it was designed. &nbsp;They<br />
are focused on the beauty, the elegance of a solution, and they give<br />
credit to the tool, the community, and the original author for their<br />
contribution to the solution. &nbsp;Zealots are often evangelistic,<br />
trying to drum up support for their religion. &nbsp;They donate<br />
money to build the temple, and if they are lucky, will get to be a part<br />
of the priestly class (write a book, blog, or contribute to an open<br />
source project). &nbsp;</p>
<p>Mercenaries take credit for their kills, whereas zealots bring the<br />
kills back to the commune. &nbsp;Mercenaries share war stories,<br />
zealots&nbsp;post code galleries. &nbsp;Zealots will spend time<br />
mentoring, indoctrinating, coaching, and holding court for anyone who<br />
will listen, mercenaries are either on a mission or in a bar.<br />
&nbsp;Zealots retool out of frustration (with former tools),<br />
mercenaries retool out of expedience. &nbsp;Mercenaries know how to<br />
use a tool, zealots know how the tool wants to be used.</p>
<p>Most of you who have been in this industry for a while have interacted<br />
with both breeds of software developers. &nbsp;It is not that one<br />
is better than the other. &nbsp;Both can write extremely solid<br />
code, very quickly, and under pressure. &nbsp;There are probably<br />
other attributes that can be applied to each breed, but they would be<br />
generalizations. &nbsp;Some developers can change breeds based on<br />
the situation, although each would have a default breed.<br />
&nbsp;Others would struggle to shift breeds except under extreme<br />
duress.</p>
<p>As a manager, it is important to understand how your developers fit on<br />
this continuum. &nbsp;Mercenaries and zealots are motivated<br />
differently. &nbsp;Moreover, it is not just developers that follow<br />
this continuum - managers, project managers and analysts also have<br />
their ideologies. &nbsp;It is important to understand, because at<br />
the extremes of the continuum there is very little understanding (or<br />
tolerance) of the other extreme. &nbsp;</p>
<p>I myself lean a little toward the zealot. &nbsp;I spend a lot of<br />
time in the world of ideas. &nbsp;Strength or weakness?</p>
    ]]></content>
  </entry>
  <entry>
    <title>Programming Languages: Fashion or Religion</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/22" />
    <id>http://www.regenerateweb.net/blog/node/22</id>
    <published>2007-04-05T08:40:27-05:00</published>
    <updated>2007-04-05T08:46:48-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="function points" />
    <category term="metrics" />
    <category term="programming" />
    <category term="python" />
    <category term="ruby" />
    <summary type="html"><![CDATA[<p>I just read Bob on development's post <a br /><br />
 href="http://bobondevelopment.com/2007/04/04/on-software-development-fashions/"<br />
 target="_blank"&gt;<br />
On Software Development Fashions&nbsp;</a> which is a riff on<br />
<a href="http://www.hacknot.info/hacknot/action/showEntry?eid=93">this<br />
post</a> &nbsp;from "Ed Johnson" the Hacknot blog.<br />
&nbsp;The basic<br />
idea of the original post is that there is no evidence of one<br />
programming language engendering higher productivity than another, with<br />
the specific issue that the current crop of dynamic languages (Ruby,</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>I just read Bob on development's post <a br /><br />
 href="http://bobondevelopment.com/2007/04/04/on-software-development-fashions/"<br />
 target="_blank"&gt;<br />
On Software Development Fashions&nbsp;</a> which is a riff on<br />
<a href="http://www.hacknot.info/hacknot/action/showEntry?eid=93">this<br />
post</a> &nbsp;from "Ed Johnson" the Hacknot blog.<br />
&nbsp;The basic<br />
idea of the original post is that there is no evidence of one<br />
programming language engendering higher productivity than another, with<br />
the specific issue that the current crop of dynamic languages (Ruby,<br />
Python, etc.) being the primary topic. &nbsp;There are many, many<br />
proponents of these languages, and I have come into contact with a few.<br />
&nbsp;Languages (and editors) tend to become a religion with some<br />
developers. &nbsp;I would also say, that some programmers tend to<br />
become "high priests" of whatever programming language they are<br />
currently using. &nbsp;You will never convince a high priest that<br />
his or her religion is not "true". &nbsp;</p>
<p>What both articles fail to recognize is that there are organizations<br />
who have spent a significant amount of time documenting the difference<br />
in productivity between languages, not so much as a means of selecting<br />
a development tool, but as a way of validating estimates.<br />
&nbsp;Back in the '70's the group who created Function Point<br />
Analysis actually started ranking languages in terms of level, and<br />
specifically levels were based on how many SLOC (source lines of code)<br />
were required to complete a function point - with the idea that the<br />
less lines of code the more function points a developer could build in<br />
the same period of time, give or take.</p>
<p>There is a <a br /><br />
 href="http://www.cs.bsu.edu/homepages/dmz/cs697/langtbl.htm"&gt;language<br />
level table</a><br />
that has been published and revised over the years to include many<br />
(hundreds)<br />
languages. &nbsp;Unfortunately Ruby and Python are not on this<br />
version. &nbsp;So, Ed, there is a community that is focused on<br />
software metrics that does try to empirically measure the productivity<br />
that each language brings - simply in terms of the number of lines of<br />
code per some defined chunk (function point). &nbsp;Unfortunately,<br />
they are also a religion, and it appears that one cannot get the<br />
current table without a paid subscription to one of their sites.<br />
&nbsp;I, not being a true believer in that religion, do not have<br />
access. &nbsp;</p>
<p>That said, &nbsp;I agree with both Ed and Bob that it is unlikely<br />
that any language gives a 10-fold (90% reduction in code) increase in<br />
productivity to the developer. &nbsp;or even a 5-fold (80%<br />
reduction in code) increase. &nbsp;What I have seen is that the<br />
best developers, when working in their chosen paradigm, outproduce the<br />
average by that same factor of 5 or 10. &nbsp;That is a smart<br />
coder, working in a language that he has<br />
 style="font-weight: bold;"&gt;truly mastered,<br />
 style="font-weight: bold;"&gt;and likes, can<br />
outproduce me and you by a factor of 5 or 10. &nbsp;When I find the<br />
language that lets me code like that, I will convert to it's cult, and<br />
try to become a high priest. &nbsp;Why, because it feels really,<br />
really good, to be supremely productive. &nbsp;When your teammates<br />
look at you as if you were a god, that is a form of programming<br />
nirvana. &nbsp;</p>
<p>But Ed's beef was specifically around dynamic languages. &nbsp;I<br />
want to speak to this, because the first (and only) language where I<br />
approached true mastery is a dynamic language. &nbsp;Interestingly,<br />
there are interpreted (normal) and compiled versions of this language,<br />
and working in both, I didn't notice a tremendous productivity<br />
difference, because the compiled version had an interpretive run-time<br />
engine built in, so it "simulated" interpretation. &nbsp;This is<br />
necessary to be able to execute code out of a string at run-time.<br />
&nbsp;The power of this language came from it's underlying<br />
paradigm, the dynamic typing was something that allowed one to<br />
introduce errors unintentionally, and one actually had to<br />
 style="font-weight: bold;"&gt;write extra code to<br />
test variables to ensure that they had the right properties.</p>
<p>The true power of this language was the ease with which one could build<br />
data-driven applications. &nbsp;The language primitives contained<br />
some powerful string manipulation functions that could be combined to<br />
great advantage in dealing with complex string manipulation<br />
applications like interfaces or messaging. &nbsp;The language<br />
supported code and data indirection, so that one could hide the name of<br />
a variable or database record in a variable and refer "through" like<br />
pointers but not nearly as abstract. &nbsp;One could also drop<br />
executable code in a variable and move it around then execute when<br />
desirable. &nbsp;Is that self modifying code? &nbsp;No - that<br />
would mean that the original program modified itself in memory.<br />
&nbsp;This is merely an additional form of dynamism.<br />
&nbsp;Slurp code out of the database, then execute was as simple as<br />
locating the code, and a single line of code to execute. &nbsp;</p>
<p>Does that sort of power make programs complex? Difficult to maintain?<br />
Hard to understand? Hell yes! &nbsp;Does it mean that we shouldn't<br />
use those language features? &nbsp;Hell no! &nbsp;With this<br />
caveat - you need to carefully control how these features are used in a<br />
production system, and ensure that there is adequate documentation for<br />
those who come behind to understand how you wrote an XML parser in 200<br />
lines of code, or some other amazing feat of programming wizardry.<br />
&nbsp;</p>
<p>One thing about interpreted languages (I currently use python, and php<br />
the most) is that they let you write code from the inside out and test<br />
it without much hassle - that is, I write functions and test them long<br />
before I write the main. &nbsp;Because of the interpreter, I can<br />
get a command line from which I can call my function like a verb<br />
&nbsp;and see the result:</p>
<p>&nbsp;<br />
&nbsp;print ( object-&gt;method('test1', 123, 345));</p>
<p>That allows me to get a considerable way down the path before I worry<br />
about larger chunks of code than functions or methods.</p>
<p>Working with unit test harnesses gives me much the same ability but I<br />
have to build first in a compiled language, which even if it takes a<br />
minute, means I am going slower than interpreted mode. &nbsp;In<br />
interpreted mode, I close the editor, execute the function, and see the<br />
result. &nbsp;Bam! &nbsp;I have even baked a script where I<br />
have the unit tests baked into the edit cycle, so that I close the<br />
editor, and the editor script automatically runs the unit tests for the<br />
file that I am editing when I close the editor, and will prompt to<br />
re-open the editor if any of them fails. &nbsp;That can be done in<br />
any interpreted language with a little workstation automation.<br />
&nbsp;There is a tremendous power to the immediacy of this idiom,<br />
code-test-repeat-until-done.</p>
<p>Each language brings with it certain primitives that were pre-existent<br />
in the mind of it's author, that when the fully resonate in a<br />
developer's mind, they create power and productivity. &nbsp;Any<br />
language that one picks up, it pays well to sit at the feet of a high<br />
priest or at least a true believer and understand deeply where the<br />
power comes from. &nbsp;I had this experience with Python recently,<br />
and took a simple desktop automation script to the local high priest<br />
for review. &nbsp;After he looked at my crappy code, he recommended<br />
some more efficient ways of doing the same thing that took more<br />
advantage of Pythons capabilities. &nbsp;He asked me how long I had<br />
been using Python, and when I told him that this was my first script,<br />
he said - not bad for a first try. &nbsp;Supreme validation for a<br />
novice from the high priest - maybe I can convert to this religion...</p>
    ]]></content>
  </entry>
  <entry>
    <title>Agile Mastery</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/20" />
    <id>http://www.regenerateweb.net/blog/node/20</id>
    <published>2007-03-22T08:53:47-05:00</published>
    <updated>2007-03-24T14:07:03-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="agile" />
    <summary type="html"><![CDATA[<p>Dave Thomas asked a question about <a br /><br />
 href="http://pragdave.pragprog.com/pragdave/2007/03/agile_mastery.html"&gt;mastery</a>,<br />
especially regarding agile<br />
practices, in his <a href="http://pragdave.pragprog.com/pragdave/">PragDave<br />
blog</a>.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Dave Thomas asked a question about <a br /><br />
 href="http://pragdave.pragprog.com/pragdave/2007/03/agile_mastery.html"&gt;mastery</a>,<br />
especially regarding agile<br />
practices, in his <a href="http://pragdave.pragprog.com/pragdave/">PragDave<br />
blog</a>.</p>
<div>The<br />
more I think about that, the<br />
more the title worries me, because<br />
it seems to contain an implicit assumption&mdash;that mastery is<br />
some state<br />
that can be reached.<br />
I think there are methodologies which can be mastered, where<br />
you can<br />
say &ldquo;now I know it all.&rdquo; I don't believe agility is<br />
in that camp. For<br />
me, agility is all about the journey. Along the way, we'll always be<br />
faced with forks in the road. The agile principles help us decide which<br />
to take. And we just carry on, enjoying the trip and doing our best<br />
along the way.
</div>
<p>I want to poke at the word mastery a little bit. &nbsp;It is one of<br />
my<br />
favorite words because it describes something that we don't understand<br />
today, as well as we understood it before. This is especially true in<br />
information technology, where new ideas arrive at a rate where only<br />
those delivering these ideas to the community have time to achieve true<br />
mastery, but that is a different problem.</p>
<p>In the age when trades were regulated by guilds, rather than organized<br />
labor, there were specific requirements for achievement of each rank.<br />
&nbsp;As I understand it, one of the requirements for mastery in<br />
most<br />
trades was the ability to construct one's own tools. &nbsp;I<br />
learned this from my 8th grade shop teacher, who showed me how to<br />
sharpen wood chisels with a buffing wheel and jewelers rouge - he made<br />
me promise not to tell anyone because this was his trade<br />
secret.&nbsp; After doing some basic research, I realize that this<br />
understanding is assumed in another - the master had to make their own<br />
tools, because they owned the workshop - a master was allowed to set up<br />
their own workshop. &nbsp;Each<br />
master's tools were his competitive edge. &nbsp;These tools and his<br />
mastery were his "trade secrets" and he guarded them zealously, because<br />
they key to his financial success. &nbsp;At some point during the<br />
industrial age, tools became much more standardized and toolmaking<br />
became a trade in its own right, and tradesmen purchased their tools<br />
rather than making them, or working for a master. &nbsp;</p>
<p>So what on earth does this have to do with agile, I can almost hear you<br />
asking. &nbsp;Absolutely everything. &nbsp;I agree with Dave<br />
when he<br />
says that "agility is all about the journey". &nbsp;In fact, what<br />
agile<br />
practitioners are is navigators. &nbsp;Agile isn't about the<br />
practices,<br />
the practices are merely the vessel in which we take the journey.<br />
&nbsp;Not every vessel is appropriate for every journey, the master<br />
is<br />
one who can decide which practices make sense for this particular<br />
journey, and can adapt the vessel on the fly, tuning the practices to<br />
the specifics of the team or project.</p>
<p>Those of us who are less experienced with agile practices, having only<br />
implemented parts or aspects, or all of a single methodology on one or<br />
two teams or projects may try to repeat our experience and be<br />
frustrated when we don't repeat our original positive experience, are<br />
not masters, but journeymen, who need to borrow our tools from a master<br />
craftsman. &nbsp;We need the experience of an agile coach who can<br />
see<br />
where we are missing the boat, so to speak. &nbsp;</p>
<p>I am thankful for the masters who have gone before - the pioneers -<br />
Beck, Highsmith, Cockburn, Beedle, etc. &nbsp;They have built ships<br />
that I can sail, and I need to learn from their experience. &nbsp;I<br />
think that there are many, many more who have learned from the these<br />
masters, and have crafted their own vessels, sailed off to distant<br />
shores, but have not shared their saga with the community. &nbsp;</p>
<p>I suppose that I disagree with Dave in his definition of mastery, that<br />
mastery is the point when one can say, "Now I know it all" is what I<br />
disagree with. &nbsp;That would be like saying that a master<br />
carpenter<br />
will never see a situation that requires him to be "creative".<br />
&nbsp;In<br />
fact, I would suggest that innovation comes from the fact that mastery<br />
does not mean "I know it all", but it means I can try something when<br />
what I have done before doesn't work. &nbsp;I submit that one is a<br />
master of agile, when one can invent a practice that works where others<br />
fail, while maintain the tenets of agility.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Requirements Modeling - Business Rules</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/19" />
    <id>http://www.regenerateweb.net/blog/node/19</id>
    <published>2007-03-15T04:43:14-05:00</published>
    <updated>2007-03-24T13:55:58-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="agile" />
    <category term="modeling" />
    <category term="requirements" />
    <summary type="html"><![CDATA[<p>Have you ever been part of a requirements process that<br />
stalled?&nbsp; Sometimes this happens because<br />
the requester or delegate parties responsible for providing<br />
requirements were unable to provide complete sets of what ultimately<br />
would become the business rules that your solution would need to<br />
contemplate. &nbsp;Perhaps it is because the policies are in the<br />
process of changing, and are not defined today. &nbsp;Perhaps the<br />
request is dependent on other changes that are being made in related<br />
business processes which also are not finalized. &nbsp;Perhaps it<br />
is</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Have you ever been part of a requirements process that<br />
stalled?&nbsp; Sometimes this happens because<br />
the requester or delegate parties responsible for providing<br />
requirements were unable to provide complete sets of what ultimately<br />
would become the business rules that your solution would need to<br />
contemplate. &nbsp;Perhaps it is because the policies are in the<br />
process of changing, and are not defined today. &nbsp;Perhaps the<br />
request is dependent on other changes that are being made in related<br />
business processes which also are not finalized. &nbsp;Perhaps it<br />
is<br />
because there are too many cooks in the kitchen. &nbsp;At the end<br />
of<br />
the day, it just doesn't<br />
matter why, in order to complete the project,<br />
you have to have adequate requirements that intelligently contemplate<br />
the business rules. &nbsp;</p>
<p>If features and functions are the soul of solution proposal, informing<br />
us of what will be delivered,&nbsp;<br />
 style="font-weight: bold;"&gt;business rules<br />
are the soul of detailed software requirements, informing us of how the<br />
features and functions will work. &nbsp;They drive our ability to<br />
deliver work flow, data and process validation, integration, process<br />
risk mitigation, in general all of the key benefits of automation.<br />
&nbsp; While it is certainly true that we cannot<br />
 style="font-style: italic;"&gt;complete a software<br />
delivery project without contemplating detailed business rules,<br />
 style="font-weight: bold;"&gt;must<br />
the inability of the customer to deliver detailed business rules<br />
impede our ability to start design and construction of<br />
the software?<br />
&nbsp;</p>
<p>To restate the question, can we design such that final business rules<br />
decisions can be deferred until some time during the construction<br />
process, without unnecessary risk of major obsolescence of the product?<br />
&nbsp;Let's examine the reasons why we probably should design in<br />
this<br />
way to begin with, and see if we can't understand why this is a best<br />
practice, rather than a necessary evil.<br />
Reasons for designing to defer requirements</p>
<ol>
<li>Rules are malleable! - If policies, processes, or<br />
leadership is<br />
shifting on the customer side, what is the likelihood that it will<br />
continue to shift and change after our product is released?<br />
&nbsp;We<br />
should remember that we are not dealing with the "immutable" laws of<br />
the physical universe.</li>
</li>
<li>Indecision is not uncommon! - If our customer changes his<br />
or her<br />
mind, why should it turn the project upside down? &nbsp;If we know<br />
that<br />
the customer is having trouble reaching decisions around rules, we<br />
should build our plan to contemplate this problem. &nbsp;While this<br />
    might increase the<br />
cost of the project, we should clearly communicate<br />
this to our customer, because it will likely be a pattern that repeats<br />
in the customer enterprise.</li>
</li>
<li>Business means change! - Just because it is convenient for<br />
our<br />
idiom to fix (make them appear to be static) rules so that we can<br />
deliver software, business is<br />
constantly changing. &nbsp;Regardless of the business your customer<br />
is<br />
in, or how stodgy or stagnant their business model is, the world around<br />
them is changing and they will need to adapt. &nbsp;Markets,<br />
government<br />
regulations, technology, and staff turnover are all drivers of change<br />
into an organization. &nbsp;If you think that your design doesn't<br />
need<br />
to contemplate change, then you are missing the point. &nbsp;</li>
</li>
</ol>
<p>Modeling change in requirements<br />
Rather than reacting to changes in requirements, why can't we simply<br />
incorporate the need to contemplate change into the requirements.<br />
&nbsp;Software engineers have devised design strategies like "data<br />
driven", and "object oriented" specifically to deal with this problem,<br />
yet we, as analysts, have not understood that we can leverage these<br />
strategies. &nbsp;We continue to develop requirements as if we are<br />
part<br />
of a physical hardware, construction, engineering, project.<br />
&nbsp;That<br />
is, we start with an assumption&nbsp;that when the project is<br />
completed, no change will<br />
happen. &nbsp;We don't recognize that software can and does change<br />
with<br />
the business that we deploy it for. &nbsp;We&nbsp;gather<br />
requirements<br />
casting phased delivery as static targets, rather than points along a<br />
continuum. &nbsp;</p>
<p>I have heard in recent discussions about various approaches to making<br />
decisions about software&nbsp;design. &nbsp;One approach that<br />
intrigued<br />
me involves taking out "options" to hedge against change. &nbsp;In<br />
this<br />
approach "options" involve a more generalized design model that costs<br />
more to deliver, but will support a greater range of motion within the<br />
solution around a specific axis. &nbsp;In requirements engineering,<br />
in<br />
order to enable the design team to contemplate these options, we need<br />
to deliver requirements that contemplate the possibility and<br />
probability of changes to the solution along specific axes within the<br />
problem space. &nbsp;If the requirements cannot predict the<br />
probability<br />
of change, then the design cannot accommodate it.</p>
<p>What if when we were gathering requirements, we contemplated probable<br />
change within the business. &nbsp;Of course we don't want to assume<br />
or<br />
predict what will happen, but we certainly know what might happen. If<br />
we required a software product to be designed to support a<br />
 style="font-weight: bold;"&gt;range of possibilities,<br />
we could allow the designers to model the change into the software,<br />
rather than merely reacting to it. &nbsp;Of course, there is some<br />
cost<br />
to model software this way. &nbsp;We could simply compare the cost<br />
of&nbsp;building&nbsp;to model changeability versus the cost of<br />
static<br />
design,<br />
plus subsequent reaction to changes. &nbsp;This is definitely a pay<br />
me now or pay me later proposition, where the cost of pay me later can<br />
be ten times the cost of pay me now.<br />
Business rules as a target for modeling change<br />
Business rules provide a great opportunity to&nbsp;model change.<br />
&nbsp;Business rules are fairly granular, that is they can reveal<br />
significant detail. &nbsp;When final rules cannot be agreed upon,<br />
we<br />
can propose some interim or prototype rules, to express the underlying<br />
concepts that rules should be able to contemplate. &nbsp;Typically<br />
systems use different "classes" of rules to solve different business<br />
problems, so a&nbsp;purpose-based rule taxonomy is a<br />
good&nbsp;starting point for rule<br />
modeling. &nbsp;Each rule class can be modeled based on the data<br />
elements that must be contemplated to execute the rules. &nbsp;Rule<br />
classes can also be modeled in terms of the&nbsp;range of "possible<br />
actions" that can be driven as the rules "fire". &nbsp;If<br />
contemplated<br />
data and possible actions for a given rule class are not likely to<br />
change, even when the rules&nbsp;(specific conditions under which<br />
actions are fired) are allowed to change dramatically, then the final<br />
requirements can be deferred well into the construction phase of the<br />
software development process. &nbsp;In fact, sample rules that test<br />
the<br />
contemplation of each&nbsp;data element and fire each of the<br />
actions<br />
can be developed, until the final rules are agreed. &nbsp;</p>
<p>So how can we model change when the data<br />
contemplated by the rule class<br />
has a high probability of change? &nbsp;In my experience, this is<br />
often<br />
driven by a need to acquire or cleanse data so that it is both<br />
available and&nbsp;suitable for contemplation by rules.<br />
&nbsp;Sometimes, new business strategies place greater emphasis on<br />
different data elements. &nbsp;I am asking you to model the<br />
business<br />
requirements - that is, it is not our job to design the solution, only<br />
to describe the problem - if the problem has strong future state<br />
probabilities where business rules would change then we should model<br />
that change in the requirements.</p>
<p>This would allow the solution proposal to<br />
include an option to hedge against that change.<br />
 style="font-weight: bold;"&gt;</p>
    ]]></content>
  </entry>
  <entry>
    <title>Software Product Management</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/18" />
    <id>http://www.regenerateweb.net/blog/node/18</id>
    <published>2007-03-15T04:33:59-05:00</published>
    <updated>2007-03-15T04:40:50-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="leader" />
    <summary type="html"><![CDATA[<p>Skip Angel (of Random Thoughts of a CTO) &nbsp;has a new blog<br />
called <a href="http://leanagile.blogspot.com/">Leaning Towards Agility.</a> &nbsp;His recent <a br /><br />
 href="http://leanagile.blogspot.com/2007/03/making-things-more-difficult-than-they.html"&gt;post</a><br />
about making things more difficult was quite amusing.</p>
<p>At the end, he asked a question about products. &nbsp;</p>
<div>I<br />
wonder if this happens the same way with products. We<br />
quickly expect<br />
that the products don't work and try to make them do something<br />
different as a result. We don't realize that perhaps we just don't<br />
understand how the product was designed. Once we do understand that, we<br />
may realize that the product is actually working as it should!</div>
    ]]></summary>
    <content type="html"><![CDATA[<p>Skip Angel (of Random Thoughts of a CTO) &nbsp;has a new blog<br />
called <a href="http://leanagile.blogspot.com/">Leaning Towards Agility.</a> &nbsp;His recent <a br /><br />
 href="http://leanagile.blogspot.com/2007/03/making-things-more-difficult-than-they.html"&gt;post</a><br />
about making things more difficult was quite amusing.</p>
<p>At the end, he asked a question about products. &nbsp;</p>
<div>I<br />
wonder if this happens the same way with products. We<br />
quickly expect<br />
that the products don't work and try to make them do something<br />
different as a result. We don't realize that perhaps we just don't<br />
understand how the product was designed. Once we do understand that, we<br />
may realize that the product is actually working as it should!</div>
<p>A few years ago I was a de facto product manager, running an application<br />
team and<br />
dealing with product decisions, I learned very quickly that about 40%<br />
of our application support calls were actually usability issues.<br />
&nbsp;Software usability as an issue is defined as any misalignment<br />
between the<br />
users expectation for how the software should work, and how it actually<br />
works. &nbsp;You may think this is a strange definition for<br />
usability,<br />
but in reality, if a large percentage of your user base expects<br />
software to work a certain way, you are better off building it that<br />
way, than you are trying to change the mind of most of your users.</p>
<p>I also used to perform training for this software product.<br />
&nbsp;(Wait,<br />
this is really relevant) I worked with our HR based training folks to<br />
get a basic structure for the training protocol (because I had never<br />
built a training protocol before). &nbsp;We disagreed about how to<br />
start the training. &nbsp;I felt that it was important to start<br />
with an<br />
overview of some of the basic assumptions that the software makes<br />
(product worldview), that sets expectations and explains the work<br />
paradigm that the software implements. &nbsp;I built the training<br />
protocol this way, especially because I was rolling out to a new group<br />
of corporate users for whom I was replacing an existing vended product,<br />
that had a very different worldview or paradigm than my product.<br />
&nbsp;I felt that I needed to get out there early to counteract<br />
their<br />
expectations. &nbsp;While I felt that it was really important to<br />
set<br />
the users up with an understanding of the paradigm before we entered<br />
the "how-to" section. &nbsp;Since I didn't do the training any<br />
other<br />
way, I don't have a direct comparison to say that what I did was<br />
better, but the training was successful, and I got mostly positive<br />
feedback from users many of them recognizing that I explained how the<br />
software "thinks" and that was helpful to them.</p>
<p>Some of the feedback I received was different though. &nbsp;I was<br />
told<br />
with some regularity that the software did not work the way some users<br />
think. &nbsp;When we look at the logs for support calls, we can see<br />
trends that identify these gaps in&nbsp;alignment. &nbsp;I am<br />
not<br />
advocating that we rearchitect the software to align with users<br />
worldview. &nbsp;In a corporate environment that supports work<br />
process diversity,<br />
one could argue that there will always be some issues with alignment.<br />
&nbsp;Just know that we can recognize these patterns from our<br />
conversations<br />
with users. &nbsp;</p>
<p>Sometimes we can use training or education to align expectations,<br />
sometimes we should embrace the users expectations. &nbsp;One job<br />
of<br />
software product managers is to understand when to do one or the other.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Flow and Pace</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/17" />
    <id>http://www.regenerateweb.net/blog/node/17</id>
    <published>2007-03-15T04:29:16-05:00</published>
    <updated>2007-03-15T04:30:11-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="leader" />
    <summary type="html"><![CDATA[<p>Lisa Haneberg over at <a href="http://managementcraft.typepad.com">Management<br />
Craft</a> provides this insight about&nbsp;<a br /><br />
 href="http://feeds.feedburner.com/%7Er/ManagementCraft/%7E3/96100785/improving_pace_.html"&gt;Improving<br />
Pace at Work</a>.</p>
<p>Since I had been thinking about this topic all weekend, and had already<br />
threatened to post about it, I am going for it.</p>
<p>My original thoughts came from my experience with the martial arts.<br />
&nbsp;I started a program at the beginning of the year (for the<br />
first<br />
time) primarily out of my need to exercise. &nbsp;I wanted an<br />
exercise<br />
regimen that would occupy my mind as much as my body, because the<br />
running, cycling, lifting, cardio-machining that I had been doing were<br />
somewhat mindless.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Lisa Haneberg over at <a href="http://managementcraft.typepad.com">Management<br />
Craft</a> provides this insight about&nbsp;<a br /><br />
 href="http://feeds.feedburner.com/%7Er/ManagementCraft/%7E3/96100785/improving_pace_.html"&gt;Improving<br />
Pace at Work</a>.</p>
<p>Since I had been thinking about this topic all weekend, and had already<br />
threatened to post about it, I am going for it.</p>
<p>My original thoughts came from my experience with the martial arts.<br />
&nbsp;I started a program at the beginning of the year (for the<br />
first<br />
time) primarily out of my need to exercise. &nbsp;I wanted an<br />
exercise<br />
regimen that would occupy my mind as much as my body, because the<br />
running, cycling, lifting, cardio-machining that I had been doing were<br />
somewhat mindless. </p>
<p>So you see, I am not some black-belt master, but an absolute novice.<br />
&nbsp;The particular system that I am studying places an emphasis<br />
on<br />
relaxation, natural movement, breathing, and reaction. &nbsp; The<br />
method of study,&nbsp;always requires a partner, often several.<br />
&nbsp;It is during these times when working with several partners,<br />
that<br />
is defending against multiple attackers or opponents that I have felt<br />
the closest to a state of flow.<br />
&nbsp;</p>
<p>Flow occurs when we are not allowed to set-up or stage things in<br />
advance. &nbsp;In self-defense, flow happens when the attacks come<br />
in a<br />
stream, and one cannot anticipate<br />
or setup, one can only deal with each attack as it comes, reacting,<br />
evading, countering, moving, breathing. &nbsp;Flow is a state of<br />
heightened<br />
efficiency that results from focusing in the now. &nbsp;Flow is the<br />
state, where I am one with the art, and the principles flow naturally<br />
from me, because they have been deeply embedded in me. &nbsp;It can<br />
be<br />
observed from the outside and the inside. &nbsp;Flow feels good.<br />
&nbsp;</p>
<p>In a work context flow<br />
happens<br />
in much the same way, when we are dealing with one task, issue,<br />
project, thing at a time, but with sufficient focus that efficiency is<br />
increased. &nbsp;I believe that most of us enter a state of flow<br />
when<br />
we are required to push our pace to the point where we don't have the<br />
luxury of allowing ourselves to be distracted. &nbsp;I think that<br />
we<br />
can invoke a state of flow by increasing the pace of our work, as Lisa<br />
has suggested. &nbsp;She has also suggested some ideas for<br />
improving<br />
the pace.</p>
<p>I also think that flow is a product of our inner discipline.<br />
&nbsp;The<br />
product that we control as we develop the principles, and art and<br />
discipline around our work. &nbsp;As in the martial arts example,<br />
the<br />
deeper the art and principles are embedded are ingrained in me, the<br />
greater the ease with which I attain a state of flow. &nbsp;My<br />
self-discipline regarding focus and ability to ignore the many<br />
thoughts, people, activities that are competing for my attention, is a<br />
major contributor. &nbsp;</p>
<p>The enemy of flow is overwhelm.<br />
&nbsp;Overwhelm comes when we cannot focus, when we are so<br />
distracted<br />
that we become inefficient, when we struggle to manage our interrupt<br />
vectors. &nbsp;When I am overwhelmed, I thrash, I flail, I appear<br />
to be out of control. &nbsp;Sometimes the best way to get out of<br />
overwhelm is to walk away, retreat, and regroup. &nbsp;Overwhelm<br />
can be accompanied with a sense of hopelessness, that no matter how<br />
hard or long or diligently I work, I will not get done. &nbsp;When<br />
this happens, the fatalistic and self-destructive thoughts come, and<br />
the hole gets deeper. &nbsp;When in this state, most of us need<br />
encouragement, external stimulus, strokes, to get out of it. &nbsp;</p>
<p>To echo something else that Lisa talked about, as managers, we often do<br />
things that act as flow inhibitors for our staff. &nbsp;How can we<br />
recognize when our actions, or intentions takes our staff out of flow<br />
or worse, into overwhelm? &nbsp;When we are overwhelmed, should we<br />
delegate more or should we absorb it and allow our staff to focus, to<br />
stay in flow? &nbsp;</p>
    ]]></content>
  </entry>
  <entry>
    <title>Planning With Manure</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/16" />
    <id>http://www.regenerateweb.net/blog/node/16</id>
    <published>2007-03-15T04:15:57-05:00</published>
    <updated>2007-03-15T04:17:44-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="estimation" />
    <category term="task" />
    <summary type="html"><![CDATA[<p>There are two unkind words that derive from the farm - manure from a<br />
bull (BS), and&nbsp;manure from a horse (HS)? &nbsp;I have a<br />
working assumption around colloquial language that says HS is<br />
used to describe something of poor quality, questionable value.<br />
&nbsp;HS ususally is the result of poor workmanship, poor raw<br />
materials, poor process, etc. &nbsp;BS, on the otherhand, is<br />
deceptive. &nbsp;BS is usually used to describe something passing<br />
as something else; a deception, an "error" masquerading as truth.<br />
&nbsp;The fable "The Emperor's New Clothes" is a story about BS.<br />
&nbsp;When you call BS, you are saying that you "see" the<br />
emperor, and he is naked, and ugly! &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>There are two unkind words that derive from the farm - manure from a<br />
bull (BS), and&nbsp;manure from a horse (HS)? &nbsp;I have a<br />
working assumption around colloquial language that says HS is<br />
used to describe something of poor quality, questionable value.<br />
&nbsp;HS ususally is the result of poor workmanship, poor raw<br />
materials, poor process, etc. &nbsp;BS, on the otherhand, is<br />
deceptive. &nbsp;BS is usually used to describe something passing<br />
as something else; a deception, an "error" masquerading as truth.<br />
&nbsp;The fable "The Emperor's New Clothes" is a story about BS.<br />
&nbsp;When you call BS, you are saying that you "see" the<br />
emperor, and he is naked, and ugly! &nbsp;</p>
<p>I<br />
hereby declare that when it comes to project plans, I strongly prefer<br />
HS to BS!!!</p>
<p>I have been going through a major planning exercise with my current<br />
team. &nbsp;I have been using "pure" effort estimates and velocity<br />
projections to produce project schedules for a while.&nbsp; The<br />
basic<br />
technique is simple, in that you take each milestone, summing up the<br />
effort from the deliverables and project velocity in effort/time to<br />
create a duration estimate (in weeks). &nbsp;Then you can lay out<br />
the<br />
schedule. &nbsp;Each velocity projection can also be turned into a<br />
resource requirement (i.e. I need sufficient resources to deliver 18<br />
effort days of work per week.)</p>
<p>This is the first time that I have been through this exercise with this<br />
team, and they have struggled mightily with the concepts around<br />
planning. &nbsp;Here is the list of planning approaches that I have<br />
seen this time:</p>
<ol>
<li>kitchen sink plans -&nbsp;containing anything and<br />
everything the planner could think of. &nbsp;</li>
</li>
<li>template plans - lots of detail, cut and pasted from<br />
deliverable to deliverable. &nbsp;</li>
</li>
<li>story telling - lots of tasks with no estimates, or with BS<br />
estimates.</li>
</li>
<li>activity based deliverables or tasks, rather than<br />
result-based<br />
(since I am going to spend time doing it, it must be a task). &nbsp;</li>
</li>
</ol>
<p>Given that I am laying out the schedule (towards the beginning of the<br />
project) - I am not too concerned about detailed tasks. &nbsp;I<br />
want to<br />
capture in broad strokes what our deliverables are, and about how much<br />
effort is required for each one. &nbsp;I have learned that planning<br />
and<br />
software design happen concurrently, not in sequence, and that each one<br />
informs the other. &nbsp;My lead developers, on the other hand,<br />
seem to<br />
want to lay out tasks in order to get to deliverable estimates.<br />
&nbsp;They are less comfortable with "SWAG" estimates.<br />
&nbsp;They also<br />
feel that they are totally "on the hook" for these estimates.<br />
&nbsp;So<br />
they use some of the approaches above to justify their estimates.<br />
&nbsp;I really don't care, if I want to argue about estimates, I<br />
will<br />
argue. &nbsp;If they can't explain why it takes 12 man days of<br />
heads<br />
down effort to create a single web form, I will slash their estimate.<br />
&nbsp;Regardless of the shitscreen that they throw up. &nbsp;</p>
<p>Building software is difficult and complicated, but some things cannot<br />
be known ahead of time. &nbsp;I would rather baseline based on<br />
knowing<br />
that we don't know everything. &nbsp;This is what I call HS<br />
planning, we know our plan is crap, but we have to start somewhere.<br />
&nbsp;Plans with slack, or place holders to account for areas of<br />
risk<br />
fall into this category.</p>
<p>BS example:</p>
<ul></li>
<li>Clarify requirements - 2 days</li>
</li>
<li>Complete object model - 2 days</li>
</li>
<li>Code and test object 1 - 2days</li>
</li>
<li>Code and test object 2 - 2 days</li>
</li>
<li>Code and test object 3 - 2 days</li>
</ul>
<p>The obvious issue here is that until we complete the object model, we<br />
don't really know whether we have 1 or 5 objects to code, and whether<br />
they all take the same amount of time or whether some are heavy and<br />
some are light.</p>
<p>The trouble comes from trying&nbsp;to compensate for the fact that<br />
we don't<br />
know everything by fabricating plans that have details that appear to<br />
justify or rationalize the slack or the size of our estimates around<br />
unknowns. This is BS. &nbsp;It creates tasks that will be<br />
replaced later when we know more. &nbsp;If we have a plan that has<br />
the<br />
following tasks:</p>
<p>HS example:</p>
<ul></li>
<li>Clarify requirements - 2 days</li>
</li>
<li>Complete object model - 2 days</li>
</li>
<li>Refine project plan - .5 days</li>
</li>
<li>Code and test all modeled objects - 6 days</li>
</ul>
<p>While that is utter HS, because it does not describe<br />
specifically what needs to be done, it is not BS, in that it does<br />
not mislead you into thinking that we actually know what to do.<br />
&nbsp;We would never commit the "code and test" task. &nbsp; At<br />
the<br />
point where we needed to commit this task, we would already have<br />
refined the plan, so the tasks we would be comitting would be the new<br />
refined ones, and this HS one would have been replaced &nbsp;by<br />
that time. &nbsp;</p>
<p>One must recognize that every plan, at the first baseline, has some<br />
manure in it, the question we should ask is "what animal did it come<br />
from?" &nbsp;Is it a recognition of unknowns and risks, or a<br />
rationalization of our guessing.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Requirements Modeling - Contemplating Adequacy</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/15" />
    <id>http://www.regenerateweb.net/blog/node/15</id>
    <published>2007-02-17T12:16:48-06:00</published>
    <updated>2007-03-24T14:05:09-05:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="modeling" />
    <category term="requirements" />
    <summary type="html"><![CDATA[<p>OK! So everyone who has had received requirements for a project that<br />
were inadequate please raise your hand. &nbsp;What about<br />
requirements<br />
that were difficult to determine if they were adequate without<br />
rewriting<br />
them from scratch? &nbsp;What about requirements that primarily<br />
describe the current situation, and not the desired future state?<br />
&nbsp;How about requirements that are written more as a functional<br />
specification (I need a report that has these data elements with this<br />
sorting grouping and formatting)? &nbsp;Sometimes it is hard to</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>OK! So everyone who has had received requirements for a project that<br />
were inadequate please raise your hand. &nbsp;What about<br />
requirements<br />
that were difficult to determine if they were adequate without<br />
rewriting<br />
them from scratch? &nbsp;What about requirements that primarily<br />
describe the current situation, and not the desired future state?<br />
&nbsp;How about requirements that are written more as a functional<br />
specification (I need a report that has these data elements with this<br />
sorting grouping and formatting)? &nbsp;Sometimes it is hard to<br />
distinguish the commentary about the current environment or about the<br />
proposed changes to the environment from the actual requirements.<br />
&nbsp;My personal favorite is the "laundry list" or as my favorite<br />
radio station's slogan says "Everything! In no particular order."</p>
<p>Alright,&nbsp;I am done ranting now, no need to call security.<br />
&nbsp;What I want to talk about is a model for organizing<br />
requirements<br />
so that the adequacy is somewhat self evident. &nbsp;To my eyes,<br />
this<br />
means that they have integrity (no obvious internal conflicts or<br />
ambiguity) and they are of sufficient quality to allow us to move<br />
forward. &nbsp;I am setting my scope around high level business<br />
requirements for software development projects. &nbsp;There are<br />
plenty<br />
of issues here, and I think, broad applicability to other domains.<br />
Adequate Software Requirements<br />
What does it mean to have adequate software requirements?<br />
&nbsp;Perhaps<br />
this is the starting point. &nbsp;Adequacy in software requirements<br />
should be defined in terms of whether they are sufficient to allow the<br />
development of a solution<br />
proposal. &nbsp;</p>
<p>Value Targets<br />
When writing a solution proposal, I prefer to use the business<br />
value request to define the target of my delivery. &nbsp;The<br />
primary business value<br />
target<br />
is the answer to the question, "What's in it for me?" from the<br />
perspective of the requester. &nbsp;When the analyst starts<br />
sniffing<br />
around, he or she may uncover other business value targets.<br />
&nbsp;The primary target should also answer the essential<br />
 style="font-weight: bold;"&gt;WHY<br />
question from the requester's point of view. &nbsp;Any other<br />
targets<br />
that are identified can be considered a bonus, but there achievement<br />
should not reduce or mitigate the achievement of the primary target.</p>
<p>Solution Constraints or Criteria<br />
After I have the business value target(s) defined, I need to constrain<br />
my solution. &nbsp;This is not unlike the<br />
 style="font-weight: bold;"&gt;qualification process<br />
that a salesperson uses to determine which product customer is most<br />
likely do be satisfied with, or ultimately purchase.<br />
&nbsp;Solution&nbsp;constraints or criteria define the<br />
boundaries<br />
around an acceptable<br />
solution. &nbsp;These constraints can be cost, delivery schedule,<br />
but<br />
mostly should be functional, defining<br />
 style="font-weight: bold;"&gt;WHAT<br />
should be in the box. &nbsp;Constraints say, if you can overcome<br />
these<br />
obstacles, I'll buy your product (implement your solution).<br />
 style="font-style: italic;"&gt;<br />
 style="font-style: italic;"&gt;</p>
<p>Context Description<br />
It is important to define the environment in which the solution must<br />
work.<br />
&nbsp;That might include how the problem fits into the overall<br />
business<br />
process, interfaces with other business units or companies, character<br />
of existing staff. &nbsp;Add to this any changes in context that<br />
management is contemplating. &nbsp;Software delivery almost always<br />
contemplates some change in business process - buried in the value<br />
targets, there is usually some implied change. &nbsp;This needs to<br />
be<br />
teased<br />
out and made explicit (a hedge against requirements that only<br />
contemplate current context). &nbsp;Moreover, for a complex<br />
software<br />
development program, involving multiple concurrent and/or sequential<br />
delivery cycles, the context is the part of the requirements that<br />
allows us to see how each piece fits into the whole. &nbsp;</p>
<p>Separate Solution Proposal?<br />
My primary point is that requirements are adequate without a solution<br />
proposal. &nbsp;The practical implication of this is that the<br />
solution proposal can (and should) exist separate from the<br />
requirements. &nbsp;This is a point of contention with projects<br />
that<br />
are managed within a single organization, and a difference between a<br />
consulting approach and typical in-house or monopolized approaches.<br />
&nbsp;Why is it<br />
different? &nbsp;I submit that this is because the consulting<br />
approach<br />
does not assume that it has won the business. &nbsp;A project that<br />
is<br />
managed in-house is free to assume that it is not competing against<br />
other solutions, an assumption that is never valid for external<br />
projects. &nbsp;If we were to prepare requirements as if we were<br />
going<br />
to farm the project out, letting the best consulting firms in the world<br />
propose solutions, we certainly would have to separate the requirements<br />
from the solution proposal. &nbsp;So isn't the combination of these<br />
two<br />
steps a short-cut that we are allowed to take in internally managed<br />
projects? &nbsp;</p>
<p>A Valid Shortcut?<br />
As I think about this, my experience tells me that for smaller, lower<br />
risk projects, where the number of possible solutions is small, the<br />
shortcut may be valid, and combining requirements and solution proposal<br />
may save time and effort. &nbsp;I think for riskier projects, with<br />
more<br />
unknown domains, especially those that contemplate significant changes<br />
to business process, that this shortcut leads to ossification that<br />
inhibits the solution from evolving in response to progressive<br />
elaboration of requirements (i.e. as we remove risk<br />
factors,&nbsp;solve<br />
unknowns, and the business process change becomes more apparent.)<br />
&nbsp;I believe that the reasons for this are:</p>
<ol>
<li>It represents an assumption that is difficult to challenge,<br />
because instead of sounding like a proposal (which you are supposed to<br />
challenge) it sounds like a requirement. &nbsp;It gives extra<br />
weight to<br />
the embedded solution proposal, that causes a hardening or stiffening<br />
that impedes change. &nbsp;</li>
</li>
<li>The requirements cast the shape of the solution, an image<br />
which becomes tangible over time, and as such resistant to change.<br />
&nbsp;Much like the architect's rendering for a new building, it<br />
becomes ingrained in the mind of the requester. &nbsp;Thus the<br />
solution<br />
(the package in which we deliver value), actually becomes part of the<br />
requirements, rather than simply a vehicle for delivery.&nbsp;</li>
</li>
<li>Since we monopolize a solution (by embedding it in<br />
requirements), it becomes "THE" solution,<br />
rather than "A" solution. &nbsp;It becomes difficult to remain<br />
objective about the solution and the challenges and alternatives to the<br />
approach are not evaluated as tenaciously. &nbsp;I have often seen<br />
this<br />
in the context of&nbsp;available vended solutions that inform the<br />
requirements. &nbsp;While there is nothing wrong with having<br />
outside<br />
information inform the requirements, one must be careful to abstract<br />
the requirements, so that they don't conform to the image of one<br />
particular solution.&nbsp;</li>
</li>
<li>This opposes the value of context description, as it causes<br />
us to<br />
see each request as a stand-alone effort. &nbsp;Especially with<br />
enhancements or extensions of existing solutions, this tendency is a<br />
trap. &nbsp;The assumption that we are always extending or<br />
enhancing an<br />
existing solutions, can cause "feature displacement", that is we can<br />
move our solution away from it's core mission gradually, by following a<br />
chain of requests that implies a net movement of the solution core<br />
mission. &nbsp;While the problem that this causes falls more in the<br />
domain of software product management, than requirements modeling, it<br />
is<br />
worth mentioning here because it can be a result of a requirements<br />
failure.</li>
</li>
</ol>
<p>An Alternative!<br />
So what can we do instead? &nbsp;I recognize that adding additional<br />
steps in a sequential process necessarily causes delay. &nbsp;I<br />
disagree with the need to have the process execute sequentially.<br />
&nbsp;I simply believe that we can separate the documents, so that<br />
the<br />
solution proposal(s) can stand alone. &nbsp;In fact, I am convinced<br />
that if we have the right people during the "discovery" phase of a<br />
project, we can contemplate many aspects of design in parallel with the<br />
elicitation of requirements. &nbsp;I believe that this parallelism<br />
is<br />
healthy, because it drives us to a deeper understanding of the problem<br />
domains. &nbsp;</p>
<p>As a software developers, systems analysts, and engineers, our mission<br />
is to<br />
provide solutions. &nbsp;Our value proposition is always in the<br />
solution. &nbsp;We probably can't help envisioning a series of<br />
solutions while we are immersing ourselves in the problem domain(s).<br />
&nbsp;It is part of how we learn, how we build our mental maps.<br />
&nbsp;For the vast majority of analysts that I know (especially<br />
those that grew out of software development), the solutions are always<br />
rattling around in the background, and one merely need to open the tap,<br />
for them to pour out. &nbsp;In fact, it can require significant<br />
discipline to keep that tap closed.</p>
<p>Why we should<br />
If we can refrain from embedding this in the requirements or<br />
problem description, we can decrease the initial investment in a<br />
specific solution, or solution concept. &nbsp;The longer we can<br />
delay this investment, the longer we can continue to evolve the<br />
solution before we have to get buy in. &nbsp;While we need to get<br />
buy in, the longer period of&nbsp;adaptation and evolution we can<br />
support during solution development the more likely we are to hit our<br />
value targets. &nbsp;By fixing the solution early, during the<br />
requirements, we compromise our ability to adapt and evolve the<br />
solution.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Velocity Metric</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/14" />
    <id>http://www.regenerateweb.net/blog/node/14</id>
    <published>2007-02-17T10:45:16-06:00</published>
    <updated>2007-02-17T11:34:03-06:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="delivery" />
    <category term="duration" />
    <category term="effort" />
    <category term="estimation" />
    <category term="leader" />
    <category term="velocity" />
    <summary type="html"><![CDATA[<p><a href="http://www.jrothman.com/weblog/blogger.html">Johanna<br />
Rothman</a> has been blogging about <a href="http://www.jrothman.com/weblog/2007/02/estimating-tasks-how-much-time-is-in.html">Estimating<br />
Tasks: How Much Time is in Your Day? &nbsp; </a>&nbsp; I<br />
have a different take on the situation. &nbsp;The metric that she<br />
is describing is related to estimation, but estimation should not<br />
contemplate duration, only effort. &nbsp;So my estimate for a task<br />
ought not vary based on my availability to do work, as the task could<br />
be assigned to another available resource. &nbsp;However, my<br />
"velocity" does vary from week to week, and in fact from day to day.<br />
&nbsp;I submit that VELOCITY<br />
is the amount of work that you get done within a specific period of<br />
duration. &nbsp;This period can be measured as a day, a week, or a<br />
month, depending on how frequently you measure. &nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p><a href="http://www.jrothman.com/weblog/blogger.html">Johanna<br />
Rothman</a> has been blogging about <a href="http://www.jrothman.com/weblog/2007/02/estimating-tasks-how-much-time-is-in.html">Estimating<br />
Tasks: How Much Time is in Your Day? &nbsp; </a>&nbsp; I<br />
have a different take on the situation. &nbsp;The metric that she<br />
is describing is related to estimation, but estimation should not<br />
contemplate duration, only effort. &nbsp;So my estimate for a task<br />
ought not vary based on my availability to do work, as the task could<br />
be assigned to another available resource. &nbsp;However, my<br />
"velocity" does vary from week to week, and in fact from day to day.<br />
&nbsp;I submit that VELOCITY<br />
is the amount of work that you get done within a specific period of<br />
duration. &nbsp;This period can be measured as a day, a week, or a<br />
month, depending on how frequently you measure. &nbsp;</p>
<p>There are several cool things about measuring velocity, separate from<br />
effort and duration.</p>
<ol>
<li>You can capture velocity at an individual or group level by<br />
simple aggregation. (This does not work for duration based estimation<br />
and scheduling.</li>
</li>
<li>You can measure velocity along multiple vectors (or<br />
projects, milestones, or deliverables). &nbsp;That is, you can<br />
build a resource to work vector matrix to see how fast work is<br />
progressing along multiple paths.</li>
</li>
<li>You can capture historical average velocity of resources or<br />
teams, to use to project duration into the future.</li>
</li>
<li>You can use historical average velocity to validate work<br />
commitment - that is, if a resource averages 3.5 effort days per week<br />
(velocity) based on his own estimates, then when he commits 6 effort<br />
days, you can assume that he will need to work 70 hours to complete.<br />
&nbsp;These conversations about commitment and realism have amazing<br />
affects on peoples ownership of their estimates and commitments.</li>
</li>
<li>You can plan different velocities around variable cycles<br />
(holidays, special events, or vacations). &nbsp;</li>
</li>
</ol>
<p>Perhaps the coolest thing you can do with velocity metrics is to<br />
recognize how much time is spent on NON-DELIVERY<br />
VECTORS. &nbsp;A non-delivery vector is a fancy word<br />
for work that you do that does not align with a specific project goal.<br />
&nbsp;Team meetings, staff interviews, staff training, coordination<br />
and status meetings don't count towards delivery. &nbsp;They are<br />
not "tasks" that should be captured in a project plan. &nbsp;My<br />
team calls them "things". &nbsp;There are other types of "things":<br />
helping a team mate solve a problem,&nbsp;having a design meeting,<br />
one-off discussions and phone conversations, reading e-mail, responding<br />
to e-mail. &nbsp;All "things". &nbsp;</p>
<p>The following ideas have been discerned&nbsp;by measuring in this<br />
way:</p>
<ol>
<li>People in leadership roles (whether formal or informal)<br />
usually have more things than non-leaders.</li>
</li>
<li>People who deal with uncertainty (analysts, designers,<br />
project managers, etc.) usually have more things than people whose work<br />
is more deterministic.</li>
</li>
<li>People who have administrative responsibility usually have<br />
more things (build master, source librarian, etc.) than those who are<br />
largely project bound.</li>
</li>
</ol>
<p>More "things" means lower<br />
velocity. &nbsp;The resources that I observed<br />
having&nbsp;the highest velocity were those who had more repetitive<br />
tasks: testers, report developers, database dml developers. &nbsp;I<br />
believe that offshore developers working to specifications, should (in<br />
theory) work at very high velocity because they are typically heads<br />
down, low collaboration.</p>
<p>At first this was difficult for me to take and understand as a manager.<br />
&nbsp;Here is why:</p>
<ol>
<li>I had a team that was very heavy with contract staff,<br />
including some of the leadership.</li>
</li>
<li>My incentive was based on budget versus time frame (so<br />
people delivering less feels really bad).</li>
</li>
<li>My smartest most capable people, appeared to be my least<br />
productive (how can this possibly be).</li>
</li>
<li>As soon as I assigned someone leadership responsibility,<br />
his output was cut in half.</li>
</li>
</ol>
<p>It is the same sort of reaction most people have when they first try to<br />
have some discipline around their household budget. &nbsp;They are<br />
incredulous about the way they actually spend money, as opposed to the<br />
way that they perceived they were spending it. &nbsp;I had a<br />
similar reaction to the way I was spending resources as a manager.<br />
&nbsp;I had to stop looking at the individual velocity and focus on<br />
the aggregate velocity. &nbsp;Having the brightest guy doing all<br />
the work may give 2-3x more velocity for him personally, but having the<br />
output of 4-7 people double because of his direction is better.<br />
&nbsp;Being able to bring additional staff to bear because the<br />
leadership structure and knowledge transfer capability is there is<br />
worth more long-term, than a marginal increase in velocity, it means<br />
that I can add resources efficiently (without significant<br />
drag)&nbsp;because the team's infrastructure is able to support it.<br />
&nbsp;</p>
<p>Having the data to understand how your team really works means taking<br />
the irrelevant data and fiction out of your estimates.<br />
&nbsp;Duration based estimates always contain an element of<br />
irrelevancy or fiction, because they can't factor out the effort that<br />
doesn't contribute to the specific delivery vector.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Meeting Effectiveness</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/13" />
    <id>http://www.regenerateweb.net/blog/node/13</id>
    <published>2007-02-10T13:55:48-06:00</published>
    <updated>2007-02-10T13:59:14-06:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="meetings" />
    <summary type="html"><![CDATA[<p>The boys or grrls over at <a href="http://www.trizle.com/">Trizzle.com</a><br />
had <a href="http://www.trizle.com/how-to-conduct-your-meetings/">this<br />
thin post</a> about stand-up meetings. &nbsp;I wasn't<br />
impressed but it started me thinking. &nbsp;I commented on their<br />
blog...</p>
<div class="">
My comment on their post...<br />
While standing up gets people to realize is a meeting pace. Meeting<br />
pace takes many things into consideration. Scrum uses several things<br />
to manage meeting pace. The most important is having everyone who<br />
attends be prepared to contribute.</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>The boys or grrls over at <a href="http://www.trizle.com/">Trizzle.com</a><br />
had <a href="http://www.trizle.com/how-to-conduct-your-meetings/">this<br />
thin post</a> about stand-up meetings. &nbsp;I wasn't<br />
impressed but it started me thinking. &nbsp;I commented on their<br />
blog...</p>
<div class="">
My comment on their post...<br />
While standing up gets people to realize is a meeting pace. Meeting<br />
pace takes many things into consideration. Scrum uses several things<br />
to manage meeting pace. The most important is having everyone who<br />
attends be prepared to contribute. </p>
<p>Being prepared to<br />
contribute involves two main things. Understanding<br />
the content of your contribution, and being prepared to deliver that<br />
content concisely.  </p>
<p>In my team management work, I have deployed a daily "stand-up" where<br />
people don't stand up but can get through a daily status with 20<br />
contributors in less than 10 minutes. If you think that is<br />
unbelievable, or sounds like a run-on Jimmy John's commercial, it is<br />
because the team was prepared to deliver the necessary content<br />
(delivery status for weekly iteration) as 3 numbers. Only if the<br />
numbers revealed a problem was the contributor expected to reveal the<br />
detail behind. Is this extreme? Yes! Effective? Yes? Did it take a<br />
while to get used to? Hell Yes!!! </p>
<p>Can most meetings benefit from this approach - Only if you can dictate<br />
(like a boss) what content each contributor will deliver, and provide a<br />
concise template for them to use (3 numbers). As long as either of<br />
these things are not deterministic, then contributors are free to make<br />
it up as they go, and are much more likely to show up unprepared.
</div>
<p>Then I kept thinking about it...<br />
Could I improve the effectiveness of every meeting that I called?<br />
&nbsp;<br />
Could I improve the effectiveness of every meeting that I attended?<br />
How?<br />
Improving Meeting Effectiveness<br />
So if I were going to improve the effectiveness in meetings that I<br />
called, I could use the principle above to achieve the goal!!!<br />
&nbsp;I could do the following things:</p>
<ol>
<li>Call meetings with a desired result ( Meeting to decide<br />
what we will do to solve problem X) &nbsp;- This is huge - no<br />
meetings to discuss problem x, no meetings to screw off and gossip<br />
about co-workers, meetings focused on a result. &nbsp;Could that<br />
result be gathering information? Sure! but does that require a meeting?<br />
&nbsp;Do I have to wait until I can get everyone's schedule, would<br />
information gathering be better done asynchronously (have everyone<br />
send an e-mail). &nbsp;</li>
</li>
<li>Publish an agenda, and all available information when<br />
scheduling the meeting - with enough time before the meeting to<br />
reasonably expect people to review.</li>
</li>
<li>Provide guidelines (templates, questions, etc) for content<br />
for each contributor - this may apply to recurring meetings -<br />
monthly/weekly/daily meetings where the agenda doesn't change, but the<br />
content and contributors may (like a board meeting). &nbsp;The<br />
better you can communicate expectations to contributors, the better the<br />
meetings will go, and the better prepared the contributors should be.<br />
&nbsp;</li>
</li>
<li>Don't invite people to be polite - only invite those who<br />
are going to contribute to the result. &nbsp;If people are offended<br />
that they weren't part of the decision, ask them if they had something<br />
to contribute? &nbsp;Maybe you missed someone.</li>
</li>
<li>If someone's contribution is one way only, communicate<br />
this, and offer that they do not need to attend the entire meeting.</li>
</li>
<li>In running the meetings - I could be more of a hard-ass<br />
about people not being prepared. &nbsp;That is, not accept the<br />
contribution from people who are not prepared. &nbsp;Shut them<br />
down, rather than waste everyone's time rambling on to no obvious<br />
conclusion. &nbsp;This sounds really harsh until you have 20<br />
$100/hour contractors in a status meeting every freakin' day and your<br />
status meeting costs $10k per week. &nbsp;Ouch! &nbsp;What<br />
about senior managers? &nbsp;How much do those meetings cost.<br />
&nbsp;I'm not there, so I don't know. &nbsp;It can't be cheap.</li>
</li>
</ol>
<p>What about meetings that we attend? &nbsp;Since we cannot often<br />
insist on the meeting caller following these guidelines, what can we<br />
do? &nbsp;We can ask the meeting chair the same questions<br />
we&nbsp; would ask ourselves above.</p>
<ol>
<li>Inquire about the purpose of the meeting. &nbsp;If<br />
there is no clear purpose, this may prompt the caller to re-think the<br />
need for a meeting.</li>
</li>
<li>Ask for a meeting agenda. &nbsp;If we are asked to a<br />
meeting with no agenda, or clear purpose, ask. If they can't provide<br />
one, then ask why our presence is important. &nbsp;If they can't<br />
answer that, then politely decline the invitation.</li>
</li>
<li>Ask what if anything we will be asked to contribute to the<br />
meeting. &nbsp;If we are not going to contribute, ask<br />
why&nbsp;our presence is important. &nbsp;Again we can always<br />
decline.</li>
</li>
<li>If we are asked to contribute, ask how much time we will be<br />
expected to share - what kind of handouts to bring.</li>
</li>
<li>If our contribution time is short in comparison to the<br />
meeting, and we are not an integral part of the decision making<br />
process, we can ask to be excluded from portions of longer meetings<br />
that do not concern us (like a congressional hearing).</li>
</li>
<li>If someone who works for, with, near us is better suited to<br />
contribute, we may want to recommend that they be invited<br />
in&nbsp;our stead. &nbsp;Delegate meetings to people better<br />
prepared.</li>
</li>
<li>Show up for meetings ready to do business.<br />
&nbsp;Have&nbsp;our handouts prepared, and published ahead of<br />
the meeting if at all possible.</li>
</li>
<li>When we contribute, stay on topic as much as possible.</li>
</li>
</ol>
<p>Before you think I<br />
am some meeting master, you must know that&nbsp;I am terribly<br />
undisciplined about meetings, other than my team's&nbsp;daily<br />
stand-up. &nbsp;Why, because the cost of time spent creeps up like<br />
a productivity killing ninja, and my schedule gets booked with junk<br />
meetings before I correctly prioritize my time. &nbsp;While I know<br />
what to do, I don't practice with the right discipline.<br />
&nbsp;Perhaps this will help me improve in this area.</p>
    ]]></content>
  </entry>
  <entry>
    <title>Critical difference between software development and construction...</title>
    <link rel="alternate" type="text/html" href="http://www.regenerateweb.net/blog/node/12" />
    <id>http://www.regenerateweb.net/blog/node/12</id>
    <published>2007-02-10T08:31:57-06:00</published>
    <updated>2007-02-18T14:31:47-06:00</updated>
    <author>
      <name>regen_r8</name>
    </author>
    <category term="estimation" />
    <category term="velocity" />
    <summary type="html"><![CDATA[<p>Glen Alleman from the&nbsp;<a br /><br />
 href="http://herdingcats.typepad.com/my_weblog"&gt;Herding Cats<br />
blog</a> offers <a br /><br />
 href="http://herdingcats.typepad.com/my_weblog/2007/01/construction_an.html"&gt;this<br />
post</a> on the subject. &nbsp;I want to agree with him.<br />
&nbsp;I merely need to remind him that there is one key difference<br />
in the two industries:</p>
<p>Estimation -<br />
my experience with software development, and construction projects<br />
(church, home) though small, informs me of a key difference.<br />
&nbsp;In construction projects,<br />
 style="font-style: italic;"&gt;Once the required work is known,<br />
it can be estimated with some reasonable accuracy, because the vast<br />
majority of construction tasks have been done exactly the same way by<br />
the people who are doing them. &nbsp;The tool set doesn't change<br />
every 2-5 years. &nbsp;Carpenters still use nails to fasten wood<br />
together. &nbsp;Wood still has the same physical properties that it<br />
did in 1965. &nbsp;In software, there is a programming language<br />
every 6 weeks, and every 10-20 years the nature of raw<br />
materials&nbsp;change - assembler to procedural to functional to<br />
4gl to object oriented, etc. &nbsp;The new raw materials and tools<br />
require estimation to be redone from scratch. &nbsp;The other<br />
factor in estimation is the difference in productivity<br />
between&nbsp;master,&nbsp;journeyman, and apprentice<br />
practitioners. &nbsp;In construction the difference between<br />
resources can be a factor of 2 or 3, but years of stable estimates for<br />
building 40 linear feet of stud wall, provide a rational basis for<br />
scheduling. &nbsp;In the software industry, only the practitioner<br />
who is doing the work can estimate his or her rate of completion, and<br />
the difference between practitioners can be a factor of 10 or 20.<br />
&nbsp;</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>Glen Alleman from the&nbsp;<a br /><br />
 href="http://herdingcats.typepad.com/my_weblog"&gt;Herding Cats<br />
blog</a> offers <a br /><br />
 href="http://herdingcats.typepad.com/my_weblog/2007/01/construction_an.html"&gt;this<br />
post</a> on the subject. &nbsp;I want to agree with him.<br />
&nbsp;I merely need to remind him that there is one key difference<br />
in the two industries:</p>
<p>Estimation -<br />
my experience with software development, and construction projects<br />
(church, home) though small, informs me of a key difference.<br />
&nbsp;In construction projects,<br />
 style="font-style: italic;"&gt;Once the required work is known,<br />
it can be estimated with some reasonable accuracy, because the vast<br />
majority of construction tasks have been done exactly the same way by<br />
the people who are doing them. &nbsp;The tool set doesn't change<br />
every 2-5 years. &nbsp;Carpenters still use nails to fasten wood<br />
together. &nbsp;Wood still has the same physical properties that it<br />
did in 1965. &nbsp;In software, there is a programming language<br />
every 6 weeks, and every 10-20 years the nature of raw<br />
materials&nbsp;change - assembler to procedural to functional to<br />
4gl to object oriented, etc. &nbsp;The new raw materials and tools<br />
require estimation to be redone from scratch. &nbsp;The other<br />
factor in estimation is the difference in productivity<br />
between&nbsp;master,&nbsp;journeyman, and apprentice<br />
practitioners. &nbsp;In construction the difference between<br />
resources can be a factor of 2 or 3, but years of stable estimates for<br />
building 40 linear feet of stud wall, provide a rational basis for<br />
scheduling. &nbsp;In the software industry, only the practitioner<br />
who is doing the work can estimate his or her rate of completion, and<br />
the difference between practitioners can be a factor of 10 or 20.<br />
&nbsp;</p>
<p>When I hear that project management is different between construction<br />
and software development, this is the only difference that<br />
I&nbsp;think is real. &nbsp;For me, it is the reason that short<br />
iterations are important, so that I can measure the output of each<br />
practitioner against their estimates. &nbsp;That way I can predict<br />
velocity or rate of completion. &nbsp;In software development, that<br />
is the only way that I have found that works to manage the<br />
 style="font-weight: bold;"&gt;schedule, because<br />
estimates are highly individualized.</p>
<p>In construction, the schedule challenges revolve around different sets<br />
of constraints: availability of resources, availability of raw<br />
materials,&nbsp;weather, and unanticipated work. &nbsp;Software<br />
projects, thankfully, avoid the complexity of weather.</p>
    ]]></content>
  </entry>
</feed>
