Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm working on an automated update system for a legacy server/client software package written in Delphi. The way I'm designing it is so the client's (customer's) server machine runs a service which...

  1. periodically checks online for new versions
  2. automatically downloads files
  3. hosts latest version information for all client machines
  4. hosts files for client machines to update

Once this service has downloaded update files, it raises a flag in the database alerting all client machines that updates are available. BUT, the thing is, the server must be installed first. So, an administrator would see this message and approve the update. However, the administrator must schedule a time for it to install. At that scheduled time, the server will update its self. If everything was successful, it will raise another flag in the database for all client machines to also update. If anything happened, it will restore the backup which was made before the install.

My question is... Is this good practice? Of course automated updates is a very good thing... if done right. This software is used in real-time in retail and wholesale environments, so if anything goes wrong during this scheduled installation, people could come to work the next morning to a broken system. The point is, no matter how automated I make this, an administrator still needs to ensure everything went smooth.

Further issues...

  1. client machines must know not only the database server info, but also their update server info.
  2. server machine might be at another location which might require firewall configuration
  3. database changes may give unforeseen results, which aren't known until something bad happens
  4. client machines may be shut down and need to update once it starts
  5. a list full of possible scenarios which may go wrong

So in this situation, would you feel comfortable making a 100% automated updating system for a sensitive software? Because some of our clients have up to 50 client computers which need to be updated to match their server's database.

share|improve this question
    
Do you sign the updates? Does the updated system verify the signatures? How do you ensure that the signing keys never leak? –  CodesInChaos Jul 5 '13 at 7:56
    
We do sign the updates, no we don't verify them. –  Jerry Dodge Jul 5 '13 at 8:09
    
So many issues to consider... What exactly do you mean by "the server must be installed first"? What server? From the rest of your question I get the impression that clients are talking directly to a database and not to a middle layer that in turn talks to the actual database? Why first? Server - middleware or database (schema) should never be updated before the clients if there are breaking changes. –  Marjan Venema Jul 5 '13 at 10:57

2 Answers 2

I would say that giving the sysadmin control over when the update is applied is the best way - this means that an admin can delay updating if he's working at a critical time (say, over christmas) when demand is likely to be high and staff availability low, and also the potential for a screwup to be really damaging is much higher than usual.

So an fully automated system would not be a benefit. However, that said, there are times when a non-automatic update system means the software will simply never get updated.

I would therefore offer an option - manual or automatic, and let the installer decide whether to check that auto option or not (which he will do depending on his circumstances).

the other thing that you do is the rollback mechanism - this is great. Jenkins does it, so if an update doesn't work well, you click a button and it all goes back to the previous state. I wish all applications worked like this. Once you have such a rollback system, then admins are much more likely to apply updates so you might find they use the automatic update option more often. In this case, what would also be a good thing is to make the fact that an update was recently applied to be more visible.

share|improve this answer

The answer of Auto Update or Manual Update depends on two basic parameters. 1. How Important/Urgent is the Update? 2. How Big is the Update?

For Enterprise software, first priority is 'Security', second is 'System Availability' , new features or cool features are last things to care about.

I work for Fortune 500 INCs and my experience is that many companies use older versions of software because newer version are likely to have some bugs and older versions are likely to be bug free(bugs have been fixed science 1st release).

Hence you need to pool lots of small non security updates, trivial bug fixes, features that clients don't need together and let the system admin decide on update date-time. Incase there are update related to security, you can still raise some flag in system so that Admins will install the features ASAP.

So IMO, you must NOT have automated updates. Planned updates are always better than unplanned one.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.