
“In the hands of an idiot, all tools are alike.” - J. Wren Hunt
If you envision a juggler with ‘n’ objects in the air and then having to examine each object and say to yourself “How the hell can I examine this while its swirling all around me?”, you can empathize with my current dilemma. I have the idea for an exciting new product, huge by any stretch of the imagination, which is going to tax all the developer resources I have and then some. The objects in the juggling metaphor are new technologies which I need to master (or at least come to grips with) before I start laying down the first lines of code. It’s a classic “chicken or the egg” scenario.
Proponents in the Agile camp would have me start knocking out tests and then code (Test Driven, or TDD Development), while the classicists dictate having a solid design document to guide one with. I’m straddling the fence with a middle-of-the-road approach: get basic design stuff done, then attempt to work agilely.
By far the most encompassing decisions to make are to determine which platform(s) will the backends run on? Ideally I’d like for the code to be platform agnostic and run on everything but of course that will take markedly longer to develop. So right off the bat we have 2 choices:
+ Windows Server 2003 running IIS and SQL Server 2005
Cons:
- Cost. Microsoft ain’t giving these products away for free.
- WebService development is frighteningly easy.
Pros: - Easy-of-Use. Many tasks will be much easier than writing equivalent routines.
+ GNU/Linux running Apache, PHP5 and MySQL5.
Cons: - Rock banging. Some things require equivalent complex Windowsesque functionality to be redeveloped.
Pros: - Cheap. Scales well.
At issue are these absolutely brand-new technologies with which I have zero experience:
- Windows PocketPC (PPC) programming.
- SQL Server (both 2005 edition as well as Compact (CE) Editions)
- IIS
- Active Directory
- MicroSoft Message Queue (MSMQ)
(One of) the primary factors affecting which backend we ultimately choose concerns how data will be transferred and reconciled between client < --> server:
I could use SQL offline transaction sets with SQL compact running on the PPC and SQL Server 2005 on the backend and everything would “just work”. Its a sweet siren song tempting to any developer. But then I’m “locked-in” to Windows platforms only. We could eschew a tight coupling between client and server database technologies by using web services. This gives us more platform choices at the cost of writing data-conflict-resolution code.
Happily I think I’ve managed to find a way out of the labryinth I’ve laid for myself: Microsoft’s patterns & practices group to the rescue. I’ll admit to being a newbie when it comes to patterns. “Back in the day”, we didn’t use the term patterns - we just called it experience! But its an excellent idea, a way of formalizing and reusing experience just like we do with classes for code.
So now before I start writing code, I’m trying to get a handle on the various formal pattern types, names, software factories, etc., From what I can tell, Microsoft’s Enterprise Library Application Blocks will help reduce if not eliminate vast tracts of code which we would otherwise have to write. The beautiful part is that this approach will work even if our backend database changes (i.e., MySQL). I just have to learn how to navigate it first (without dropping the ball I started this metaphor with!)