Archive for the ‘FAST’ Category

Problem Solving, SOA, Agile, Legacy Replacement and Watermelons

Monday, April 18th, 2011

There are no big problems, there are just a lot of little problems. – Henry Ford

Most reasonable people would agree that the smartest way to solve a problem is to break it into smaller pieces.  Sometimes, though, when we’re close to the situation we need to find a way to take a step back and look at the problem differently.

As this baby found out, taking on the whole watermelon was never going to work, so (with a little help) he took a step back (figuratively, because he seems like a pre-walker) and approached it differently:

Recently, one of my teams was facing a challenge.  They were making frequent changes to some complex code and each change would be very time consuming.  .There were many different places where this challenge was presenting itself.  Pretty quickly into the brainstorming session, someone came up with a solution that would eliminate about 60% of the places where this problem was happening – in other words, 60% of the problem would be eliminated resulting in a big productivity gain.  Awesome, right?

I then watched something that struck me….a room full of smart people spent almost an hour shooting holes in this solution because of “the other 40%”.  The group went back and forth and concluded that they couldn’t solve the problem and that everyone would go back and think about it – then get back together in a week.

I jumped in with the idea that they invest the small effort to implement the solution that would fix 60% of their problems and then look at the other 40% as a second problem to solve.  While this was pretty obvious, this group was pretty reluctant until I explained what I thought was the path they were on:

  • Another week was going to pass with them running into this efficiency problem (and someone quickly calculated that the effort for the quick fix was going be less time than they were going to save within a week or two)
  • They probably weren’t going to find a solution during that week and when they got back together, they’d just re-hash what they already talked about
  • If they think they came up with a solution that covers everything, they’d probably realize while  implementing the solution that it really didn’t cover everything and as they “peeled the onion”, the work would grow and take longer and cost more than they expected
  • In the rare event they came up with an all encompassing solution, it would probably be too big to justify doing anytime soon and they’d be living with the pain for a long time
  • Then, as time goes on, the problem will grow and the solution will become that much more difficult

I also explained that after we implemented the solution that knocked out the 60%, the remaining problem would become clearer and could probably be broken down even further.

  • Why do so many people on software projects forget to break their problems down into smaller pieces? First, they “know too much”.   I once had a CFO tell me that he could solve bigger software development problems than the average programmer because he didn’t know as much as they did.  When I heard this, I thought it was ridiculous, but he insisted that they would allow all of the things they know get in the way of solving the root problem.  He said that he could assume away a lot of the variables and make them constants, while the programmer would try to solve the problem with too many variables.
  • Sometimes people are afraid that there is a solution to the whole problem and that they’ll look bad when someone else comes along with that solution and plays Monday morning quarterback on your work.
  • Sometimes solving the smaller problem results in having to go back and do some rework when you get to one of the subsequent problems.
  • There’s always the “hero complex” –people want to solve “hard problems”, not the “simple problems”
  • Let’s face it, most people on development teams grew up hearing that you want to think everything through, get it right the first time and eliminate all that wasted rework.  It’s part of our DNA.

Now, most companies are moving to iterative or agile methodologies and have realized that it’s OK to make quick decisions without all of the information.  It’s OK to have to go back and rework some stuff.   Implementing something is better than coming up with the most elegant solution that never gets implemented.  Predictability is important to companies and it’s a lot easier to predict smaller pieces of work.

I’d much rather solve simple problems than not solve the real complex ones.   This is the same approach I try to take with everything (SOA, Agile development, incremental legacy system replacement, or eating watermelon – to name a few).

Tom Famularo

FAST

An Old Cliché: Less is More

Tuesday, March 8th, 2011

“Simplicity means the achievement of maximum effect with minimum means.” – Albert Einstein

In the book “Rework”, by Jason Fried, he boasts how his company’s software has far less features than its competitors.  When I first read that, I found it odd, but it got me thinking.

There are many reasons why I think larger software packages or systems are “on their way out” in favor of a combination of smaller components, calculation services, and rules engines orchestrated together.  The area I’d like to highlight here is related to “feature bloat” in those software larger packages.

