views:

581

answers:

8

I'm just curious if the community considers it acceptable to use the term "Code Freeze" for situations where we stop development except for testing and fixing bugs.

Development Situation

We're just finishing up our third and final sprint, which will be followed by a "Code freeze" and 2 weeks of Q/A testing. It is a big release and some components development have transcended all 3 sprints. Historically even though we call it a "Code Freeze" we still commit code to fix bugs.

Problem

Every release I try and correct my manager and co-workers that we should be calling it a "Feature Freeze", because it's pretty obvious that we're going to find bugs and commit code to fix them as soon as we start heavy testing. But they still persist in calling it a "Code Freeze". Sometimes we still have known bugs and declare a "Code Freeze".

The Wikipedia definition seems to agree with me here

Analysis

I suspect that calling these situations a "Code Freeze" is some sort of willful Double Think to provide false confidence to stake holders. Or we are pretending to be in a "Code Freeze" situation because according to Scrum after every sprint we should have a shippable piece of software and it is the expectation we are following Scrum. So we must call it what Scrum expects instead of what it really is.

Conclusion

Am I over analyzing this? I just find it to be unhealthy to ignoring realities of situations and should either give it up calling it something it's not or fix the root problem. Has anybody else had similar experiences with Code Freezes?

+11  A: 

Am I over analyzing this?

Yes.

Well, probably. Realistically, you should be thinking twice before making any code changes after the freeze. Bugs should have to pass some severity test, more so if the fix requires potentially-dangerous changes to the codebase or invalidates the testing that's been done. If you're not doing that, then yeah, you're just deluding yourselves.

But if you're not gonna fix any bugs, then freezing the code is kinda pointless: just build and ship it.

Ultimately, what matters is that you all understand what's meant by the label, not the label itself. One big happy Humpty-Dumpty...

Shog9
It's neither code freeze nor feature freeze. It's just a "testing-only" sprint after the coding sprint. Who cares what you call it? Seriously. If it's slowing down work because people don't understand, then you might want to think about it. But if everyone gets what's going on, then they could call it "going to Siberia" or "Lapland Time" or "The Big Chill" or -- frankly -- any code-phrase they choose. It's all just culture and custom. Literally, factual descriptions don't help anyone, do they?
S.Lott
+2  A: 

I think, actually, that they are more correct in their interpretation. A feature freeze, to me, would be a halt to introducing new features, but features currently under development could continue to completion or you could schedule some refactoring work to remove technical debt without generating new features. A code freeze brings a halt to all new development, including refactoring -- the only new code allowed is that to fix bugs found during QA. The latter seems to be what your team is doing.

tvanfosson
Lets just call it a development freeze then.
Ryu
A: 

While "Code Freeze" may have a clouded meaning and is, as has been mentioned, more aptly a "Feature Freeze" when considering individual projects/releases it DOES have a place in a larger, integrated deployment where another entity is responsible for packaging and/or deploying multiple software releases from various teams. "Code Freeze" gives them time to make sure the environments are lined up and all packages accounted for. "Code Freeze" also means that nothing but "show stopping" changes are getting in. Everything else would be handled in the next maintenance release.

In a perfect world, scripted testing would have completed before this point and there would have been time allowed for deployment of any last fixes and retest. I have yet to see this happen at any "globo-corp". The (business) testers test up until and even after deployment and the "Code Freeze" becomes a signal to them to step up their efforts and log everything that they've been sitting on. In some cases, it's a signal for them to START testing.

Really, "Code Freeze" is just business speak for "Here there be Tygers". ;-)

Chuck
+1  A: 

Yeah, it's overthought. Yeah, it's a misnomer.

If the code isn't broken/messy you wouldn't touch it, and if it is then you will fix it. That's exactly the same situation as if you were not in code freeze. Yes, it's "requirement freeze" or "integration break" which are anti-patterns. It is a point at which to stop including new features in the next release, which is valuable in the sales/marketing/customersupport side of things. But they should probably call it "prerelease".

What ought to happen is that there are always a few releasable versions of the system in version control, and the company picks one to ship.

the Lean name for "code freeze" is "waste."

agileotter
"Yes, I fixed that buffer overrun, so we're good to ship. By the way, I also completely changed the UI, I hope QA doesn't mind having to repeat all the usability tests. Testing is automatic and instant, right, because we have an agile development process" ;-)
Steve Jessop
A: 

when we code freeze, the repo is locked, hopefully all the bugs are fixed that you intended to be fixed, and you the testers to a whole nother round of testing before branching and building to production. if there's any outstanding bugs scheduled for this iteration the leads will be breathing down your neck until it is closed out, or deemed noncritical and pushed back an iteration. so, yes, its really frozen.

