In ancient times, before astronomers figured out than the Sun rather than the Earth is at the center of the solar system, astronomers tried to figure out how to model the motions of the planets under the premise of geocentrism. Because their geocentric model of the solar system was fundamentally wrong, the models they came up with for planetary motion weren’t simple and elegant like Newton’s heliocentric, elliptical models are; they were complicated and convoluted. You can see a wonderful video illustration of the difference between heliocentric and geocentric planetary motion here.
From the perspective of Earth, the motion of a planet can be roughly (or extremely roughly, depending on the planet) approximated by a circle. But there’s a problem in that some planets appear to occasionally reverse direction for a bit, then reverse direction again, a phenomenon called retrograde motion. Some clever ancient astronomers figured out that retrograde motion could be accounted for by putting smaller circular orbits on top of the bigger circular orbits, as though each planet were a moon orbiting around some other, invisible planet. These smaller orbits were called epicycles.
Epicycles actually predicted the positions of planets quite well. So in that sense I suppose they were a good answer to the problem. But of course, they were a fudge. They existed solely to compensate for the fundamental unsoundness of the geocentric model. Once the heliocentric model was discovered, a dramatically simpler model of planetary motion snapped into place.
Many software projects are full of metaphorical epicycles. Instead of fixing a fundamental defect, the developers “add an epicycle” to paper over the defect’s weaknesses. Often, the epicycles end up needing epicycles of their own. What could have been modeled simply ends up being modeled in a very convoluted way. Adding to the problem is that unlike science, which is self-correcting by nature, software tends to be what you might call self-ossifying. Once a poor model gets a layer or two of epicycles piled on top of it, the weight of the epicycles is so great that the model is unable to change. Because of the grave risk that epicycles pose, they should be avoided completely.