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 Term | Total Number | Multiplier |
# of places we input values in | X 3 | |
# of read only screens appearing to users | X 4 | |
Database queries used to produce simple information | X 3 | |
Tables in AX for main query | X 7 | |
Outside data sources for information | X 5 | |
Business Rules | Ignore for this post | Ignore 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 Form | Function | Requires separate data query | Input Type (directly accepts values that will be written to database) |
Policy Type | Determines where policy applies | No | Yes |
Start Date | Begin date of policy | No | Yes |
End Date | End date of policy if any | No | Yes |
Customer Account | Customer Account policy applies to | Yes | Yes |
Project Contract ID | Project contract ID if any that this applies to. It gets this by running another query against a table that stores contract ID’s | Yes | Yes |
Project ID | Specific Project this applies to, it runs a query to look this up against a specific table that stores projects | Yes | Yes |
Project expense Policy Worker group | Looks up applicable category of worker (if applies) | No | Yes |
Worker | Goes back and looks up data from table that stores worker information | Yes | Yes |
City | Populates City | Yes | Yes |
Expense Category | Populates category of expense by running query against the travel cost table to get cost classification | Yes | Yes |
Currency | The currency type (example: usd, yen, ect) | No | Yes |
Allowable Amount | Amount of money allowed – perhaps for this worker to spend on travel for this project(many combinations) | No | Yes |
Per Unit | Do you want this policy to apply per a day, per a certain type of expense, for overall expenses | No | Yes |
Receipt Required | Do you require receipts for this policy to apply | No | Yes |
Receipt Minimum | Minimum amount for the receipt to apply | No | Yes |
Maximum Percent | Maximum percent of money that can apply (usually towards this category of expense) | No | Yes |
Maximum Amount | Maximum amount of money allowed | No | Yes |
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 Term | Total Number | Multiplier |
# of places we input values in | 17 | X 3 |
# of read only screens appearing to users | X 4 | |
Database queries used to produce simple information | 6 | X 3 |
Tables in AX for main query | X 7 | |
Outside data sources for information | X 5 | |
Business Rules | Ignore for this post | Ignore 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 Form | Function | Requires separate data query | Input Type (directly accepts values that will be written to database) | Is a Read-Only Screen or has a Read-Only Screen Component |
Policy Type | Determines where policy applies | No | Yes | Yes |
Start Date | Begin date of policy | No | Yes | No |
End Date | End date of policy if any | No | Yes | No |
Customer Account | Customer Account policy applies to | Yes | Yes | Yes |
Project Contract ID | Project contract ID if any that this applies to. It gets this by running another query against a table that stores contract ID’s | Yes | Yes | No |
Project ID | Specific Project this applies to, it runs a query to look this up against a specific table that stores projects | Yes | Yes | No |
Project expense Policy Worker group | Looks up applicable category of worker (if applies) | No | Yes | Yes |
Worker | Goes back and looks up data from table that stores worker information | Yes | Yes | No |
City | Populates City | Yes | Yes | No |
Expense Category | Populates category of expense by running query against the travel cost table to get cost classification | Yes | Yes | No |
Currency | The currency type (example: usd, yen, ect) | No | Yes | No |
Allowable Amount | Amount of money allowed – perhaps for this worker to spend on travel for this project(many combinations) | No | Yes | No |
Per Unit | Do you want this policy to apply per a day, per a certain type of expense, for overall expenses | No | Yes | No |
Receipt Required | Do you require receipts for this policy to apply | No | Yes | No |
Receipt Minimum | Minimum amount for the receipt to apply | No | Yes | No |
Maximum Percent | Maximum percent of money that can apply (usually towards this category of expense) | No | Yes | No |
Maximum Amount | Maximum amount of money allowed | No | Yes | No |
So, in this case, we have a total of 3 read-only screens, fields, or messages.
Brandon Simplified Term | Total Number | Multiplier |
# of places we input values in | 17 | X 3 |
# of read only screens appearing to users | 3 | X 4 |
Database queries used to produce simple information | 6 | X 3 |
Tables in AX for main query | X 7 | |
Outside data sources for information | X 5 | |
Business Rules | Ignore for this post | Ignore 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 Term | Total Number | Multiplier |
# of places we input values in | 17 | X 3 |
# of read only screens appearing to users | 3 | X 4 |
Database queries used to produce simple information | 6 | X 3 |
Tables in AX for main query | 1 | X 7 |
Outside data sources for information | 0 | X 5 |
Business Rules | Ignore for this post | Ignore for now |
Fifth, calculate the total number of functional points now
Brandon Simplified Term | Total Number | Multiplier | Total Functional Points |
# of places we input values in | 17 | X 3 | 51 |
# of read only screens appearing to users | 3 | X 4 | 12 |
Database queries used to produce simple information | 6 | X 3 | 18 |
Tables in AX for main query | 1 | X 7 | 7 |
Outside data sources for information | 0 | X 5 | 0 |
Business Rules | Ignore for this post | Ignore 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/lookups | 3 |
10. Usable in other applications | 0 |
11 Installation ease | 1 |
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 Area | Rate of Delivery |
Accounting | 11.3 |
Manufacturing | 6.3 |
Banking | 12 |
Telecommunications | 2 |
Insurance | 27.4 |
Engineering | 8.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.