Dustin Getz
I'm kind of disappointed that I always tagged the point of the freeze at "freeze time", then carried on with other work, checking it into the repo on other branches which can be merged later. Locking the repo sounds like an excellent excuse to get down the pub for the rest of the afternoon ;-)
Steve Jessop
+1  A: 

Some people who get into adaptive and agile engineering methodologies like scrum may not realise what you have gotten yourselves into.

The reason for being agile engineering is releasing to your customers whatever that is usable now and gradually build up its usability and features.

  1. If your project is projected to complete in 18 months but if you could have increasingly something usable every 2 months - why not release features every two months rather than wait till the grand holy day 18 months away since either way the project would still last 18 months.
  2. Your customers' requirement might change so giving your customers opportunity to change their mind frequently, before it's too late, results in exhilarated customers.
  3. Someone might release open source module of one of your modules 10 months from now and then you don't have to do much else but integrate that module.

Therefore, scrummers, or at least scrum masters and/or project managers/architects are required by the dynamics of scrum to modularise ... modularise is not good enough; but granularise the project.

You have to granularise your modules to the right size and provide a contract-interface specification for each so that changes within a module is managed within a module. If your module by itself or due to dependence of other modules is unable to satisfy a contract-interface, you have to code-freeze to enable you to broadcast a contract-interface version 1 so that other teams could continue albeit with less than expected features in the next general product release.

A code freeze is a code freeze.

If your code freezes are experiencing frequent thawing delays, your scrum master and product architect are not communicating or not doing their jobs properly. Perhaps, there's no point in trying to impress or acquiesce to your management that they are using some industry fad called agile programming. Or management needs to hire architect and scrum master who are able to design and granularise the project within the skills of the team as well as the expectations of the customers and the technological constraints of the project.

I think there are management elements and their scrum master who do not realise how crucial a good architect is even for a scrum environment and refuse to hire one. A good architect who is able to listen and work with the team is invaluable to the scrumming process because he/she has to constantly adapt the architecture to changing granularities and expectation.

I also think there are management elements and their scrum master who belongs to the other spectrum of the programming universe due to bad experiences with longer development cycles like waterfall, who therefore think that scrum is meant to produce a product within a month and therefore meticulous investigation into cross-modules effects is not really necessary. They sit down, wet their fingers in the air and come up with a great sprint.

If your team is experiencing frequent thawing of code freezes, you guys might need to code-freeze your whole project and rethink your strategy and see that the cause is due to your refusal to define module contracts that fit the granularity of modules. Or are you guys defining module contracts at all to so that features of a stuck module could be currently rarefied to enable other teams or modules to continue.

Do you guys have a UML strategy that aids in discovering the projected features of a project release and allows you to see the effects of a stranded module and then see which module needs focus to reach a desired product release level? Are you attending scrums and sprints and you have no picture of an UML to show how advanced or delayed you are so that you are just bumping yourselves along happily or otherwise blindly? Or does your scrum master would say to room of yeas or nays, hmm ... that module seems important - without actually having a clear picture of which are the most strandable modules in relation to a product release.

A product release code-freeze is achieved by progressive freezing of modules. As soon as a module is completed, a product test is done to ensure that the module satisfies its contract and that module is code-frozen to say version 2.1. Even though work progresses on that module for 2.2, the project on the whole should not depend on 2.2 but on 2.1. The strategy is to minimise the number of modules whose contracts needs to thawed when a product release is tested and if the product release should scale down its features. If progressive modular freezing does not help your development team ... either the product is so complex and your management is under-expecting the number of iterations to achieve a proper release or the modular architecture and strategy needs serious rethinking.

Blessed Geek
+3  A: 

We use the term "Feature Complete". All the features are coded and functional, but we're heading into a test pass to confirm that there are no bugs. If there are bugs, we will find them, fix them, and retest. After we're satisfied with the result, we're "Code Complete".

Chris Simmons
A: 

I have worked on a project (waterfall) in which we had feature freeze AND code freeze.

Feature freeze means the beginning of a bugfix period. When the number of bugs (also severity) has gone below the critical level, we declared a code freeze, i.e. this is the first release candidate (so rc1 is labeled in the source control) that goes to system testing. Also new branch was created for the new version so that we could implement features, i.e. this is the point when the company starts to work on the new version. If no new bugs are found in the rc1 then this is the released version. If there are new bugs then they are evaluated again, if critical, they are fixed (and the fix is reviewed by architects and lots of people), label it rc 2 and full system test again.

bjdodo