Why Software Configuration Management is Essential for a Small Business

[article]

In his CM: the Next Generation series, Joe Farah gives us a glimpse into the trends that CM experts will need to tackle and master based upon industry trends and future technology challenges.

Summary:
Exactly how big should an organization be before CM must take an active part in the development team? The answer is simple: CM, when properly adopted, gives an advantage to the small business that is necessary for it to compete. It doesn't really matter the size your company, you still have to successfully develop, build, distribute, and track your software.

Exactly how big is an organization supposed to be before CM must take an active part in the development team? The answer is simple. CM, properly adopted, gives an advantage to small businesses that is necessary for it to compete. The company size doesn’t matter, as you still have to successfully develop, build, distribute, and track your software. The fact that you're in a small business means you have fewer resources to do so.  This is why CM is so crucial to small business.

The key here is to start with next generation tools and processes, because these require far fewer resources than earlier generations.  In a small business, there isn’t time to perform data base management and administration.  You barely have time for backups.  Once the customer count exceeds one, you can't afford to manually put together customer progress documents.  Even if your customer count is less than or equal to one, the key is automation.

The Underlying Essentials
Unless you've been in a small development environment, it may not be obvious how big an impact a small thing like doing backups, or researching a CM tool has on your schedules and resources.  Because of this, it's important to focus on minimizing costs from the beginning

If you start by looking for the best tool, as long as it's free, you may be in for a resource hit.  Freeware solutions are definitely improving, but you're likely not going to find something that will allow you end-to-end life cyle management with easy customization and a low level of administration, even if it is easy to use.  Many CM vendors will cater to small business, perhaps offering a few licenses at no charge, or for a nominal fee to cover some costs.

Either way, the key is not how much you're paying, but rather how much you're saving.  This is where Next Generation comes in.  There are a number of essential capabilities in Next Generation CM tools that are very appealing to small, resource stretched companies, not to mention the big guys.  A small business doesn't have the time to spend on administration, process development - it needs to get going quickly while operating lean.  At the same time, it needs not just to do what their larger competitors can do, but to excel over them.  Below I've listed ten areas of CM where good tools and processes can help.:

1. Rapid deployment:  If the CM tool cannot be installed in a few minutes, a small business is likely to give up on it.  That's actually not a bad strategy either, because if it can't be installed quickly and easily, it probably will require a lot of administration.  There are several tools out there that can be rapidly installed.


2. Easy data loading:  It's not good enough to be able to play with the CM tool.  If you can't get your data in there quickly, there's a big danger that it'll never make it in.  Some tools are very good at automating the loading in of software, while others are not. But a good next generation tool will also help you to load in your existing problem database (probably a spreadsheet), your project plans and activities (if they exist), your documentation, test cases, and whatever other components you have in your small business development shop.  And if you don't have these components, a next generation tool should make it easy for you to start tracking these without absorbing a "cost of doing business".


3. Reduce backup administration:  It's a lot easier to back things up if their all in one tool.  If you work toward this focus, you should find that your backup administration can be reduced significantly.  Next Generation tools go further.  They can organize repository data based on reference frequency, or even allow you to migrate data to a R/O medium from which changes can still be spawned. This can cut down the time it takes for full backups by a factor of 10 or more.


4. Eliminating backups while providing disaster recovery:  I don't really recommend that you eliminate backups, but some tools will allow you to do the next best thing.  If they support fully redundant multiple site operation, in real time (or as close as you can get to it from a CM perspective), running multiple sites (even if there's nobody at one of the sites), gives you a live backup capability and at the same time provides disaster recovery for all of your project data. Again, the more of your data that's in your multiple site CM solution, the more savings and protection you'll have.


5. Good out-of-the-box processes:  This is a real differentiating factor for small business.  Even if it is relatively easy to customize process, the small business doesn't have a process expert.  It's much more important that there are good end-to-end processes out of the box. Even if they're not perfect, or requires some adaptation of terminology, something solid out of the box will both cut down on time to introduction, and will get you most of the way to where you need to be.


6. Ease of use, return on use: Over time, CM tools have (very slowly) improved in ease of use.  There are still a lot of developers who will swear by the command line interface for some tools.  Next Generation tools must not only be easy to use, but must also give a return to the user, so that they actually like using the tool rather than putting up with a necessary evil.  CM overhead is hard to justify in a small business.   But there are some tools that developers wouldn't want to part with.  Although there may be some training required for CM managers/administrators, training requirements for end users should be minimal, focusing on process and concepts.

7. Agile CM support: Most small software businesses don't work to traditional product plans.  Instead they tend to work in a more agile fashion, to priorities, both for features and problem reports. New feature requests appear weekly, from customers and from within the engineering organization.  The tools and processes for small business need to be able to adapt to Agile CM, whether or not agile design practices are being used.

