For the last couple of years, I've been working every day, all day, on a code library/framework. It's the most advanced software project I've done all my life, and it has required numerous "iterations" and endless hours of hair-pulling while trying to debug things and verifying that things still work correctly.

Almost since the beginning, I have been using this system at the same time as I'm developing it. That is, not with a "stable version", but the actual, live code files which I'm editing. I do all kinds of automated logic with this, such as fetching my bank account information or talking to various APIs, processing all incoming e-mails, etc. Basically any reasonably solvable task that I need to do with my computer.

As soon as I update a source code file, my running "master loop" detects this and restarts itself. It only waits if it detects that one of the source code files are syntax incorrect. If I'm not very careful, this causes a cascade of errors which are sent by this system to myself internally and plays various sounds.

I've been trying to find a term to describe this "paradox", if it can be called that. Basically, I'm developing the same system which I'm using to develop this system. Sometimes, I have to really stop and think about what I'm doing, because it even confuses myself.

Is there an established English phrase/word/term to describe this?


4 Answers 4


As suggested, bootstrapping is a good term for building your tools with the tools you've built. Turning it around, using the tools you built is sometimes called dogfooding


It sounds like an extension of concurrency which relates to parallel execution. Here you are developing a system concurrently with the system's usage. This isn't precisely what you described, but seems to come close.


Welcome, Lakesha!

I've heard it called changing the tire while the car is moving and putting the wing back while the plane is flying.

  • I've also heard "rebuilding the ship while sailing her."
    – user888379
    Commented Mar 30, 2020 at 23:19

A usual term for programs that are not yet fully bug free nor at the best of what can be made of them but still useful and rather widely used is "beta". So you might call your project a beta.


Although I don't quite agree with the term "beta" being improper (remark by user Laurel ), it appears that "beta" is not the specific term. It is found side by side with "dogfood" in this reference: https://bugzilla.mozilla.org/show_bug.cgi?id=15927.

From the reference provided by user Jim Mack (dogfooding) the following, which might be slighted, seems worth pointing out.

Alternative terms

[…] alternative phrase "drinking our own champagne" […] the phrase "dogfooding" was unappealing and should be replaced by "icecreaming" […] A less controversial and common alternative term used in some contexts is "self-hosting"[…] Developers of IBM's mainframe operating systems have long used the term "eating our own cooking".

  • A beta is when you release the software to an external party for testing — which this is not.
    – Laurel
    Commented Mar 30, 2020 at 19:21
  • @Laurel It might be too strict a definition and the formalism making it necessary that there be two representants for producer and user is extreme. The person using the software is exactly in the same position as he/she (as user) had chosen to trust someone (a producer) for providing a minimum service. It happens that the producer is him/herself, that is all.
    – LPH
    Commented Mar 30, 2020 at 19:34

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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