I could be really boastful and pretend that I have 25 years' worth of programming experience, starting with the 100-line Commodore VIC-20 game Operation Crocodile when I was fifteen (no copies remain). At least in those days I did the right thing: I built little ramshackle programs entirely for my own use and enjoyment, and for as long as my adolescent attention span could muster.
In May 2000, while I was living in Edinburgh, Scotland, I quit a very boring job doing technical support in order to start a web development company with a fellow Dutchman. I got my feet wet with good old Perl/CGI code interspersed with lots (no really, I mean LOTS) of hardcoded HTML in a riot of highly artistic anti-pattern programming madness. But hey, it worked!
Around the turn of the century they paid you good money to hone your skills in a work environment that consisted almost exclusively of amateurs, and I mean that in the best sense of the word. Nobody could boast years of experience in web development, simply because the whole discipline was in its infancy.
I knew I was destined for better things, and during the time I spent in between contracts me and my partner in crime were hatching the killer app. It was called yourstreet.org (don't bother looking it up). The idea wasn't bad, provided you had the non-technical manpower to pull it off.
Based on Comiston Road in Edinburgh's well-heeled Morningside area we set up a website for local news, including free as well as paid advertising for the local shops. We acted locally, and too quickly though globally. That's where we went wrong.
Geeks are typically not inter
ested in the non-technical aspects of making a web enterprise successful. Our codebase mushroomed at a frightening rate. I was not just interested in Morningside road. I thought areas, cities, municipalities, the whole of Lothian, Scotland, the UK, Europe, the galaxy. I wasn't interested in actual users. Worse, I wasn't even interested in using it myself.
Take a brief moment to think about that.
A lot of the mistakes I made was textbook stuff
1 - Re-inventing the wheel.
If you're writing a non-trivial application that needs to contain, say, a calendar to schedule events with multiple attendees, you have what is called a wheel. Wheels have been around a long time. They're available in many sizes, flavours and prices. Here's for the obligatory car analogy: even the most revolutionary hydrogen-powered car will probably have standard wheels.
2 - No unit testing (or any of those pesky best practices)
Unit tests? Why should I need them? I don't make bugs! I was astonishingly naïve in those days, but at least I wasn't the only one. I once worked in a team once where we had Human Semaphore File Locking (HSFL). “Nobody touch index.html. I'm working on it!”. At least we all worked within shouting distance.
1 – Programming with a blunt saw
I was a very inexperienced programmer. Although I was learning at a steady rate I had no peer supervision. I should have spent more time sharpening my saw by concentrating on the quality of my work instead of the quantity.
But there's one lesson that's not in any of the textbooks. It has to do with motivation.
Be prepared to eat your own dog food.

If you're investing time and energy in open source software, it must be to scratch some personal itch. Thinking up impressive architectures that don't actually do anything is a dead-end street.
If you really think you can out-PhotoShop PhotoShop, then do it, and use it to edit all your pictures. I don't think you stand a chance in hell, to be frank.
Being user-centric means being egocentric. Put yourself first. Don't fall into the trap of thinking what the software can do. Think what you want to do with the software.
To be continued...