Having been a Product Manager for various Life Insurance software products and reviewing many others,  I would estimate that at least 50% of the overall functionality is not needed or used by the average customer (and up to 75% of the domain specific functionality).  Over the past 20 years, one of the objectives for many insurers has been to consolidate legacy systems onto a single platform.  As a result, the vendors were forced into supporting all different types of products and business processes.   In order to be considered for such consolidation projects, vendors had to be able to support traditional product, universal life, annuities – fixed and variable.  Then, when vendors needed to expand they either went into other markets (health, disability, LTC ) or geographies (Asia-Pac, Europe, South America).  This caused their systems to grow more and more.  In addition, Policy Administration wasn’t enough, companies had to expand their breadth of functionality to the front office, underwriting, claims, billing, and so on.  In addition, over the years, they’ve chased whatever the cool feature of the day was or whatever some programmer developed over any given weekend.

To say the least, for these vendors to keep up in the features and functions race, the size of the systems grew immensely.  This is not even taking into consideration the vendors who were acquired and their software was “merged into a larger enterprise”.

On the surface, it sounds like a good thing to have all of this functionality in one place.  So, why is all of this a problem?

1.      The systems were initially architected for a purpose that wasn’t different than accommodating everything it ended up accommodating.  So each step of the way, more and more code was layered on top its foundation (similar to a foundation that wasn’t big enough for the building sitting on top of it)

2.      Each of the major additions usually resulted in some re-architecture or software pattern changes that left the system with a lot of inconsistent ways of doing things.

3.      In addition to all of that extra functionality that isn’t really needed, there’s always a ton of customization required to meet the customer’s real needs.  As a result of navigating through all of this extra code and configuration (the aforementioned feature bloat), the cost, effort, and risk of doing the customization is extremely high.  One could argue, it’s 50/50 as to whether it’s just easier to start from scratch.

4.      The end result of all of the customization (configuration or code) wrapped around all of the code in this large system is very difficult and costly to maintain.  So, you’re now stuck with dealing with this problem for the life of the software.

5.      Performance usually suffers from having to perform more operations than necessary to support the business as well as a larger memory footprint.  The answer is usually “add more servers” – which then blows up the infrastructure costs (both hardware and additional software licenses)

6.      Tons of inconsistent code and inter-dependencies makes it difficult to use lower cost resources (off-shore or less experienced) and usually results in requiring expert developers or significant ties to the vendor.

7.      The vendors have to keep up with their diverse customer group and spread their investments pretty thinly.  In addition, the hottest new topics are where the majority of the investment dollars end up going – which leaves the average customer not getting a good return on the recurring license/maintenance they’re paying the vendor…which probably doesn’t matter because the combination of the software architecture and all of the customizations make real upgrades too difficult anyway.

By moving to a model with smaller components and services, companies can meet their immediate business needs with a lot less code, configuration hardware, and headaches.  It allows them to have an evolutionary expansion plan where they’re adding only what they need.  The net result is smaller implementations, lower cost maintenance and more technology choices over the long run.

Tom Famularo

FAST

Tapping the Potential of the Amazon Cloud

Friday, March 4th, 2011

The recently released “2011 US Insurance CIO Survey” from Celent provides a great snapshot of where insurance CIOs are focused in a number of areas.   While cloud computing is clearly emerging, it’s interesting that of the surveyed respondents:

  • No companies reported that cloud computing is “in wide use”
  • 38% of companies have cloud computing “in limited use”
  • 52% “will investigate/pilot in 2011”

Obviously, it’s still in the early stages and it will take a few years for the model to develop and for cloud computing to be fully exploited.  Because the benefits are so great, I believe that companies and providers will quickly start to find new and interesting ways to tap into the vast potential of “the cloud”.

In our case, I can’t see how we could have gotten FAST off the ground without the Amazon Cloud.  In 2010, we paid Amazon between $1,500 and $2,000 each month – about $20,000 annualized.  What do we get for that?

  • 6 Windows servers.  Each has 100 GB of disk space, dual core processors, and 7.5 GB of memory
  • 2 Linux servers.  Each has 150 GB  of disk space, single processor, and 2 GB of memory

