It used to be that you could identify the priority of a feature by using a few metrics such as user value, business value, and technical difficulty. Those are really the three biggies, and I think those days are really gone if we are going to be honest. In software development, people love things that help quantify the problems or illustrate what can be a black box of development. I do not aim to devalue the FFA, but only put it in context a little. Truthfully, I did not know that this was called an FFA until a small development shop let me know that of course, there was an acronym for that. The same development shop happened to assign a value to Business Value without Client input, so just goes to show: you can know the acronyms and sound good at the presales meeting, but when it comes to building software, all that fancy talk falls away and you better be able to deliver. Everything in context.
Anyhow, say we have two tasks, one super easy and one really difficult. For sake of illustration, we will assume the same UV and BV.
As a side note, you can apply multipliers if, for instance, there is a reason to favor BV over UV or vice versa. That is *usually* the way I do it, even if it is BV(1.2) or UV(1.1). This is often referred to as a flexibility matrix when discussed and shown as a standalone concept. It is just a way of weighting things. See a rather strange perversion of the Iron Triangle (Time, Scope, Cost) for a nice writeup on the flex matrix. That is what the cool kids call it. Flex matrix.
Hard Task (scale of 1-5 with 1 being low)
- Business Value 2
- User Value 2
- Technical Difficulty 5
- Total of 9 (BV times UV times TD)
Easy Task (scale of 1-5 with 1 being low)
- Business Value 2
- User Value 2
- Technical Difficulty 1
- Total of 5
So here we would have the Hard Task ranking higher in priority than the Easy Task.
Funny: what happens if we change “Difficulty” to “Ease”?
Hard Task (scale of 1-5 again, with 1 being low)
- Business Value 2
- User Value 2
- Technical Ease 1
- Total of 5 (BV times UV times TD)
Easy Task (scale of 1-5 again, with 1 being low)
- Business Value 2
- User Value 2
- Technical Ease 5
- Total of 9
It changes things completely. It makes our grid of values and features/tasks Agile.
What was changed was the value of effort. Low effort is valued higher with Technical Ease. You can start knocking things off your backlog quickly this way. That is, for all the tasks that exist independently and without dependencies of external factors of any sort. It also assumes that low effort means quicker execution, which is not always the case.
Constant re-evaluation during your iterations will change the values that each task has assigned. The numbers, and backlog priority, will change. Even if you are not doing Scrum, this can be used to track features or tasks within any methodology that I can think of right now aside from strict “The GANTT IS GOD” SDLCs. No offense. I once worshiped the WBS like nobody’s business and yeah, do still use them sometimes although largely in an informal setting.
That said, with the devaluing of difficult technical tasks, you do not get to pay less attention to them right away. Indeed, certain flags are thrown when something is going to be very hard technically. This is where some Agilistas (I think they like to be called that instead of Agilists) miss the boat. Discovery is important, and you know how much discovery you need when you do it. Not before. I can mention a time I had a Client who said we would need to interface with his MSSQL Server. No problem, right? Eh… this thing was not only on an old haggard machine, but was fed old data by a complex and convoluted Foxpro system. It wound up being a huge task and Foxpro was replaced. Or, a reversed scenario: I can think of a time that a Ruby on Rails front end was proposed for an Ektron CMS installation, and it looked perfectly straightforward on paper.
Thanks for your time,
Josh


Josh,
Your short little item here has me smacking my forehead. I think this might be a big help to my group as a new paradigm for our software feature triage settings.
I really struggle with keeping everything out of over-capacity buckets and the Gantt chart from hell.
I am going to put this into play for our next event and see what happens.
Thanks for challenging my old ideas!
Regards,
Mary McAtee
VP of Implementation
IBS America
Mary,
Thanks for the comment. Glad it helped, but this is only one piece of the puzzle. This will get you a list of tasks with priority assigned. Planning Poker and similar tools can help if there is disagreement. No two tasks can be priority one. Someone has the responsibility of choosing which is number one, number two, etc…
What will really help the GANTT chart from hell, I think, is in looking at the work involved in each item, realizing that “we started with 100 features and wound up with 120 after seeing that some were compound, and have estimated against each – we have 100000 hours of work to do and 100 hours to do it in.” Something has to go, time needs to be added, or items need to be swapped. You will never fall short of delivering if this is done and Agile estimation is possible and more. It is really called for in this day of rapid change requests, etc.
“Okay, you want feature G to be introduced. We only have enough budget/time/people to perform 12 of the 15 tasks. Where does feature G live? Phase Two? Does it become the next item we work on?” The idea of iterative developement is far from new but embracing it as a model was once a challenge and is now becoming accepted.
Just went through an exercise like this with a company where they had identified
- Develop DB
- Code UI
- Code Services
- QA
And were constantly falling short. Their projections were meaningless. Of course. Breaking it down into backlog items that can be spoken to in the format of a user story and NOT a use case (would break your back to do that constantly) is great. Also, QA becomes built in because as a part of the user story you have the “…I will know this is complete and working properly when X, Y, and Z are true”
It also helps obviate exceptions. Maybe an admin logs in and sees something different than a generic user. Maybe the bit of work that nobody has done before and is waiting until the end to do will cause a failure and carry risk when it could be identified early. It also allows you to push out working software on a regular basis, always delivering and shipping. If the Client does not like it, they can opt to change it, but if proper analysis has been done then it is something that would have to sacrifice other functionality, if time or money or resources are short.
Priority alongside value alongside risk alongside knowledge that we dont know what we dont know may help where the classic “waterfall” model (which never really existed) fails.
Your buckets of capacity will be full, but if something slips, it falls into the next bucket. Or, you can employ Kanban that keeps everything moving without formal iterations. It is a neat idea but requires a mature team, IMO, with common skill sets. TDD is a bit much to bite off and chew but is really a great way to ensure what you get in the end is good and you dont lose time in fixing things.
Happy to help if I can.
Best,
Josh