Misusing the term "Code Freeze" [closed]
Asked Answered
R

9

22

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?

Regional answered 13/10, 2009 at 1:40 Comment(3)
If you have literally "code frozen", i.e. you won't change the code again, then you may as well release to manufacture immediately. Nothing is going to change between today and when you actually do RTM, why wait? So just call it RTM instead of "code freeze". Whenever I've been in a team which uses it, "code freeze" has meant "all code changes except for fixing the few remaining test failures shall be on the branch for the next release". Basically, "frozen unless QA and/or the product manager says otherwise".Dulciana
There are worse double-speaks than this - if it is double-speak. It is not uncommon to hear people ask 'have you included bug 314159 in version 2.34.56'; they don't mean that - they mean 'have you included the fix for bug 314159 in version 2.34.56'. And 'code freeze' fundamentally means 'any changes to the code from here on are carefully controlled'.Theophrastus
"code freeze" sounds retarded whereas "feature freeze" makes more sense and sounds much cooler therefore I prefer the term "feature freeze."Province
B
12

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".

Breana answered 14/10, 2009 at 3:46 Comment(0)
S
18

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...

Stegall answered 13/10, 2009 at 1:41 Comment(1)
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?Joppa
B
12

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".

Breana answered 14/10, 2009 at 3:46 Comment(0)
O
3

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.

Overskirt answered 13/10, 2009 at 1:55 Comment(1)
Lets just call it a development freeze then.Regional
A
3

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.

Argosy answered 13/10, 2009 at 5:5 Comment(0)
A
3

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. 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. No new features are implemented, only bugs are fixed.

Code freeze comes when QA thinks the product is in releasable condition (i.e. they do not know of any severe bugs). Before a final test cycle a code freeze is announced (remember a test cycle might take a week). If the test succeeds this becomes the released product. If it fails then the new bugs are fixed. These checkins are supervised by architects and managers and the risk of every line is practically documented. Then the testcycle is started again.

Summary: After feature freeze you can only check in bugfixes. After code freeze you can only check in in exceptional cases.

Aroma answered 14/9, 2010 at 19:38 Comment(0)
S
2

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."

Sol answered 13/10, 2009 at 3:38 Comment(1)
"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" ;-)Dulciana
S
2

In your comment, you mentioned the word 'sprint'. That tells me you may be using Scrum(or any other Agile) methodology. In Scrum you hardly 'freeze' anything :) Flexibility, risk identification and mitigation, and above all, in terms of engineering, continuous integration matter a lot in Scrum.

Given this, the team should be cross-functional and the code will be continuously integrated. As a result, you may not have things like 'code freeze'. You just have a releasable product at the end of the sprint. It should have been tested continuously and you should have already got the bug reports which you should have fixed already.

Well, this is theory. However, good scrum teams aren't too far from theory, as scrum is mainly about principles. There aren't too many rules.

I personally won't split too many hairs on the terminology, but the intention behind the term. Most certainly, the term is used to identify a stage in the SDLC, in your organization. Speaking strictly as per Scrum, it doesn't have a bug fix phase. In case you're dedicating one or more sprints to fix bugs, then this term can mean, "no feature backlogs will be included in the sprint, but only bug fixes". This can be easily handled at the sprint planning (and pre-planning) meeting(s) and the team doesn't even have to worry about the terminology. Even better, this terminology/intention doesn't even have to go beyond the Product Owner.

Seller answered 14/4, 2011 at 3:35 Comment(0)
B
1

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". ;-)

Belabor answered 13/10, 2009 at 3:5 Comment(0)
H
0

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.

Hustings answered 13/10, 2009 at 3:58 Comment(1)
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 ;-)Dulciana

© 2022 - 2024 — McMap. All rights reserved.