Blog

  • Exploring Your Tool and Application Options

    Exploring Your Tool and Application Options

    In the last few years, I have often found myself researching application options and tools a customer is interested in.  This usually starts with a suggested tool or two that they like (or have a few specific dislikes).  Then I am asked to see what is available that is similar but better.  The fruits of those little projects are a good start for this article and will likely surprise you.

    A Target-Rich Environment

    The first thing that jumps out at me when I start these projects is the number of application options that can be found with a search or two.  Even “niche” applications like visitor recording, B2B e-commerce, and database development tools will return several options.  Better yet, most of the alternatives I come across have at least a free trial period of a few weeks while often providing an unlimited free option.  Cost is rarely an issue.  The tools available these days are regularly priced in a way that allows customers to start simple and inexpensive or go all-out for a high-end solution.

    Worth the Investment

    I mentioned a trial period available for most solutions.  When you combine some of the training material often provided with the ability to “play” with these applications the time requirements can become overwhelming.  However, an hour or two will typically be more than enough to evaluate the usefulness of these tools.  At times, you will be able to eliminate options in fifteen minutes or less.

    This time spent perusing your options is well worth the investment.  Your initial list of a few possibilities can grow to several.  Then they can be pared back down to a short list.  At this point,  each solution is likely a good fit (or better) for your needs.

    Evaluating The Options

    The number of viable application options makes the selection process easy to overlook.  When you feel you cannot wrong with any of the available choices, then it is logical to keep your investment small and avoid going deep into the evaluation.  At this point, it is worth looking at the reasons that started the search process.  Some requirements were not being met by the original solution.  They should be verified in the short list of options.  The search process will also provide new elements that are desired in the solution.  That is just the nature of reviewing solutions in any vertical.  Your comfort with a prior solution can keep you from considering what new advances and features can do for your productivity and company.

    Make sure your list of requirements is kept up-to-date with what the research has taught you.  In my case, I am often in a position where I cannot make the call on that list of requirements.  Instead, I make a note of features and enhancements listed by some of the solutions that may appeal to my client.  As part of the review deliverables, I always include these features as an addendum to the requirements list or as “other things to consider.”

    The More The Merrier

    Many tools have a way to invite others into a demo period.  Take advantage of this and find some other people that can give you feedback on the product.  They do not need to spend much time at all in the product.  Instead, they can quickly provide their initial reactions to the features and interface.  This is a great way to avoid making decisions in a vacuum while also sending a form of a trial balloon to determine how open others are to this change.

    I hope these brief suggestions spark you to re-consider your current tools and evaluate how the landscape has changed.  A considerable productivity boost might be just around the corner for you and your team.  Of course, I also am happy to help you in evaluating your options and finding the best tool currently available.  I would love to discuss your specific requirements and how to find the best solution.

  • Incremental vs. All-in Change and Enhancement Strategies

    Incremental vs. All-in Change and Enhancement Strategies

    Sooner or later we have to consider how to change our systems.  This situation can come from growth in business, changes in technology (or requirements), or systems that have aged poorly.  When we reach the point of deciding on a move we often have to decide on the incremental vs. all-in approach to achieve our goal.  There are times when one choice or the other is obvious.  However, I have found that we almost always have both of these options available.  So let’s look at the risks and rewards commonly available to each decision.

    An Incremental Approach

    I find this option to be the most popular.  In fact, you might be able to rattle off some rewards and a few risks faster than it takes to read this article.  Nevertheless, it is helpful to go through the exercise and maybe a few items from either list will be new to your experience.

    Pros

    • The Risk is Reduced: Less change and more options to bail out or adapt.
    • Less Time Before Starting: Smaller changes can allow for less upfront planning.
    • Time To Bake In: Users have small changes to learn rather than large ones.
    • Less to Consider: Small scope of changes means less to worry about with each change cycle.
    • Easier to Budget: Tighter range of change and time frames make it easier to budget for changes and cash flow the project.
    • Avoid Re-inventing the Wheel: This approach allows pieces of the original system to survive and remain untouched.  Thus, business rules and proven validations do not have to be re-created.

    Cons

    • Total Cost is Higher: Overhead for each cycle adds up.  Therefore, more testing, deployment, and other phases will be repeated for each incremental change.
    • Longer Schedule: Much like the above item, the time to be done with changes is going to further in the future with an incremental approach.
    • Legacy Decisions/Constraints of the System: An incremental approach will always be tied to the original system in some way.  It does not allow for a fresh start or utterly new thinking.
    • System Stability: Regular change can make the system appear unstable to users and might be the reality as repeated touching of the core system offers opportunities for simple mistakes and human error to degrade the system.
    • Integrate Changes: No system is static.  Changes are required for a variety of reasons, and an incremental approach does not allow us to ignore change requests.  Extra effort is needed to manage change requirements and fixes along with the new/improved features being implemented.

    An All-In Approach

    This is a more courageous decision in almost every case.  In fact, this approach often results (directly or indirectly) as one that makes or breaks a job (or career).  The rewards are higher when this is correctly executed as there is more freedom to make huge strides.  That said, there is a lot to worry about as well.  Here are some of the pros and cons of this decision.

    Pros

    • Total Cost is Lower: A significant change requires a lot of testing and deployment work.  However, it amounts to fewer cycles and general overhead than an incremental approach.
    • Freedom to Innovate: The lack of ties to a legacy system allows us to learn from past successes while avoiding past mistakes. Substantial and meaningful changes can be made in this effort.
    • Shorter Time to Completion: There is not a need to run in serial as is needed in the incremental approach.  Resources can be poured into the all-in solution.  Thus, progress can be made in parallel with the current systems continuing to run.
    • More Stability For Users: This approach will result in a significant change when it goes live.  However, other than that point in time, the users will experience a stable and reliable system.
    • Less Elegant Utilities: A one-time step of significant change means the tools and utilities to do so only need to work once.  This is the opposite of the design required to make the same tools work when you know there will be multiple, smaller, executions of them.

    Cons

    • The Risk is Higher: When you make a significant change and choose wrong, it can result in a crippling loss to the company.  This can have productivity and financial repercussions.
    • More Time Before Starting: Planning and design are needed for the entire system to properly execute the all-in approach.  Every little detail needs to be addressed to reduce the risk of a complete failure.
    • More significant and Impactful Change: The substantial change of an all-in approach is hard to hide.  Often it will require training for the users to help them utilize the new system.  Alterations of business rules and procedures are often part of the content for deploying this solution.
    • Total Review and Design: The broad scope of changes require the entire system to be reviewed and understood.
    • Large Budget: A substantial project like this is harder to estimate and often includes more funding in a short period.  Incremental allows us to stretch out costs.
    • Re-inventing the Wheel: Often this approach requires core functionality to be rebuilt or re-coded and tested again.  This amounts to re-inventing the wheel for business rules and other functions.

    As you can see, there is a lot to consider with either approach.  The pros and cons balance out more often than we think they do.  Therefore, it is worth it to leave both options on the table on at least a periodic basis.  This will ensure we avoid knee-jerk reactions to one approach or the other.  As always, the more we know, the more we consider, the higher the likelihood of a successful decision.

    Going Deeper

    Incremental Changes

    When you look at the pros and cons of this approach, there are some essential assumptions made.  If you take a path that does not follow the premises, then the pros and cons will differ.  The “time before starting” and “less to consider” pros, in particular, are impacted by your approach to design. The assumption for incremental changes is that you will plan and design as you go.  This may not be the case.  Some organizations prefer to create and plan out their entire series of changes up front.  While this is a good approach, there are also valid reasons to hold off on a complete design when you are not sure far you want to progress.

    Similarly, the time to bake in and system stability items may vary in your experience.  There are ways to drag out an incremental approach so that the users do not experience noticeable changes.  Instead, they see undergo the changes as occasional enhancements.  However, this approach can significantly increase the time to completion and may increase the limits to what can be done (due to ties to the current system).

    Finally, let’s look at the re-inventing the wheel item.  An incremental approach can do this as well.  Typically, an organization will avoid touching the things that “work.”  The argument is that there is no reason to put effort into fixing something that is not broken.  On the other hand, when a core functionality can be improved, then it may be worth taking on that change at some point.  There is also the side effect that can occur where a core and stable piece of functionality is changed or even broken through changing other areas of the application.

    All-In Advances

    It should be clear that the all-in approach, in this case, is deploying all the changes in virtually a single push to production.  This can be a large number of changes to an existing solution, replacing one with another system, or starting from scratch.  Each of these three options has a very different set of pros and cons along with those mentioned.

    An important note about the all-in approach is that the sunk-cost fallacy should always be avoided.  There are many cases where companies dismiss an all-in change because they start with the idea of value for the existing solution.  Yes, there is knowledge and expertise and even momentum that the current system has.  However, if those aspects are all driving you over a cliff then how valuable are they?  Along with this, technology is always changing.  The options we had a few years ago are not the same today.  There are new solutions and standards available that might bring overwhelming value to an original or from-scratch system.  It is easy to stay with the momentum we have, but sometimes all that provides us with is false confidence.

    Final Thought

    The bottom line in considering the pros and cons of these approaches is that your mileage may vary.  In order to make these aspects real some intentionality is required.  For example, if you want to reduce risk through an incremental approach to change, then each step needs to be examined thoroughly.  This examination includes looking for potential side effects and downstream impact.  None of these pros or cons are automatic, and the right approach can highlight the pros while reducing the cons.

  • Making the Most of The Implementation Phase

    Making the Most of The Implementation Phase

    The amount of time spent on each step of the software development life cycle varies from project to project.  However, the implementation phase is always the most significant portion.  That means this is the area where projects can fail or succeed.  We can ace all of the other steps in the life cycle, and a mediocre implementation will wipe out all that good work.

    Balance The Effort

    In my experience, the most impact during implementation is to try for a balanced effort from start to finish.  Avoid a slow start and then hectic finish to hit deadlines.  Particularly for longer stretches of implementation and big projects.  This is a killer of productivity and quality.  I have seen project after project that burns out team members with a hard push at the end that could have been avoided.  The way to accomplish this is to set proper milestones and goals that balance the effort throughout the phase.  When you keep the goals in sight, it is easier to keep everyone focused and avoid the lazy drift big projects see at the start.

    Regular Sanity Checks

    Another essential trait of a successful implementation phase is regular checkups.  These are not progress focused as much as they are about requirements.  There are a variety of ways to do this, but the result should be a review of what is being implemented to ensure it is still in line with the requirements.  This includes reducing feature creep as well as correcting design drift.  Short projects will not suffer from this too much.  However, long-term or large projects can see dramatic implementation problems and slipped dates from adding features or skewed solutions to requirements.

    The good news is that this task does not need to be done by the implementation team.  Team members from other phases (or QA staff) can perform sanity checks of features.  They can measure against requirements and then meet with the implementation team to correct problems.

    Frequent Code Commits

    This may seem minor, but regular code commits are critical.  I have come across numerous projects that tank because of impossible code merge needs, or a team member disappears along with their source.  Ideally, this is built into the daily regimen of the implementation team.  Regular merge and build steps are a big help as well.  Much like the sanity checks above, regularly testing that you have all you need for a successful build helps keep from drift.  This factor is a solid argument for best practices like continuous integration and regular builds.

    Test Early

    Testing has gotten better but still is too often left to the end of the project.  This is when the cost to correct errors is at the highest level.  It has been established over the years that the earlier a bug is detected, the easier it is to fix.  There is a bit of a challenge in early testing as (by definition) the implementation is not yet complete and ready for full testing.  This timing also means that there will be more time spent testing than when it is held until the end.  That is entirely ok.  The more testing that can get done, the more likely bugs will be found and squashed.

    When you combine early testing with regular builds and commits you get feedback early, and quality is built in from the start.  This approach even makes the testing process better.  The test scripts and tools can be used and refined during the implementation phase to improve coverage and confidence in the results.

    Note that none of these improvements are substantial on their own.  These can be implemented as part of the process and pay worthwhile dividends when the project completes.  All of these can also be tried out to see how they work for you.  When in doubt, give it a shot and verify for yourself whether these are good for your team.