No matter what career path you take, you will always have an opinion how someone could do their job better. If you’re a writer, you find niggling points in an article that you would have done better. If you’re a contractor, you’d use a different type of trim or paint in a room.
As a software developer, it’s even worse. I have about 15 apps on my iPhone from great third-party developers and I want to rewrite every single one of them. There is not really anything horrifically wrong with the apps most of the time, but there are the little details missing that drive me nuts or features I’d implement differently.
The greatest example I can find is the Twitter market. I have tried at least a dozen Twitter clients and not a single one of them suits me. Leaving aside my belief that every client should add Hibari style muting and filtering, not one of them does everything perfectly. Twitter for iPhone puts far too much focus on trends and top tweets. Twitterrific can’t manage lists and has weird UI lag. Weet looks great, but also can’t manage lists and is slow with updates and support responses. None of these apps are bad. In fact, they are quite good. They just aren’t how I’d do it.
One of the hardest parts of software development is learning to turn your back on this urge and say no. While you know that you have the skills to build what’s dancing around in your head, the reality is that there is not nearly enough time in the day to add a new project and accomplish the goals of your existing products as well.
It took me years to learn this and once I did I started to ship software on a regular basis. That doesn’t mean it gets any easier. Software is a cruel, imperfect world.
