Over the course of my career, the way I develop software has gone through a lot of changes. Coming from Clipper, talking directly to flat-file xBase tables, then to Delphi, still talking to the database directly but this time to a "proper" database like Informix and SQL Server, and then to .NET Windows Forms, talking to SQL Server via web services.

But even the move from single tier to n-tier isn't the only change. There are fundamental differences in the way we approach a project now. In fact, there are differences every time we start a new project. Even in the past few years using .NET we've gone from using ADO.NET DataSets to using strongly typed DataSets, and from there to using an object model. We've gone from a bottom-up "model-driven" approach to a "test-driven" approach with NUnit and Moq. Before long we'll be looking at ORMs and code generation. So much change.

Every time we switch gears it's a good feeling. I feel like every change is a step in the right direction, that somehow we're more "correct" this time than last time.

However, the constant flux does mean one thing - it means I'm never 100% sure of myself. What if we're painting ourselves into a corner with this new project? What if tomorrow we find a better way? Should we be taking the time to learn ORMs now or should we just get this project done and look at it next time?

For me, software development is constantly having a conversation with two little characters sitting on my shoulder. One is the pragmatic devil, saying, "Get it working! Ship it! Forget about elegant code or new technologies!" The other is the dogmatic angel, saying, "Make it maintainable! Don't code that - use code generation! Declarative, not imperative! Handle those exceptions! Test first!" etc etc.

Does anyone else feel this way? Is software development a constant battle with your conscience? Or are you 100% confident in your methodologies? One way to stay confident is to not upgrade ever. I know people who develop applications in MS Access and have no reason to move forward - they're making functional, income-generating, single-tiered applications and they're happy. That's not how my brain works, though - I want to continue moving forward.

So who's with me? Who else feels a nagging sense of self-doubt every time they start a new project? It's a good thing, right?