If we need a new server, it literally takes minutes.  We pay for what we need, when we need it.  We don’t have an MIS department.  We don’t have a server room.

Doing this “the old way”, we would have spent vast sums on hardware and building out a server room.  And we would have had to hire experts to configure and manage the servers.  Even if we had done this “on the cheap”, we would have spent $250,000 to $300,000 on hardware and staff (compared to about $20,000). As a startup, it’s almost impossible to replicate the quality and stability of the Amazon environment at any price.  Having lived through that in the past, there’s a tremendous drain on management and on staff productivity as you iterate toward a “rock solid” environment.

In other words, we paid Amazon less than 10% of what it would have cost to do it ourselves. THAT’S 90% LESS for something better.

So, does this have any implication for the insurance industry more broadly?  It sure does.  While the option of putting everything “up on the cloud” would not be practical today for a large insurer, as the industry moves to a more SOA-based approach it is practical to deploy discrete web services or components on the cloud.   The potential is obvious and the benefits could be extraordinary.

John Gorman

FAST

A Hidden Root Cause Problem with Software Products

Friday, January 21st, 2011
“The worst programs are the ones where the programmers doing the original work don’t lay a solid foundation, and then they’re not involved in the program in the future”. – Bill Gates



Have you ever looked back at something you wrote or created years later and wished you could do it all over again?  While you may be proud of what you originally did, most of the times you can think of many things you would do differently.  Most software architects and developers can relate to this.

While the desire to rework things you’ve already done exists in most facets of business (or even life in general), the issue is magnified with software.  There are several reasons for this:

  • First, a significant amount of time lapses from creation to completion. Beyond initial completion of the software, the problem gets worse over its lifespan.
  • Typically, the first things written are the foundational items.
    • There is usually pressure to “see something” working.
    • Technology choices, architecture patterns, coding standards, and the exact way that certain things will operate are all decided in the first few months.
    • You may or may not have the right people making these decisions. The wrong people will create problems that will be with you forever. The right people
      are sometimes too in touch with the latest and greatest technologies and philosophies and also are probably their own biggest critics in the end.
    • Decisions are sometimes also too much of a function of the times. With the rapid change in technology, over any 5-10 year period, this could mean big differences between how it was done and how it should be done “today.”
  • Business Needs Change
    • It’s not practical to consider all future potential business needs up front, but in most cases throughout the life of a software product, the requirements will change
    • Many times, the changes of requirements are big enough that require sweeping global changes to the software and it is very costly and risky.

The irony is that the compounding of this problem over the years is usually the thing that ends the life of a software product, but there’s rarely a time to justify going back and changing it.  Having managed software products and divisions at both small and large companies, the one thing that is a common is that there is more work in the backlog than can ever get done with the budgets and schedules.

If I had a nickel for every time a developer came to me and said that they wanted to make some global change to the system because it was the right thing to do, I’d have a lot of nickels.  95 times out of 100, their ideas for changes would make the product better.  Unfortunately because of the circumstances, 90 out of those 95 times I couldn’t justify doing what they wanted to do.  The costs of making those global changes are enormous.  The risks to customers, sales, and internal schedules are even worse.  The further along the product is in its lifecycle, the higher the cost and risk.  In the rare event that we could make a case for something, the cost and time had a big impact and it ended up being so disruptive to the product that only future customers could benefit from it (i.e. the already impractical notion of an upgrade became impossible).

The argument that most good architects and developers make is “that’s why we need to get it right the first time” – hard to argue with that.  Unfortunately, that sometimes leads to the old “analysis paralysis” and it’s still unlikely that you won’t be looking at it a few years later with many things you wish were different.

I’ve had the good fortune (and pretty rare distinction) of being part of creating several new software products from scratch.  While there are things that you learn on each one that you apply to the next, you still fall into the trap of continuously wanting to rewrite portions of it.

