We help IT Professionals succeed at work.

Reversibility in software development

Dear Experts

In software development what does reversibility means, if we have to develop application what are the measures on reversibility,  please help us to understand this and best practices.

Thanks in advance
Comment
Watch Question

CERTIFIED EXPERT
Commented:
I've seen this term used in a couple of different ways around software development.

You can have reversibility meaning that changes behind made by a piece of software need to be fully reversible.  This means things like when making a change to a database, that those changes can be reverted (ACID transactions) or when releasing new code to a production environment, that release can be fully reverted to the earlier version if a problem is found (which gets tricky when there's state being stored in a database or filesystem, e.g. installers are often really bad at this).

The other meaning of reversibility relates to the software development process.  In that context, you want to be able to track every change to a piece of software and why that change happened, based on some specification or design document.  In that sense you can reverse backwards from the code to what drove a decision and what changes preceded it.  Sort of like a giant system for accounting for every change.  It's like for your bank balance, you want to be able to say why it has the value it currently has based on a transaction history.  This answers the same question for a piece of software, why is it in the state it currently is in.

Hope that helps,

Doug

Author

Commented:
Thanks for the details, really helpful, can we a tool like github or bitbucket and push the changes to production post UAT and still any issues found in the production after the new release we can revert if we use github or bitbucket please suggest.
CERTIFIED EXPERT
Commented:
Here is some nice article about it, it is better explained that what I could have done:
Pichito
2012-05-20: Reversible Engineering Part 3: Management #SoftEng
2012-05-11: Reversible Engineering Part 2: DevOps #SoftEng
2012-05-09: Reversible Engineering Part 1: Software Development #SoftEng

Reversible-Engineering-Going-Back-in-Time
CERTIFIED EXPERT

Commented:
Yes if you're looking to be able to reverse back to an earlier version in your release pipeline - doing those releases through a source control system (like github) is an excellent first step.

However, that's usually not sufficient to get reversibility, if you have some form of state - a database or use of the file system to store data.

For those, you will also need some formal process to ensure you know how to either revert them (which may be impossible for a database, as reverting would generally mean deleting data that you had collected) or ensuring that your software is backwards compatible with database changes.  For that, you just need to test it explicitly.  i.e. Run a test where you update the database schema, run the new software against it and then revert the software back one revision and see that it still works with the updated database schema.

If you include tests like those together with a source control based release pipeline, you should be fine.

Doug

Author

Commented:
We have been asked by customer detailed possible use cases of reversible can you please list few,
CERTIFIED EXPERT

Commented:
so you are offering your customer reversibility without Knowing what it was, how to implement,  or where to use?

Author

Commented:
I know to some extent but would be helpful if i get more inputs,
CERTIFIED EXPERT
Commented:
This kind of reversibility means that if you release a bad version of your software, you can move back to the previous version safely and with confidence.  That's a very valuable thing in many fields.  E.g. If you're building payroll software and your latest release is malfunctioning, you know you can go back a version.  This ensuring that payroll can always go through.  If you didn't have reversibility here, then a bad release might mean you couldn't run the company payroll and people would stop being paid while you fixed the software, a total disaster.

Doug