The Big Decision - What Infrastructure To Use?
Before launching into this, I want to state something I have seen many times in 11 years, development/labor costs will always be your greatest costs. Around two months ago I was asked to look at the proposed infrastructure for an exciting new application, which needs to straddle both web based assets and local assets. The application will have game-like features but quite a lot more than that and is focused purely on helping children, as they grow. What I was shown was a prototype built in Adobe AIR and a rough draft of a proposed back-end, which did not include ColdFusion. Whenever I am asked to be involved from the outset of an application infrastructure build, any bias, which I hopefully do not have, goes out of the Window and my focus is totally based on what the end-user needs are and what can logically be spent getting to that. By the way, I am typically marginally suspicious about those who ask, "how much is your budget?". That comes out in more succinctly asked ways.
So when I was approached by the visionary and CEO he was a little perplexed by the advice he was being given. Having spent some dollars getting an excellent prototype built in Adobe AIR he was being told that Flash was dead or dying and that HTML5 was the way to go, this was partly driven by the wiles of Steve Jobs and his religious campaign against Flash and concerns about supporting the iPad. He was being told that HTML5 is the future and I replied, yes that is exactly correct, that is the future, not the present. The reality of course is that the application needs to be built now, not at sometime in the future.
The next item we looked at was the middle ware and back-end for the application. At this time, node.js and MongoDB were the only pieces in place, their original plan was to use a LAMP stack but the lead developer, also keen on HTML5, wanted to experiment with node.js and MongoDB first. I had an early conversation and I recall he told me that Flash was simply a movie that played, for such an intelligent person overall, I found that a strange comment.
This is an important bit of background, at this point I was being asked for my advice and input. So my first statement was that they should stay with AIR, Flash and Flex for the RIA-game capabilities, because unlike HTML5; AIR, Flash and Flex already has all the needed capabilities as evidenced by the AIR prototype. So point one, is to not go off chasing something cool when you already have something that is working, adequately, in my opinion. HTML5 will come into play as one way of dealing with Steve Job's myopia.
Next I looked at the mid-tier to back-end. There is no doubt that node.js has great promise yet is still very early days in its evolution to base major parts of what could become a very large application, in my opinion. That brings me to another point, always assume that your application could become very large and plan for that at all stages. MongoDB also has lot's of promise but its lack of referential integrity constraints and unclear specifics in relation to security/PCI compliance made it an unsure choice to base the majority of the data-tier on. This application will have to interface with financial institutions fairly early in its operability, so integrity and security are very important. Another key need is a robust Business Intelligence/Reporting need which with the business model could get very considerable, fairly quickly. MongoDB lacks in that regard and even MySQL comes with little "out-of-the-box" BI capability. It is often easy to use the licensing cost of software as a justification not to buy, as I mentioned at the beginning of this piece "development/labor costs will always be your greatest costs". When looked at all of the needs, Microsoft SQL Server seemed to have the most promise, so we decided to go with that, however retaining MongoDB for near-client data manipulation; node.js will still be there also as a major part of the application API.
Lastly, we wanted an application tier which could work well with AIR, Flex and Flash. As this application evolves it will become ever more game orientated in functionality so we did some research for application-tier capabilities for what are known as MMO like applications. After speaking with the people whom had created the AIR client prototype we decided on Smartfox Server a Java based server, with robust support for Flash, AS2 and AS3, .NET, Unity 3D and IOS.
Of course, I would dearly have loved to recommend ColdFusion and this is the main part of this somewhat rambling article, the development team have no experience with CF have a good deal with PHP and .NET. Looking at what is best for them, I did not feel it correct to recommend CF. One thing we shall make sure of though, is that nothing is closely coupled so we have maximum capability to change, if and when necessary.
I hope these insights help those trying to decide what infrastructure to use when building an application. If you keep in mind, these two principals:
- Development/labor costs will always be your greatest costs.
- Assume your application will become very large and plan accordingly.
Then you will have a good grounding from which to chose the best technologies.