I'm working on a personal project and I've found myself switching between doing some refactoring for a day or two and then some feature-adding for a few days. I like it, and I noted it was similar to how an instructor I worked with wanted to rework the class website. First, she froze the features and worked on refactoring the website, then once that was done, she focused on the features and only noted the things to refactor.

What is this process of refactor-features-repeat called?

[Context: I am a PhD student in computer science in the USA. My experience with software engineering per se was a short software engineering internship, but it was not at a company whose main product was software.]


You might be describing someone following Behavior Driven Development.

enter image description here

You might just be describing someone following Test Driven Development.

enter image description here

If you want something that specifically requires many things be refactored while all feature development is on hold I don't know of any named process that covers that. I do know I've done it as well. Do enough of it and we call it a rewrite.

More typically the refactoring cycle is done, not with "make the design awesome" in mind but a new feature in mind. The refactoring rearranges the code in a way that makes adding the new feature easy. By doing the refactoring first we spare ourselves the pain of fighting the old design. Of course sometimes refactoring is just cleaning up the code. So there is a little fuzziness about exactly where that "start" step really goes.

| improve this answer | |
  • Can you elaborate more on "make the design awesome" vs "fitting a feature"? I would feel that fitting a feature is awkwardly short-sighted. Can you explain that more? – Mark Miller Mar 5 '18 at 8:10
  • 2
    @MarkMiller Fitting a feature isn't awkwardly short-sighted. It's blissfully short-sighted. It's a refactoring with a clear goal and definite need. "Make the design awesome" is neither. – candied_orange Mar 5 '18 at 10:13
  • Can you please define your terms? What is "BDD"? I know that "TDD" is test-driven development, so I assume BDD is <Something beginning with B>-driven development? Business? Bees? – user1118321 Mar 21 '18 at 2:10
  • @user1118321 better? – candied_orange Mar 21 '18 at 2:47

No process that i can think of. However there is a process of understanding the problem which is initial development and then once you have consolidated what needs to be done in you mind refactoring the code to make it simpler and more maintainable. I know this is often what i will do.

@CandiedOrange does show the accepted practice of TDD with some nice graphics :) . BDD does also feed into changing unit tests but I find this happens more often than not only when bugs are found.

| improve this answer | |

Martin Fowler in his book about "refactoring" describes it as putting on different "hats".

For me it is a part of a broader programming cycle:

Write code - > refactor -> write code -> refactor ->...

It doesn't have to be TDD. It just happens to be an integral part of it.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.