When I start a new project, I often times immediately start thinking about the details of implementation. "Where am I gonna put the DataBaseHandler? How should I use it? Should classes that want to use it extend from some Abstract superclass..? What level of abstraction am I going to use in my class that contains methods for sending requests and parsing data?"<p>I end up stalling for a long time because I want to code for extensibility and reusability. But I feel it almost impossible to get past thinking about how to implement perfectly.<p>And then, if I try to just say "screw it, just get it done!", I hit a brick wall pretty quickly because my code isn't organized, I mixed levels of abstractions, etc.<p>What are some techniques/methods you have for launching into a new project while also setting up a logical/modular structure that will scale well?
I think you are analyzing too early. If this project is tackling a problem you haven't solved before, think of your first implementation as a prototype. You likely don't understand the problem until you have spent time solving it.<p>After you have something that works, you will have a good feeling for what you should've written the first time.<p>Personally, I don't abstract until I need it. Writing code because you "probably will need it later" can cause unnecessary work and be a distraction.
Use a language like lisp, or something sufficiently flexible, so you don't have to make such decisions too early. With lisp, changing your design later(after you've learned more about your problem) is really easy. Something like java or C++, not so much.<p>Read this:
<a href="http://www.paulgraham.com/progbot.html" rel="nofollow">http://www.paulgraham.com/progbot.html</a>