Diary of a fixer the art of estimating work and setting realistic expectations in dynamics ax part 2

Diary of a fixer the art of estimating work and setting realistic expectations in dynamics ax part 2

Functional points changed my implementation life. Suddenly, I had a way quantify technical work that the Developer, Functional Specialist, and Manager could understand. That’s the ultimate power of Functional points, and I hope that you see this. My assumption in this tutorial is that you have never ever touched a function point, so we will start simple here. I’m going to personally leave out some things so that you can focus on the core intrinsic benefits of function points and how they are calculated. But I want to make a disclaimer. Before using function points, please read part 3 of this blog post. I have a real busy week, so I won’t be able to post until next week, but please read it first. There are many things that I need to tell you about this wonderful estimation method. Also, no one ever learned functional points without practicing. So, practice is precious. I’m leaving out things like transactions, DETs, RETs and what not because I want you to focus on understanding. Functional points are like aspirin. They have been around forever, and there are a million different derivatives of how they are applied. Most places say that you should use at least 3 different formulas to come up with an estimate involving function points.

Please understand. What you are doing here would still prove to be more beneficial over the long-term than “top of the head” estimates.

Quick Functional note on make-believe form development project

We are cheating. I’m using a form already developed here for visualization and learning purposes. But I am calculating functional points as if none of this was developed. So, we have to develop every component ourselves.

We are going to cheat here. Let’s look at one awesome example of the Project Module and get an estimate as to how long it would take to develop this or something like this. So, one critical area when it comes to controlling costs is expense policies. These are just like the rules that you grew up with a kid except that they pertain to expenses on projects. For example, you might remember something like being told that you can’t watch TV past 7PM, or that you have to eat vegetables when you were growing up. An example project expense policy might be that low rating vendors are not allowed to work any overtime without a manual approval. Another example might be that expense reimbursements under $100 for travel do not have to be approved while all others do. Another example is that one worker may be allowed a higher amount of travel expenses than another. Say that for one vendor you allow unlimited overtime and for another you don’t allow overtime. I think you get the point. Pretty powerful but not the real subject of this blog post. Let’s see how we would go about getting a reliable estimate create something like this.

let’s look at the Project Expense Policy Form


Not much yet. Just continue to reference this as we walk through it.

Brandon Simplified TermTotal NumberMultiplier
# of places we input values inX 3
# of read only screens appearing to usersX 4
Database queries used to produce simple informationX 3
Tables in AX for main queryX 7
Outside data sources for informationX 5
Business RulesIgnore for this postIgnore for now

So, let’s step through this.

First, classify and list the input columns depending on whether it requires a database query or not

Functional points work really well for ERP systems because they force us to think about the application in term of what it does. What you do is break down the application into simpler units that you can define.

Column for FormFunctionRequires separate data queryInput Type (directly accepts values that will be written to database)
Policy TypeDetermines where policy appliesNoYes
Start DateBegin date of policyNoYes
End DateEnd date of policy if anyNoYes
Customer AccountCustomer Account policy applies toYesYes
Project Contract IDProject contract ID if any that this applies to. It gets this by running another query against a table that stores contract ID’sYesYes
Project IDSpecific Project this applies to, it runs a query to look this up against a specific table that stores projectsYesYes
Project expense Policy Worker groupLooks up applicable category of worker (if applies)NoYes
WorkerGoes back and looks up data from table that stores worker informationYesYes
CityPopulates CityYesYes
Expense CategoryPopulates category of expense by running query against the travel cost table to get cost classificationYesYes
CurrencyThe currency type (example: usd, yen, ect)NoYes
Allowable AmountAmount of money allowed – perhaps for this worker to spend on travel for this project(many combinations)NoYes
Per UnitDo you want this policy to apply per a day, per a certain type of expense, for overall expensesNoYes
Receipt RequiredDo you require receipts for this policy to applyNoYes
Receipt MinimumMinimum amount for the receipt to applyNoYes
Maximum PercentMaximum percent of money that can apply (usually towards this category of expense)NoYes
Maximum AmountMaximum amount of money allowedNoYes