In my latest endeavor, I’ve tried to tackle this problem head-on.  We’ve architected things in such a way where every piece of code is designed to be replaceable (and backward compatible) in a very cost/time efficient way (largely through built-in automation).  We have a small team whose single focus is to constantly look at the code, design patterns, and technology choices and rapidly make those sweeping changes.  In fact, many of those ubiquitous changes to the actual code can be made through external configuration.  This approach provides a pretty practical solution to this problem that seems to have no real solution.

I’ll write more detail about our solution for this later, but wanted to get something out there to see if others have closely observed this same pattern/problem and/or if others have found solutions that don’t require a lot of compromise or a lot of money.

Tom Famularo

FAST

Resolutions

Thursday, January 6th, 2011

It’s that time of year again.  Have you made your New Year’s resolution?   The practice gets a lot of attention – but it’s always in the context of the individual.   Can’t companies make resolutions?  Yes, I’m aware that business entities operate differently than individuals but surely they can join in on the fun.  Not all changes need to come from upper management.  Generally speaking, the smaller your company the easier it is to affect change in your workplace.  But even those working in large corporations can take it upon themselves to make improvements.

I’ve collected some of the most popular resolutions to see how they can be applied to companies in ways that do not require a massive company wide reorganization or even managerial responsibilities.

Lose Weight

Ah, perhaps the most popular resolution of all-time.  The company equivalent: trim the fat, that which serves no purpose.  Ditch what is rather useless and replace with something new.  It could be a copier, a server, or an outdated version of pre-packaged software.

Manage Stress

Individuals can become stressed, and so can departments.   Is a shortage of developers causing problems?   Are people happy with the furniture, lighting, and seating arrangements?  Does your vacation policy encourage employees to take time off?  There are dozens of ways to reduce stress in the office place, and quite often taking action increases productivity.

Take a Trip

Is there a client you’ve neglected to visit?  Perhaps some off-shore folks would benefit from a trip to the US – or maybe a flight in the other direction for an on-shore resource is in order.  Upper management won’t necessarily know if there’d be benefit in people from different locations coming together.  The employees generally do know (or know first).

Volunteer

Does your company give back to the community in some way?  Perhaps it’s time for another blood drive, a scholarship program, or a community service initiative.  This is most definitely something any employee can drive – it need not come from the top.

Pay off Debt

Take action on paying off technical debt – the obligation that a software organization incurs when it chooses a design or approach that’s expedient in the short term but increases complexity and is more costly in the long term.  Every software organization has it.  You can pay now, or pay later.  Pay now.  While large endeavors do require budget, it can be tackled in ways that allow employees to slowly refactor that which they understand well.

Get a Better Education

Does your workforce know what it needs to know?  Are you cross-training?  If there’s room in the budget for formal training, encourage employees to apply.  And if there isn’t, having employees conduct training at lunch time costs virtually nothing.  Documentation, while not a complete substitute for formal or informal training, is often lacking.  Stressing its importance and demanding solid write-ups almost always pays off in the long run.

Quit Smoking

More generically, kick a bad habit.  Individuals have bad habits of all sorts, as do workplaces.  What bad habits can you find in your office?  Meetings, in general, are often thought of as time wasters.  Do your meetings start on time or do people stroll in 5 minutes after the designated start times?  Are people dialing into conference calls while driving or from locations where it’s difficult to give undivided attention?  Is there a designated scribe who types up the notes for distribution to the participants and other interested in the topic?  Do people listed as optional consider themselves optional?  There are plenty of ways to make meetings more productive.

Take a look around and you’ll see there is room for improvement everywhere – not just in your personal life, and not just in your own work life, but in the workplace.  Everyone from the CEO down can take the initiative to better an organization.  Are there any resolutions you’d like your company to make this year?

Jim Buckridge

FAST

If Policy Admin Systems Are a Thing of the Past, What’s Next?

Friday, August 27th, 2010

Last month, I shared the reasons why I believe large policy administration systems are a thing of the past.  As a follow up to that post, I would like to offer some insight into what I think the next generation might look like.

