When something works, but it is unreliable and intermittently goes wrong, what could it be called?
I'm actually thinking of computer software. In my work we tend to use the word "flakey", but there must be a better one.
You are already using the perfect word for unreliable software. According to The New Hacker's Dictionary
(var sp. 'flakey') Subject to frequent lossage. This use is of course related to the common slang use of the word to describe a person as eccentric, crazy, or just unreliable. A system that is flaky is working, sort of -- enough that you are tempted to try to use it -- but fails frequently enough that the odds in favor of finishing what you start are low. Commonwealth hackish prefers dodgy or wonky.
Sporadic is also a good word for this
I like the phrase on the blink, which means that it is not working properly. I like the "blink" part in particular, because it implies some intermittent function.
A related phrase is on the fritz, but I've never been entirely sure whether that's offensive or not.
Edit: I agree with the comments on this answer that these phrases would have the implication that the software had been working, but now does not function properly.
Sofware that is unreliable is sometimes called buggy.
Intermittent faults are the bane of an engineer's life.
We can describe physical components as 'intermittent', but I wouldn't regard software as intermittent.
Software should behave deterministically. If software's behaviour is unpredictable, there may be external factors we're unaware of.
In that case, I would definitely go with unreliable and explain it by phase of the Moon effects, if necessary.
I've always thought occulting would be a good term, but it has not yet gathered enough fans to be recognized. Strictly, it refers to lights (usually in lighthouses) that are lit for longer than they are dark (flashing is the opposite), but it has a connotation of the black magic that we all know is really responsible for the bug.
If it keeps running, but occasionally does weird things, one possible word for that would be glitchy (although it would be a more common phrasing to say it
has a glitch).
If instead the sporadic bug(s) causes the program to crash (where "crash" in this case means cease executing in an uncontrolled way), a more proper thing to say that the program itself is
A third possibility is that the bug causes program goes off into an infinite loop. In that case, neither of the above is quite right. There are a myriad of words for this. Probably the best understood would be to say the program
locks up. For more similar terms, I generally suggest consulting FOLDOC.
However, you should realize that none of these terms really have precise meanings. The problem is that everyone uses software (and thus needs to use terms like this to describe system behavior), but few people are actual software engineers familiar with the common uses of the jargon.