6

I'm a programmer, and when I have a large task to complete I often write some "bad" code that just about does the job, and then flesh that out into a more robust and higher quality solution to the problem.

Is there a word for this sort of practice?

I've considered "making a proof-of-concept", but it doesn't quite fit what I'm looking for – to me, the term "proof-of-concept" suggests that there was actually a need for someone to prove that a solution exists. The situations I'm thinking about are more about solving a big problem badly and then making the solution better, rather than simply proving that the big problem could be solved.

1
  • Comments are not for extended discussion; this conversation has been moved to chat.
    – tchrist
    Dec 12 '20 at 20:13

14 Answers 14

15

Quick and Dirty

Merriam Webster

Definition of quick and dirty
: expedient and effective but not without flaws or unwanted side effects

2
  • 3
    fun fact: DOS (abbreviation for "Disk Operating System") was originally named "QDOS" - abbreviation for "Quick And Dirty Operating System" :) (source: many. Lets say en.wikipedia.org/wiki/DOS#Origins ) Dec 7 '20 at 11:02
  • Quickfix seems very close related. But might not fit in the case of building something new. Dec 7 '20 at 11:08
16

You can call it jury-rigged. Merriam-Webster defines this as

jury-rig: to erect, construct, or arrange in a makeshift fashion.

2
  • 1
    I believe "jury-rig" is often used to describe something that is only intended to be temporary and will be replaced later, which makes it especially good for OPs use case. Dec 9 '20 at 19:21
  • Yes, jury-rig literally means to make a, let's say, emergency repair that is good enough to keep you going, until you can "get back to port" and actually repair the (say) broken mast.
    – Fattie
    Dec 9 '20 at 19:33
15

How about saying prototype? ..

1
  • 1
    As a fellow programmer, this is exactly the right answer for the context. Dec 7 '20 at 17:04
14

'Bodge' would be the British English term for what you're describing:

v. : to put together in a makeshift way (M-w)

'Stopgap' is another (less dialect specific) that implies it is a temporary implementation:

n. something that serves as a temporary expedient (M-W)

7
  • 3
    My first thought too, as exemplified by Tom Scott.
    – TRiG
    Dec 7 '20 at 10:36
  • +1. A get-you-out-of-the-mire in most situtations! Although I wouldn't be surprised if nerds had their own esoteric term.
    – Tim
    Dec 7 '20 at 12:37
  • @Tim As a nerd I would still call it a bodge- or maybe a bodged implementation if you want to sound fancier :D
    – Max
    Dec 7 '20 at 14:24
  • Excellent words! I've suggested references with links, as per good answer "encouraged practices". After they show up on your side, you can edit them if you like, or roll them back if they aren't fitting. Welcome to EL&U, Cheers!
    – Conrado
    Dec 7 '20 at 15:08
  • I just noticed: the link that I suggested for the definition of "bodge" actually points to the synonymous "botch". My mistake, you can fix it or leave it. M-W is American, which is why it's "bodge" entry points to "botch" without further commentary.
    – Conrado
    Dec 7 '20 at 16:03
10

Kludge

Merriam Webster

a haphazard or makeshift solution to a problem and especially to a computer or programming problem

6

Skeleton programming.

Skeleton programming is a style of computer programming based on simple high-level program structures and so called dummy code. Program skeletons resemble pseudocode, but allow parsing, compilation and testing of the code. Dummy code is inserted in a program skeleton to simulate processing and avoid compilation error messages. It may involve empty function declarations, or functions that return a correct result only for a simple test case where the expected response of the code is known.

Skeleton programming facilitates a top-down design approach, where a partially functional system with complete high-level structures is designed and coded, and this system is then progressively expanded to fulfill the requirements of the project. Program skeletons are also sometimes used for high-level descriptions of algorithms. A program skeleton may also be utilized as a template that reflects syntax and structures commonly used in a wide class of problems.

https://en.wikipedia.org/wiki/Skeleton_(computer_programming)

This term is very old, since I knew what it meant. I haven't written a line of code in 40 years.

2
  • 5
    Hmmm...a program skeleton isn't really shoddy, merely incomplete. The part that's not "to do later" is intended to be in the final product, as is. This was well before "refactoring" was a thing. Whereas a typical shoddy/quick-and-dirty program you expect that 1/2 will need to be ripped out and redone (but you don't know which half just yet). If your boss gives you a skeleton, you're expected to only grow it, not improve what's there. Dec 7 '20 at 4:18
  • @OwenReynolds I've re-read the article more carefully, and it seems to support what you say, so I've accepted "quick and dirty" instead.
    – squ1dd13
    Dec 7 '20 at 16:52
6

I believe "mock-up/mockup" can also be of use here. It is used to describe how something will look/work when it's eventually finished. Example:

"The mock-up of the toy plane was quite impressive."

In programming terms it's mostly used for showcasing the GUI aspect of a program, however its use can be a lot more broad.

4

First draft.

The goal is to simply get a starting point, rather than trying to get something perfect down (this is a common trap; if you get into the mindset that your first version shouldn't have any mistakes, then you're basically trying to write the entire program in your head).

4

Minimum Viable Product/MVP

In agile programming, the minimal viable product is the absolute minimal thing you can make, and still consider it a working product. The idea is to complete this minimally working thing, then to iteratively improve upon this starting point over time.

You may or may not release it as soon as MVP is complete, but the point is that you are, at any point after that, able to release. Once MVP has been reached, Release and Development are decoupled, and the release schedule becomes a purely marketing decision, not blocked by development.

The conceptual difference between this and a "Proof of Concept" or "Mockup" is that a PoC is typically incomplete and not for delivery to users, a design tool to tell if the basic design works, or a marketing tool for product demos. An MVP could be delivered if necessary: it can perform the task needed at the desired scale, though may not be pleasant to use, and non-critical functionality may be missing.

A similar term used in a more waterfall development model, meaning "does basically what's needed, but needs further testing and refinement before it can be publicly released even for testing" is "pre-alpha".

1
  • MVP says minimum scope rather than shoddy, as OP says. To paraphrase 37signals, you want half a product, not a half-assed product. Dec 9 '20 at 22:20
2

Rapid prototype

The concept of a prototype is well understood from mechanical design. It solves the problem, and works well enough to demonstrate the concept. Often it will also help you learn lessons about what is genuinely needed. However as a prototype it is not production-ready.

At best, the prototype may need further work to improve it; or it may be necessary to completely redesign it in the light of lessons learnt. A physical prototype may need strengthening or redesigning for cheaper production, did example. Similarly, prototype software may need rework or redesign for maintainability, speed, robustness, or security, for example; or it may need rework/redesign because how the prototype works in the system as a whole has revealed new requirements.

Most software design philosophies expect that the prototype could be discarded if necessary; some even expect it.

1

Haphazardly throw together

He had no idea what he was doing, he just haphazardly threw together something that worked for now.

haphazardly (comparative more haphazardly, superlative most haphazardly)

In a haphazard manner; in a random, chaotic, and incomplete manner. -- Wiktionary

1
  • 1
    Haphazardly implies they don't quite know what they're doing (or are drunk, or don't care). Right? I think this is asking for what a serious person would do under time pressure, Given 10 minutes, I don't think Scotty would ever haphazardly get some of the Enterprise's impulse power back on line. Dec 7 '20 at 4:24
1

You could also call this duck-taping a solution. A term often used when you have to get a ugly but workable solution.

5
  • you mean duct-taping?
    – MaxD
    Dec 7 '20 at 12:37
  • Yes that is what I meant
    – Neil Meyer
    Dec 7 '20 at 12:42
  • 1
    @MaxD: Duck Tape is could also be used, since 1950 anyhow. I assume that their name was a play on "duct" tape, however.
    – Conrado
    Dec 7 '20 at 15:14
  • 1
    Isn't that more applicable in cases where an issue needs to be fixed?
    – MetalSloth
    Dec 7 '20 at 21:59
  • Often in conjunction with chewing gum: "Chewing gum and duct tape" Dec 9 '20 at 22:22
1

Makeshift might be a good word for this. It can be both an adjective and a noun. It also has a sense of it being more temporary.

Merriam-Webster:

a usually crude and temporary expedient : substitute

Another good synonym is stopgap

0

slipshod adjective slip·​shod | \ ˈslip-ˈshäd
Definition of slipshod 2: CARELESS, SLOVENLY

Examples of slipshod in a Sentence "He did a slipshod job." "Her scholarship is slipshod at best."

https://www.merriam-webster.com/dictionary/slipshod

I like this as it has the same root as the description in your question ("shoddy version").

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