Maintain Your Software Like It’s Your Home

Are you interested in software that runs on a magic PC somewhere in “the cloud,” never has to be bothered with, and always works smoothly? Sure you are, but if you think such a thing sounds too good to be true, you’re right. Keeping an application performing well throughout its life is much like maintaining your own house–it’s necessary and valuable.

In an previous post, I discussed the Software Life Cycle and made some basic comparisons between the preparation needed to build a house and the preparation needed to build software. The parallels don’t end there; a lot of similarities can also be seen in the maintenance of, and care for, both a house and a software system. Unfortunately, once your new home or application is built, you don’t get a free pass to kick back with your feet up and a nice cold beverage in hand. Using the house/software comparison, below I’ve listed a few areas where maintenance is important in both places:

Regular care

Lawnmower

  • Regular care at your house will include mowing the lawn, raking the leaves, staining the deck, painting the fence, landscaping, etc. All those things we love to keep busy with! We do them for a reason–to keep our homes looking nice and increase it’s value.
  • Likewise, you should regularly be evaluating how to maintain an aesthetically pleasing and user-friendly experience to keep engagement with your software at its peak. In most cases losing engagement will mean losing value in some way. “Regular maintenance” here can mean generating fresh content regularly, updating the layout of your site, adding accessibility features, or implementing new software standards, where appropriate, to keep your application looking and feeling new.

Upgrades

Roofer

  • Eventually, and hopefully not before you’re good and ready, your house is going to need a new roof, a refinished driveway, an updated heating/air conditioning system, etc. These are bigger projects and occur less frequently than the weekly, monthly, or yearly tasks mentioned above but these can easily be considered even more important to the general upkeep and maintained value of your home.
  • Your software should be getting upgrades too, as regularly as possible. Regular maintenance times for things like hardware upgrades, software patching, and security updates are a must. Beyond that, you should consider moving your software to the latest versions of code frameworks and database management tools. Staying on old versions of these things, much like failing to replace an old roof, increases susceptibility to leaks. And the longer you wait, the more likely your path to upgrading will be even more painful, more stressful, and more costly.

Additions

Blueprint

  • You want to move your laundry room from your first floor into the basement and then remove a wall to expand your dining room? Great…Maybe. Any good contractor will tell you how these changes will affect your house (what if that dining room wall is a load-bearing wall?) and that you’ll need to take these changes into consideration when you think about continued upkeep for your home.
  • Most of your software will have additions after your initial launch, too. This isn’t a bad thing…Much like the laundry room situation above, you won’t always think of everything in your first go-round. How new additions will fit and interact with the rest of your software, and how to most effectively make these additions, should be an important part of maintaining your software. You’ll want to analyze whether new features will cause other parts of your system to have issues, much like how removing a wall from a house may affect its structural integrity. Once your software is live, always consider how system processes interact and what adding a new feature will mean for the people already productively using the software.

Clutter

Clutter

  • When you use your basement as a one big storage closet, continuously piling things down there without a periodic clean out, it leads to a huge mess. What happens when you have an emergency and a plumber or HVAC expert needs to get down there and fix something?
  • Even if you haven’t thought about it yet, at some point you’re going to have to clean up your software the same way you would your basement. Today, it’s a brand new system using bleeding-edge technology and state-of-the-art hardware. But as your amazing software ages, all of the data you’re compiling is going to, eventually, become difficult for the system to manage. Do you really need to hang on to a record set of 10,000 emails logged from 1995 anymore? Probably not… So maybe it’s time to archive anything that’s clutter, helping your application breath a little easier. This clean up will help troubleshooting and day-to-day activities go more smoothly, too.

I could keep making house/software upkeep comparisons all day but I think my point has been made: we frequently overlook the maintenance portion of software development but, much like ignoring home maintenance, it’s a bad idea. Take this to heart; regularly scheduled maintenance is incredibly valuable in keeping your software functioning at its best and understanding why and how you need to care for your software will make dealing with it easier in the long run.

Advertisements

Database Organization

Great organization is the key to success in many aspects of our lives. Usability is a key feature in the applications we build, yet these factors don’t always carry over into database organization, especially in growing systems. Just because your database isn’t the face of the application, doesn’t mean it shouldn’t have the same sense of flow and organization that the application does. Maintain and organize your database as you would other areas of your life (i.e. your home). Organization should be purposeful, have a basic sense of flow, and be ready to show off when necessary.

Table and Column Naming Conventions

I often see table and column naming conventions that appear cryptic, coded or simply incorrect. Table and column names should reflect the data that they store. Find a standard in your application and stick to it; it will make maintaining and troubleshooting the application in the future a whole lot easier. You wouldn’t organize your office files and label them “x” or “col1,” so why do it with your database?

Related and Duplicate Data

Keeping redundant data can cause multiple issues with your application, including rapid growth in your database and confusion about which data is accurate.

In the same sense, storing related data in unrelated tables can cause the same issues. It falls in line with the same point regarding table and column naming conventions. Data should be grouped together as it makes sense for the application. Doing this will most likely improve the performance of your application; databases with normalized, properly indexed data translate to higher performing applications

Routine Maintenance

Vehicle engines and home utilities require routine maintenance–your application database is no different. Applications grow and evolve over time and you need to ensure that your databases grow and evolve with them. Maintaining database indexes is the key to keeping your application performing at a high level. Scheduling weekly, monthly, or quarterly reviews of your database indexes will help maintain these efforts.

Review the growth of your database tables; it’s easy to assume transactional table data needs to be stored indefinitely. Know how long your application needs to review and access historical data. Data can be easily archived out to a reporting database to minimize the size of your transactional tables

The simple, every day organization and guidelines that make you successful should reflect in your application database. Remember, bad habits and sloppiness in setting up your application database are the quickest way to cause problems for your application.