Certainly, the future solutions will leverage SOA and small re-usable components.  Here is an example of a life insurance financial transaction and how it can be constructed using a series of web services sitting on top of standalone components.    A series of discrete web services sitting on top of standalone components can be orchestrated to perform the overall transaction.  Typically this logic is buried in code somewhere, but by doing it this way, the components are decoupled.

It is fairly easy for people to describe and agree on what is needed, but pretty difficult to actually get there.  So, here is a brief explanation of the steps that can be taken.

  • Build all new components to be small enough and able to stand alone – All functions your components perform must assume all data is received from the outside.  They will only have access to read data that is specific to and contained within the component.  All other necessary data should be received as parameters.
  • Leverage an existing component when you can - To leverage your existing functionality, functionality needs to be walled off and you need to integrate with it however you can (not one size fits all).
  • Separate out orchestration – Using 3rd party software for orchestration forces a discipline to make the components truly standalone and guarantees the isolation of orchestration logic.  We use Microsoft Biztalk and IBM Process Server to do this.  However, there may be times for performance that you need to write code to have these components truly talk to each other.  This code has to be isolated into a separate level.
  • Find the right level of granularity, which can be an art – I have debated this point with people over the years.  On one hand, you can make every single method its own web service that can be orchestrated.  The other extreme is what most people have.  Like most things, the answer is in the middle and unfortunately case by case.  We draw the line at useful components that can do their own jobs.
  • Assume data can come from anywhere –The user interface, orchestration, web services and business process logic should not care where that data came from.  The data source should be abstracted from those layers.  In addition, the data translation needs to be handled “outside” your core code (either isolated in its own code or preferably in a 3rd party tool).
  • Continuously eliminate redundancy – There is no way to completely eliminate redundancy, but you can certainly try.  Purchasing existing components that have single functional purposes is the best way to start off with less redundancy.  However, you will still have to evolve and continue to find the places where there is redundancy and pull it out.
  • Use a modern “technology stack”– Wrapping your legacy keeps some of the older technologies in play, but if you limit its functional purpose, you are also limiting what needs to be maintained.  The newer components can leverage more of the modern technologies and get the benefits of development efficiency as well as scalable organization.
  • Implement as needed – Keep it simple and only add functionality that’s really needed.  It’s important to avoid the “bloat” of having every feature possible.  Only add components and functionality that is needed to run the business.  By stringing together the components that are needed, you can avoid having to maintain things you don’t use.

In the future policy administration model, companies can incrementally add functionality into their enterprise without major conversions and “big bang projects”.  The business can get benefits sooner and when the priorities change, you can adapt.

If you want to learn about the next generation of Life Insurance enterprise components, see www.fasttechnology.com.

Tom Famularo
FAST

The Game of Telephone: Why Does the Customer Rarely Get What They Want?

Thursday, August 19th, 2010
“Documents create illusions of agreement…100 different people can read the same words, but in their heads, they’re imagining 100 different things” – Jason Fried, “Rework”

This is part of my series of blogs regarding how iterative development methodologies like Agile solve practical problems that have been haunting software implementation projects for years.

Too often, too much time and money are  spent, the customer is frustrated, and the wrong things are built into a software application.  I’ve seen projects at many companies where more than 50% of the effort was done after the development team was “code complete.”  While I have many opinions on this broad topic, I am going to narrow my focus to  the top reasons why the notion of gathering business requirements through traditional means is flawed, as well as some tips for getting around this.

I have to apologize up front that most of my writing here describes why this problem happens and my tips for mitigation are pretty brief.  My thinking is that this is one of those cases where recognition of the problem being a big part of the solution.

People Develop Software for People

One of the first things to remember is that we are building something abstract (software for businesses), not a physical thing that we can represent in drawings (like bridges or rocket ships).  Much of the functionality in business software is open to interpretation of people.  Because so many people involved with building or implementing software are analytical with an engineering mindset,  they want everything to fit into nice algorithms with a set of true and false facts.  Computers are after all just a set of 1’s and 0’s, right?  However, people are not.  There are too many variables related to a person for their software “needs” to be boiled down to “the right answer.”


Software “Requirements”

