Recently, there's been a distinction between a "developer" and a "programmer". Forgive me, I'm not citing the source as I don't feel digging around in Google for a while would help make this point any better, but I read an article stating that "Developers take pre-fabricated items and glue them together, as fast as they can, doing as little programming as necessary, where programmers convert caffeine into code; they live for the sheer idea of programming".
While this holds a good deal of truth, I have my own take on it....
Given I've been doing a great deal of concentrated programming per day every week for the last few years, I feel that I am justified in presenting my own development process and ideals that I find have proven themselves time and time again.
For starters, I agree wholeheartedly on use/modify what's already out there. It makes no sense to reinvent the wheel and introduce errors/create a triangle out of a circle. From a professional standpoint, using pre-existing software and modifying its concept or actual code is many orders of magnitude faster than creating it from scratch. Even horribly mangled spaghetti code is a better starting point than nothing.
Now, my tried and true methods has consisted of this:
Creating applications as fast as possible from existing components. If it doesn't exist, I write something quickly, piggybacking off of other's prior art. This solves the solution of delivering to your client quickly, and being able to get more work in, faster. It takes care of having to write more tests, and introduces less errors. It also follows my mantra of JFDI to a T.
Once this is done, go back and refactor, and make better. This allows you to document things, improve tests, add additional features, and improve the community as a whole. Distribution is key here, more eyes, more fixes.
Get involved, and stay involved, in your framework community that you use. Whether you're a core developer or not, read the TODO lists, patch, fix, contribute. Lather, rinse, repeat. I say spend most of your time here, as things will trickle downhill and you will find yourself having to write less and less boilerplate code and your applications will get to a deliverable state faster and faster, with more reliability and consistency. How many damn ways are you going to search for items? How many ways can you create a blog? What's the end result look like? They're pretty much all the same. Time well spent is optimizing these features from the inside out.
Long story short: HEAD IT OFF AT THE PASS. Fix it at the ROOT of the problem, so that people in the future don't have to use shitty hacks over and over that are probably going to break anyway.
I hope this provides clarity for some and is useful for something other than my own mental sanity in the form of a brain dump :-)