when there's a little edge case that doesn't *quite* fit your abstraction, so you handle it with a little if/else to get things working. but then later a second little edge case pops up that has the same shape as the first and you're like "ohhh now i get it" and a better abstraction—the one you probably should have used in the first place—reveals itself to you
(in other news, i'm off to rewrite big chunks of my toy language compiler's tokenization and compile-time evaluation code)

@aparrish

More of these endorphins please.

@aparrish i hit something very similar recently with my linux framebuffer code: i wasn't handling certain configurations properly, but adding support actually reduced the amount of code in the project (and improved screen refresh performance)
@aparrish that lovely little feeling when a pattern
@aparrish the open-secret reason we all like programming