The typical process that people have been implementing for years seems to make sense:

  1. A team of Business Analysts interviews a series of users, managers and other BAs to figure out what the company needs to do to run their business
  2. The BAs go back to their hotel room or some other remote location and compile all of their notes and sketch out their thoughts
  3. Those thoughts will then get turned into pages and pages of documents that contain process flows, use cases, descriptions of requirements and much more
  4. The BAs then mail the documents back to their counterparts for review, get some feedback and incorporate
  5. Then comes judgment day – the sign-off process…the customer then signs off and the requirements are “locked down.”

NOTE:  In some cases, there is a “liaison” between the end customer and the interviewer (BA).

So, what could possibly go wrong with this process?  It is “tried and true.”  It all comes down to one significant flaw and that is everything is open to interpretation and we then run into the “human factor.”  The interviewer and interviewee(s) have a different frame of reference to draw upon.  All of their experiences leading up to those key interviews drive their perspectives. Typically, the interviewer is thinking about the “new system” and the interviewee is thinking about the same system they’ve been using for the past 20 years.

We’ve all seen many discussions where you can tell two people are saying the same thing, but they mean something different.  When those parties have completely different frames of reference, they hear the words and process them the way it makes sense to them.  So, that’s why we put it in writing.  Right?  Now we can be sure that we both mean the same thing.  Unfortunately, we humans can process ideas in oral communication about 5 times faster than we can when reading.  The benefits of body language, facial expressions, and inflection are lost.  So, in the traditional system implementation process, the BA writes what he or she was verbalizing during meetings and the client now understands even less.  However, for so many valid reasons, the client does not want to slow down the process, so he or she only asks a few questions and provide some limited feedback.  The feedback is then interpreted by the original author – the BA.  This process continues until an “agreement” is reached – which doesn’t mean that what is in each other’s heads is the same.  As they say, “there are many ways to skin a cat.”  This holds true for software implementation.


Detailed Design

My favorite part comes in next…detailed design documents are then written telling the client what is going to change within an application.  In a vendor situation, the client really doesn’t know the details of what is already in that application.  So, you then ask the client to “sign off” on the delta of something where the starting point is vague to the client and you can only hope that you have an exact interpretation of the end state.

Development Time

Developers are notorious for not being the best readers.  Typically, they were on the opposite end of the spectrum from the English majors in college.  Reading text that has been written for the end user to understand is counter to the make-up of someone who wants to read numbers, technical jargon, and instructions.  So, naturally, they are interpreting what someone else has already interpreted.  Rarely do they get it right   No surprises here – this is what everyone expected – which is why we have the functional test after the unit test.  Note:  In many cases, the developers aren’t trusted to do the work on their own, so they often have a Tech Lead in between.  Yet, another person to translate.

The Functional Test

First, many organizations skip this and go straight to a QA person to review what the programmer did.  In those cases, there is yet another person to interpret this requirement.  For those who have implemented this step, they’ve noticed some benefit.  Unfortunately, most of the time, when the original BA tests the functionality, it doesn’t operate the way they thought it should.

HintThis part actually works. The BA will then communicate to the developer, in small chunks, quite often sitting with them, to tell them what isn’t correct.  The developer, then makes the changes and hands it back.  They iterate until the functionality works.  So, at least now, we’ve eliminated one more level of interpretation…what is developed now works to the interpretation of the BA.

Summary

From the time the customer indicated what they wanted to the time they actually see something, several months (in some cases over a year) have passed.  In that time, many things could’ve happened:    turnover in client personnel, reprioritization of business objectives, frustration with project delays and cost overruns, or, simply, now that they see what was built, they realize it just isn’t what they wanted.

I’ve been involved in too many cases of conflict resolution after the fact.  The development team built something different than the customer thought they were going to get.  In most cases, when I look at the requirements, I can see both “sides” of the story.  Is this anyone’s fault?  Usually, it is not.  It was a flawed process in the first place.

Unfortunately, the amount of time lost and dollars spent in this process were significantly more than they needed to be.  Most experts would agree that so many of the problems related to software projects are related to “bad requirements,” but why do so many people still follow this same process?

Why Iterative Development Works