Wow, was that amazing! See, it is all in how you break it down. And perhaps, you are also starting to see the power of Functional Points. When Functional Points first came out project efficiency went up very high. Not just because of the fact that there was now a quantifiable method to estimate time, but there was another reason. By carrying out functional point analysis, it forces one to break down development task into terms that all can understand – project managers, developers, functional analyst. An experienced project manager would often prepare this or ask a developer to prepare this before making an estimation of work and setting a preliminary schedule. The Project Manager doesn’t have to know X++ here to understand this. Instead, what the project manager is doing is understanding the core components that are involved in producing this development work. For developers, this was welcomed also. Why? Well because, many times when developers complain of management not understanding the complexity involved in development; thus, resulting in unrealistic expectations and schedules that are doomed to fail from the start. And the same goes for functional analysts. Many times, when functional analysts map out process flows and make recommendations, they do so at the expense of the development team. Furthermore, the schedules provided often do not work because they also fail to account for the complexity of the development tasks causing the functional effort to fall behind.

But I promise you, no one will have trouble understanding what it means when you say “a column populated with data” or “extra data queries”.

An Excellent Strategy by a Project Manager is to ask for a listing of functional points or learn to do one on his/her own. They allow one to be tied into the project both technically and functionally at all times.

By the way, here is an example of a lookup in Dynamics AX which required an extra query to run.

