This rant makes some valid points. But if you decide to reinvent a wheel, you should be fully aware of what you're getting into, and the responsibility you're taking on.<p>For example, if you decide to create a new UI toolkit, by which I mean something that draws the widgets and handles low-level input events itself as opposed to a wrapper over one or more other such toolkits, then you need to be prepared to deal with things like accessibility for users with disabilities. This includes blind users who require a screen reader, but also people with mobility impairments who need to use alternate input devices, speech recognition, or the like. This means implementing the accessibility APIs of your host platform(s), which isn't necessarily easy. If you release an application with your own home-grown toolkit (or someone else's) that doesn't implement accessibility, then your app will be unusable to some percentage of people who need or want to use it. That's probably not too bad if you're developing a game, but is more of a problem if someone needs to use your app to do their job, take a class, do business with a particular company, or any of the other increasing number of important functions that involve software.<p>Or, to throw out a few other examples beyond my usual soapbox: If you're writing a new crypto library (the post did reference OpenSSL), make sure you handle side channel attacks and all the other gotchas that come with crypto. If you're rolling your own HTML templating thing, make sure it's not susceptible to XSS. If you're creating a new database or other form of data persistence, make sure the persistent data isn't easily corrupted. And so on.<p>Regarding the part about "most programmers", I'd venture to say that for most developers of new applications, it's best to build on proven, mature infrastructure as much as possible, and avoid gratuitous reinvention.