Here are some pretty simple ways that an iterative development process can reduce the cost, timeline, and frustration meter.  I am not going to describe the details of those processes.  You can pick up any book or just google on Agile.

  • Interpretation discrepancies are found much sooner in the process (before significant amount of time is spent headed the wrong direction)
  • Since so many requirements can be supported different ways, the customer might even prefer the misinterpreted version that was quickly built – more likely when it’s sooner rather than later and more discrete rather than when it’s combined with tons of other changes
  • Developers have more of a sense of ownership when they are closer to the customer and are more likely to be working as part of the team
  • Functionality is broken down into smaller parts (“stories”) that can be prioritized.  Therefore, not all pieces the customer thought they needed are really needed (this is a cornerstone of Agile and is worth its own topic for a later date)
  • Less people have to learn and internalize the requirements

If your organization is struggling with some of the things I describe above (whether with internal development or with vendors), then I encourage you to consider switching over to an iterative development methodology like Agile.

Tom Famularo
FAST

Fixed Price Waterfall Projects: Perception vs. Reality

Sunday, July 25th, 2010

Many years ago, my old company (which was a small software and services company that did large projects) got tired of the unpredictability of cowboy programming and we embraced a waterfall systems development methodology with the fervor of the newly converted.

We would capture detailed business requirements that would let us determine the “whole cost” of the project and create a bullet-proof implementation plan.  We could even commit to a fixed price for the known scope – really it was a fixed price for implementing our interpretation of the business requirements. When we wrote the functional specs, we would learn even more and get some additional requirements, which would result in change control items.  Thanks to our waterfall methodology and rigorous project management, we could explain why the project was getting bigger.  As we started to code and learn even more about the requirements – the scope and cost would grow some more and the date would start to shift.

Months later, we would complete our testing and deliver to the client – and the business users would say “this isn’t what we want”.  And we would say “but it meets the spec”.   This would lead to weeks of contentious conversations and analysis and justification.  Ultimately, we’d all agree to a compromise no one was happy with.

This was done in good faith and with good work efforts all around.  However, the reality was that the fixed price would be for a defined amount of scope (call it “X”), but the project would grow legitimately because of new scope or new interpretation of the documented scope.  Before you knew it, X became 2X, which made for some painful projects and some contentious client relationships.

When I started working for a larger, more established company, I learned that there might be a better way.   I learned it was better to estimate all of the likely costs up front.   So, we spent more time on requirements and got even better estimates, more bullet-proof project plans and detailed scope definition.  Unfortunately, the costs still went up during design and build – but at least we had much more data to explain why the project was a lot bigger!

Especially in the world of big insurance systems, I believe there is a large gap between perception and reality when it comes to fixed price waterfall projects.  At the risk of stating the obvious, I have listed below some of the areas where I see the gaps.  There may be good business reasons or constraints that steer you toward the fixed price waterfall approach, I would just recommend that you go into it with your eyes wide open.

Perception

Reality

A waterfall project with a fixed price contract lets me know what my cost is going to be Fixed price contracts let you know what the cost is going to be for the vendor’s interpretation of documented scope. Typically, large multi-year projects will cost multiples of the initial estimates due to change control items.
Defining the scope up front is worthwhile because I can make sure that everything I need will be in the system. You spend way too much time defining scope and creating “bound scope” and not nearly enough time prioritizing scope.  Too much unnecessary scope is documented and many important requirements are missed and become change control items later.
You can document enough to bind the scope Until the client sees the functioning system, there is no way to remove “interpretation risk”.  There is just not enough time or budget, typically, to review and discuss every requirement and spec to ensure there is no misunderstanding.
A tight change control process will ensure that management will understand and buy into scope increases Management will not have the bandwidth to focus on change control items.  It won’t be one big item, but a series of smaller, detailed items that drive the cost up.  Ultimately, the scope will grow significantly and management will not feel good about the rationale.
Fixed price contracts favor the client Fixed price contracts favor the vendor if the vendor is sophisticated enough to manage change control process properly.
Fixed price contracts make for a smoother relationship because everything is documented A good vendor project manager will know the contract “inside and out” and will be ensuring that both parties uphold their part of the bargain.  There will be a lot of contentious discussions about what is in and what is out of the fixed scope.   Terms like “nickel and dimed” will be used regularly.

