Have you ever started a computer programming project with high hopes only to become lost and disillusioned? Usually this happens after you've written a few thousand lines of code and have put a fair amount of effort into the project. Somewhere you realize that things aren't working how they should and the code becomes all tangled in your mind. Currently I'm "stuck in the middle" while working on MTG Forge 2.0.
This is my third attempt at MTG Forge 2.0 and I have a fair amount of things working, like the user interface, but the devil is always in the details. All of the millions of details have to be worked out and somewhere in the middle things tend to get worse before they get better. (You have to observe which parts need to be fixed, which is why things seem to get temporarily worse.)
The key to programming (and life) is to only worry about the major details and handle the small details one at a time as needed. When I program I don't plan much. I like the idea of UML and other diagrams, but to me the code is what is really important. Each object solves one big problem while each method solves a smaller sub-problem.
Sometimes the problem with "2.0 software" is that it tries to add too many features. Initially this was my problem but even when you cut features, the overall problem is still hard. Magic is a tough, but interesting, nut to crack and this explains why many Magic projects are started but never finished. MTG Forge is usable because so many features were cut, like phase stops. I knew I couldn't do everything right the first time, so I didn't try. Hopefully MTG Forge 2.0 will solve many of the deficiencies of 1.0 but it certainly won't be perfect. (Perfect software doesn't exist.)
I've only had a sinking feeling after I've written a 5,000 or so lines of code. I feel sorry for programmers who spend any portion of their life on code that is never used or thrown away. (I would love to get my hands on the Magic Online 2.0 code which isn't being used any more. It would be interesting just to see the documentation.)