Wednesday, July 15, 2009

Day 28: Dizzy My Head is Spinning!

Dot .Net Dilemmas

There are a number of questions that I have that just keep going around and around in my head so, I have decided that I will write them down, post them on my blog and hopefully over the next few weeks solve each one of them.
Some of these are business process problems and some are application design issues. I have just lumped them all in together and put then here in no particular order.
  1. I plan to provided my software using a SaaS deployment model. I simply don't have (or need) the resources or infrastructure to host the applications for potential clients. I don’t think that it is practical (or advisable based on previous experience) to use a traditional hosting setup so I am looking to the ‘cloud’ to host my applications and services. As yet, I have no idea how to code against the cloud or how much it could potentially cost. I need to decided if I should use Amazon Elastic Cloud EC2 or Microsoft’s Azure (apparently Azure is the colour of the sky on a bright clear day). There may even be other providers that I have, as yet not even considered. I think I heard that you need to write Proprietary Code to use EC2 which would tie me into using it the future. This would be a huge negative. Something that I have heard is, because it is such a new ‘technology’ that you really can not afford to get tied to one provider as they may just pull the plug on it. So, as much as you need an entrance strategy to get onto (into?) the cloud, you equally need a very good exit strategy
  2. It may be a bit down the line but I now need to consider as I move forward with my application design and development, which architecture I will use to to architect my services? Should I use a Mutitenancy or Multi-Instance architecture? If I use Multi-Instance (which I have read is the best way for security and performance) is it as simple as just setting up a virtual directory for each client? Does the cloud even use the concept of IIS and virtual directories? How difficult is it then to manage multiple application instances?
  3. For argument sake, let’s assume that I go down the multi-instance road and that when a new client signs up to use the services, I simply configure a new virtual directory in IIS for that client and copy all the latest code into the folder and away they go. Now I am left with the question of, how do I manage software updates and bug fixes? Again I ask, how do I manage multiple application instances? Is it necassary to take the applications offline and write a script to update all the folders at once? If so, what are the implications of this downtime to my clients?
  4. Equally, if each client has their own database schema, what is the best way to manage code updates or table/field structures changes across all schemas? How do I create daily backups to ensure that my client’s data is backed up and safe?
  5. Do I need to build my admin application to manage and track to best serve my clients?
  6. There will be two distinct but explicitly linked parts to the application that I will offer. I am still not sure of this means that I need to develop 2 separate applications that share the same data or create one application and base its behaviour on the status of the currently logged in user. For example, if a user logs in as the owner of the site, will they just see additional views/fields and have additional functionality? I am not sure if this would lead to an overly complicated design and compromise the security of the site?

I have to say just writing these questions out like this is a great exercise in getting your thoughts clear. Suddenly each of the issues have a bit of structure to them and don’t seem half as daunting as they did 45 minutes ago. Excellent!
I hope to constantly update this list with issues as they arise, solutions as I discover them and decisions as I make them.

No comments: