Misusing the term "Code Freeze"

21,860

Solution 1

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

Solution 2

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

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

Solution 4

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.

Solution 5

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.

Share:
21,860
Ryu
Author by

Ryu

Software Developer Release Engineer Security Specialist Hacker

Updated on July 09, 2022

Comments

  • Ryu
    Ryu almost 2 years

    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?

  • Ryu
    Ryu over 14 years
    Lets just call it a development freeze then.
  • Steve Jessop
    Steve Jessop over 14 years
    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 ;-)
  • user1066101
    user1066101 over 14 years
    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?
  • Steve Jessop
    Steve Jessop over 14 years
    "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" ;-)