views:

143

answers:

7

When you're working on enhancements to an existing line of business application, do you think it's better to batch up changes into less frequent bigger releases, or continually ship new features in smaller releases? Assuming there are hardware upgrades or database upgrades, do you make these changes with the releases as well, or keep them separate?

Releasing everything together has the advantage that there's less disruption to the business, and less out of hours work invovled, but any problem you later encounter could be due to the database upgrade, the hardware, or any number of software changes.

Releasing little and often makes it easier to track down any problems resulting from a release, but leads to more disruption and more time spent regression testing.

Which is better?

+3  A: 

Consider how each release affects the customers. Will frequent small releases make them happier because of solving critical problems faster? Will this improve your sales and reputation? If it will carefully estimate if these benefits outweight the extra work done, otherwise just follow the path which is more convenient for you.

sharptooth
+1  A: 

Personally, I favor big releases.

I have software at home which presents updates multiple times a week. It's annoying because there is no auto-update feature, just a notification that keeps coming back.

You might want to take a look at this similar question: How Often should you release software updates

Lieven
@Lieven: it would seem the solution to your problem would be for an auto-update to be created, not to have fewer releases.
John Saunders
@John Saunder: I hear you. Let me restate by saying that I favor auto-update for security fixes, manual update's for new functionality. The frequency of manual update's (notifications) should be no less than one week.
Lieven
+1  A: 

I think its better to work it into one big release and patching up as you need to fix problems down the line.

As a developer you need to anticipate possible problems and breaks in your system to make it as robust as you can. That usually means much testing beforehand.

Also consider that the end user may not want to pay for the smaller increments in the product and they may as well wait for a big update. A good example of this is when I got Adobe Photoshop, they seem to release a new version every year so i simply waited until it seemed the time was right

Jim
+2  A: 

It really depends on the environment your in. Some scenarios:

Many customers: You want all customers to have the same release, as far as possible. It is much easier to have anual, semianual or quarterly big releases, as the testing and rollout coordination is very costly. In this case I would include db changes as well.

"Big infrastructure": if working in a large company environment with dedicated personell for operating systems and databases, again the overall cost of a release is big and therefore less frequent larger releases are better.

For short, calculate the costs of a release in man power, business interuption, coordination, testing and bring it into relation with the benefits of each new feature or bug fix.

I usually tend to have 1-2 big releases a year and bug fixes inbetween for show stoppers.

Ralph Rickenbach
+1  A: 

A smaller number of releases means you'll be finding all your bugs at once. It becomes harder to know which code change caused which bug. You then have more of an issue with cascading bugs - one code change you made months ago has caused a bug, but in the meantime, you've made another five changes that all depend on the bug you introduced months ago.

Smaller, high-quality releases are better. Smaller releases make it easier to have high quality.

John Saunders
This is true in the (unfortunately common) case that testing is done by end customers. Luckily aeroplanes are not being developed in this way ;-)
Joonas Pulakka
A: 

In fact - both.
Can you possibly split development into DEVEL and RELEASE branch? Any urgent issues should be done ASAP on REL branch and sent out to users as a hotfix. After applying hotfix to REL branch, the need to apply patch would be sent to DEV team (note: to fix some issue on REL you have to write some quick code, while in DEV branch you need to put some time into rethinking the proposed fix, since the conditions in DEV branch might have changed, so it is common you would write completely different code to fix the same issue in DEV or REL branch).
When development of brand new version will be done, you have to test new features and patches migrated from REL. If everything is ok, you will be able to deploy brand new big version, and archive the current DEV into REL, while old REL will be now sealed off.

smok1
+2  A: 

I think the best answer is: a mixture of the two.

For instance, if you added some eye candy, or made the name textbox more "ajaxy", or maybe threw in a new type of report - make this as "small" releases. Release early, and release often, as possible.

On the other hand, if you changed a user-facing process forcing the users to be "retrained", OR if you are requiring massive infrastructure changes - go for a big release, and make this as seldom as possible.

As you said, if there is little or no disruption, do as often as possible, your users will be the happier for it - AND you will actually be spending LESS time on regression testing, because you only have to test everything connected to the changes you made.

AviD