8. Easy, interactive reporting: In a small software company, you're less likely to spend time in large project review and change control board meetings then in a larger shop. Instead, it's typically one or two Project or Product managers that keep on top of things.  In this respect, it's still important to make intelligent decisions, but the formal reports may be less important.  Instead, queries, dashboards and other facilitating mechanisms must be present so that the right decisions can be made based on all the available data.  Older CM tools tended to leave out a lot of the key Product reporting, focusing instead on CM manager issues.

9. Build automation:  When there are smaller teams with less control structure in place, there is a tendency to create builds manually, or to deliver them from a developer's workspace.  It is crucial that this not happen.  Not only does the quality of the deliverable depend on it, but typically the integrity of the entire company.  The CM tools and processes must facilitate an easy path to automation of builds so that all system builds may be built from the repository without human intervention.  At the same time, build definitions need to be captured.  Of course this isn't just a small business requirement, but rather it is much more of a critical capability for small business.

10. Easy customization:  Customization will always be a nice thing to have.  But in the case of a small business there is typically no time for this, and no money for consultants.  Any customization has to be easy to do.  It has to be done as an immediate answer to "I need to be able to do this now".  If customization takes you out of the now zone, it no longer serves its purpose because it won't be done. If I want to insert a field in the CM repository but then find that I have to go and change all my forms, my reports and perhaps other things before I can make use of it, I'll live instead without the new field - or I'll look for someone who has already done the customization and posted it in the user group.

Although these 10 items are critical for small business, they are still of great benefit, and even of larger benefit, to larger shops.  They're not quite as essential because the larger shop has more resources, or at least that's been the traditional take on things.

Essential CM Practices
Let's move on to more detailed CM Process.  What are the essentials for small business?  Below are 15 guidelines that you must follow to keep your small business advantage.  If you stray, you'll have problems such with quality, traceability, accountability, and resources.  It may look like a long list, but in fact, every bit of the process can be a part of a natural process, without overhead, and with huge payback.

  • Track customer requests and spawn them into problem reports or features where applicable.
  • Track all of your problems and prioritize them based on when you need them completed.
  • Track the features you're working on, even if you don't have full official specifications. Make sure you identify and capture against each feature exactly those things that will affect the user documentation.
  • Prioritize features according to your development process, even if it's an ad hoc process.  Make sure features are being addressed in the right order and that all simple (fast track) features are clearly tracked.
  • Allow only engineering problems and features to authorize changes to your software product.
  • Use a Change package for all files of each software change and cross-reference it to all problems/features addressed.
  • Keep changes relatively short in time and use multiple changes for a feature when necessary.  Plan your change.
  • Use a branch per development stream (typically release) strategy. This leads to the most automated CM.
  • Do peer reviews on all changes, on-line if necessary.  Even a one-on-one review is much better than none.
  • Select files for integration into a new build by dhange, not by file.
  • Make sure that the Build definition is created in the repository before the build is done.
  • Perform regular automated (i.e., nightly) builds from the CM repository.  Only deliver builds built from the repository.
  • Create an automated (or semi-automated) sanity test package to run against all builds as a first step.
  • Automate whatever test cases you can.
  • Track ownership (responsibility) and assignment (whose to-do list) for each data record.

When looking for CM tools and processes, keep this list of 15 guidelines on hand.  You should be able to find tools that can automatically track the state of problems and features based on the state of related change packages, builds and testing.  Similarly, change package status should advance automatically based on the state of builds and testing.  You should not have to spend more than a few short hours customizing these relationships.

Make sure your tools have appropriate capabilities for reconciling workspaces.  Workspaces have a habit of picking up stray files or having partially completed tasks within them.  These should be easily identified and dealt with.  Synchronization with changes addressed by others should also be painless.

The Payback
Your tools should be giving immediate payback to your team, not just long term quality improvements and better customer relationships.  For example:

  • Properly implemented change packages should allow you to eliminate per file check-in, labeling, description, promotion, and delta reporting.  This should all be done with a click or two (or few) per operation.  In some cases, you may find tools that will build a change package based on the changes you've made to your workspace.
  • Good branch-per-stream tools should allow you to automate branching as required, rather than requiring developers to learn and follow complex branching strategies.
  • With proper user interfaces, communication of priorities to each team member should be automated, with prioritized to-do lists front-and-center in their view of the CM tool.  Work should flow directly from those lists with allowed actions guiding what is to be done, and complemented by on-line process guidance. These should also serve to communicate to the team as a whole what the priorities are. Use meetings for the more critical items, such as priority discussions, feature demonstrations, and peer reviews.
  • Proper reports should aid in simplifying time sheet entry based on what you did and when, and annual reports should help team members identify their accomplishments over the past year.  The small size of your business doesn't excuse you from performing reviews and giving effective feedback to your team members,
  • Good tools and process can dramatically reduce the need to branch, label and merge.  This in turn reduces the overall complexity of your environment and allows you to bring on new staff with significantly less training.

It is essential, as a small business, not that you keep pace with your larger competitors, but that you lead the pack.  CM is essential, but good, next generation practices and tools are what will give you a key advantage.

About the author

CMCrossroads is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.