So, here is our tally at this point (count the table the yes and no’s from the above table to see the “Total Number” change:

Brandon Simplified TermTotal NumberMultiplier
# of places we input values in17X 3
# of read only screens appearing to usersX 4
Database queries used to produce simple information6X 3
Tables in AX for main queryX 7
Outside data sources for informationX 5
Business RulesIgnore for this postIgnore for now

Second, determine the number of read only screens or fields appearing

Okay, the best way to determine the number of read-only message screens is to see one. Here is an example right below. If I try to close, the form without filling in everything, I get a read only message that pops up that looks like this:

Two very common examples of this are calculated fields and validations. So, in our form, we have to add some logic. For example, someone must be born between 1940 and 2010 to set the policy (hopefully, someone older than 4 is setting our policies), or only project categories “AAA” and” BBB” can be entered. In AX, you will often “validation” read-only fields manifested this way:

Now, in this case, the following fields will require at least one read-only screen related to modifications. So, let’s update our big table at this point:

Column for FormFunctionRequires separate data queryInput Type (directly accepts values that will be written to database)Is a Read-Only Screen or has a Read-Only Screen Component
Policy TypeDetermines where policy appliesNoYesYes
Start DateBegin date of policyNoYesNo
End DateEnd date of policy if anyNoYesNo
Customer AccountCustomer Account policy applies toYesYesYes
Project Contract IDProject contract ID if any that this applies to. It gets this by running another query against a table that stores contract ID’sYesYesNo
Project IDSpecific Project this applies to, it runs a query to look this up against a specific table that stores projectsYesYesNo
Project expense Policy Worker groupLooks up applicable category of worker (if applies)NoYesYes
WorkerGoes back and looks up data from table that stores worker informationYesYesNo
CityPopulates CityYesYesNo
Expense CategoryPopulates category of expense by running query against the travel cost table to get cost classificationYesYesNo
CurrencyThe currency type (example: usd, yen, ect)NoYesNo
Allowable AmountAmount of money allowed – perhaps for this worker to spend on travel for this project(many combinations)NoYesNo
Per UnitDo you want this policy to apply per a day, per a certain type of expense, for overall expensesNoYesNo
Receipt RequiredDo you require receipts for this policy to applyNoYesNo
Receipt MinimumMinimum amount for the receipt to applyNoYesNo
Maximum PercentMaximum percent of money that can apply (usually towards this category of expense)NoYesNo
Maximum AmountMaximum amount of money allowedNoYesNo

So, in this case, we have a total of 3 read-only screens, fields, or messages.

Brandon Simplified TermTotal NumberMultiplier
# of places we input values in17X 3
# of read only screens appearing to users3X 4
Database queries used to produce simple information6X 3
Tables in AX for main queryX 7
Outside data sources for informationX 5
Business RulesIgnore for this postIgnore for now

Third, determine the number of tables in the main query. Fourth, determine outside data sources.


In this case, we would only have one table. Also, in this example, we have no outside data sources, so we will go and fill that out now. So, we can update our main table now.

Brandon Simplified TermTotal NumberMultiplier
# of places we input values in17X 3
# of read only screens appearing to users3X 4
Database queries used to produce simple information6X 3
Tables in AX for main query1X 7
Outside data sources for information0X 5
Business RulesIgnore for this postIgnore for now

Fifth, calculate the total number of functional points now

Brandon Simplified TermTotal NumberMultiplierTotal Functional Points
# of places we input values in17X 351
# of read only screens appearing to users3X 412
Database queries used to produce simple information6X 318
Tables in AX for main query1X 77
Outside data sources for information0X 50
Business RulesIgnore for this postIgnore for now
Total Functional Points

6th, determine the influence multiplier

What you do is on a scale of 1 to 5, rate just how much each of these factors will influence your development. I’m going to give you the base line influence multiplier that I use for ERP systems. Now, this is where it gets subjective. Most people calculate the influence multiplier based on past experience and observation. To get you going, I’m giving you the influence multiplier that I often use for AX, but you will want to adjust this as you continue to go along. You get better at it. For now, though, .85 is a good starting point with adjustments as you get to know your AX implementation and people better.

General System Characteristics(GSC’s)Degree of Influence(DI)
0 (least)- 5 (most)
1 Data communications eg web connection

0

2 Distributed processing eg client/server

0

3 Performance eg min. response time

3

4 Heavily used configuration eg setup likely to change often such as dynamics ax erp parameters

4

5 Transaction Rates

0

6 On line data entry

1

7 Design for end user efficiency

3

8 Online updates

3

9 Complex processing eg calculations/lookups3
10. Usable in other applications0
11 Installation ease1
12 Operational Ease

0

13 Multiple sites

0

14 Facilitate change

2

Total Degrees of Influence (TDI)

20

Value Adjust Factor (VAF) = (TDI*0.01)+0.65

(20 * 0.01)+0.65 = .85

Function Point Count =

Function Points * VAF

 

88 * .85 = 74.8

7th, estimate the hours per a function point

There are two ways to convert Functional points to time. Hours per a functional point and lines of code. I’m going to skip the lines of code calculation because I find it impractical. However, I will use another formula that has taken off and that I find amazingly helpful for Dynamics AX. It uses the hours per a functional point that one person would use with industry or size taken into account.

http://www.informit.com/articles/article.aspx?p=19795ote, you can find these reference tables here:

Business AreaRate of Delivery
Accounting11.3
Manufacturing6.3
Banking12
Telecommunications2
Insurance27.4
Engineering8.1

So, let’s take 74.8 functional points and multiply it by 11.3 (project management module is accounting) and we get a total of 845.24 hours for one person. But wait.. That doesn’t seem right. Pause, we used an already developed make-believe form for demonstration purposes but calculated it as if we were developing everything new. If we had to develop all those methods from scratch, this would have been a massive undertaking, especially with all the configurations, all the screens, ect. Amazingly, this is more accurate than you would think. In real life, most of the time, we would have modified an existing form so our functional points would have gone down. But here is the advantage, functional points provided us with a way to see that and come up with a reasonable estimate. There are also tables that reduce time based on the number of developers.

There is so much more that I could tell you about Functional Points, but I have to catch a flight – Rebuilding some components of an installation right now and client needs me on site. What I hope that you have seen is the power with using something like this and how to use it. Then, I hope that you take this subject and run with it. See the multiple formulas with function points and begin to get comfortable with it, embrace it, and learn to use it for your own implementations. Take it from me, and I often take the role of lead technical architect now days, you will be ahead of many, many implementations if you learn how to estimate.

Don’t forget.. Please read Part 3. There is a lot that I have to tell you. Here I just wanted you to learn how to calculate with the formula and start developing an intuitive feel for functional points. I’m in a firestorm of work, but it is my priority to post it after this upcoming week.