John Gorman
FAST

8 Reasons Why Large Policy Administration Systems Are a Thing of the Past

Friday, July 9th, 2010

Today, it’s clear that insurers will stop placing big bets on large systems. They’re moving to a model where small components and web services combine with their legacy components in an incremental manner. Here are some of the reasons why:

  1. All systems want to be the “center of the universe”. In a future world of SOA and architectures of small re-usable components across an enterprise, components need to be built from the ground up to be standalone and ready for integration.  Most vendors of “systems” or “platforms” say they are built for integration (and some of them even are). Of course, you need to make that system the “hub”.
  2. “Throwing the baby out with the bathwater” – much of what insurers already have in place works just fine and can be leveraged in some way without significant expense.
  3. The full software package has a number of awesome features that are just not applicable to your business.  It has been estimated that more than 50% of the overall functionality a system has to offer is not even needed or used in the average implementation.   The customer is paying for this functionality one way or another (with higher than needed fees to vendor and higher maintenance costs due to “code bloat”).
  4. There is no comparable “one-to-one” match to your existing legacy platform you want to replace.  So, a significant mapping, customization, “configuration” and integration job is required.
  5. Redundant functionality in the admin system to other areas.  Typical redundancy consists of client, product, policy, agents, and even generic functionality like content management, users, security, work queues, correspondence and much more.
  6. It’s all legacy anyway.  The “newest” US life Policy Administration system with any substantial customer base is about 10 years old.  With technology generations coming and going faster than ever, this is already out-dated.  Compound that with the fact that it will take you 3-4 years to convert your legacy onto this “new” system that is now almost 15 years old when you are finished…time to start looking again for a new system.   Now, let’s look at some of the other “good” systems on the market…they have all been re-branded by slapping on new technologies onto their old core code.  In those cases, you’ll be looking at a 20-25 year old system by the time you’re done.
  7. Instead of incremental improvements sooner, systems are designed to be implemented as “big bang” by converting full blocks of business or put up new products.  They do not allow you to implement one major business function at a time.
  8. Most of the top vendors out there have been acquired by a large company who has significantly increased costs, are primarily looking for the “big deals”, have stopped innovating, and diluted the domain expertise and talent.

If you want to learn about the next generation of Life Insurance enterprise components, see www.fasttechnology.com.

Tom Famularo
FAST

LOMA Lessons: Going Agile

Thursday, June 3rd, 2010

Attending my first ACORD LOMA conference this year was an eye-opener. Whether I was chatting with someone in the exhibit hall or attending a session presentation, a common theme was apparent: insurance companies are tired of doing things the same old way.

Several people described system implementation horror stories – multi-year, multi-million dollar investments that hijacked IT organizations and created business roadblocks. Meanwhile, they acknowledged that maintaining their current stable of disparate legacy systems impairs their company’s ability to compete.

Clearly, something’s got to give.

Everywhere I turned, people were describing how going smaller was what they needed. Shifting design approaches from technical staff to business users was another common refrain.  Several presenters extolled the virtues of rapid development of “bite size” code, getting end users to quickly see what the results of their requirements are, and connecting them via SOA architecture.

One of the drivers of the shifting landscape has been some recent success. One large P&C insurer described how a small series of components developed in a non-traditional way scored huge points with end users. Another carrier proved significant savings by building reusable services that ultimately led to the de-commissioning of three similar legacy systems.

Challenges remain, though. Movement towards Agile and other iterative development methodologies are gaining traction, but some people expressed frustration with resistance from key stakeholders. Change is often difficult, particularly with entrenched user groups resistant to new ideas.

Even so, I’m more convinced than ever that modern software development processes will soon become commonplace. Despite the challenges ahead, a clear shift is underway. Rapid development, reusability, and true SOA are all part of the direction. That makes me very optimistic about the future.

Rich Grisham
FAST