Wednesday, July 22, 2009

Day 35: My Shiny New Azure Account.

Dot .Net Dilemmas

During the week I signed up to join the Microsoft Windows Azure CTP (Community Technology Preview ). Just now, I received an Invitation Code from Microsoft for a Windows Azure account. I feel quite excited about it to be honest and can't wait to get started..

Apparently I have the following limits attached to the agreement:
  • Total Compute Usage: 2000 VM hours
  • Cloud Storage Capacity: 50GB
  • Total Storage Bandwidth: 20GB/day
I was also informed that Microsoft reserve the right to suspend my account activity if I exceed these limits..

I can live with that.. Now onwards and upwards to the cloud....

Monday, July 20, 2009

Day 33: I Have A Dream....

Dot .Net Dilemmas

The approach that I want to take in designing my software is to simply come at it with the end-user clearly at the forefront of my thoughts at all times. The users needs must be in my mind with every design decision that I make. My whole philosophy on software design is that it should be clean and simple, especially at the UI level. Applications that do ‘too much’ may look great and wow people at the start but it can lead to a complexity that can get old very quickly. This complexity can ultimately lead to unmaintainable software. Unmaintainable software is something that I can not have in my design as I plan to have continuous updates and releases to add value for my clients. In my experience users of any software application repeat the same tasks over and over and these basic tasks should be clean, crisp easy to use and above all solid and reliable. You can add the bells and whistles at a later date when your application is rock solid and you have delivered to your clients exactly what it is that they use and need. In a sentence, ‘Everything we do needs to make our product less annoying.’

Seth Godin said...
I hope that my software will be used on a daily basis and for this to become a reality; I have to have it become an essential and intuitive application for the user. My hope is that it is a piece of software that they could (no doubt) survive without but nonetheless software which makes their live so much simpler that, they wouldn’t want to. To paraphrase the marketing guru Seth Godin , ‘what we are selling is ‘Hope’. If people invest in using our software it will give them hope of a better business. The magical thing about selling hope is that it makes everything else work better, every day get better, every project work better.’
Read the actual article here What Marketers Actually Sell.

Putting Myself In Your Shoes... Phew!!!!
The way that I plan to achieve my simple design is:
To think hard about the people who will use my software and put myself in their shoes when I am designing the front-end. I need to stop thinking like a developer and start thinking about it like a user. I will think about each task and try to make the completion of that task a simple and enjoyable experience for the user, be it a 22 year old computer graduate or a 65 year old grandparent.

Years ago while I was taking a driving lesson my instructor told me that you should always drive like you have your mother in the front seat (unless your mother is Sarah Connor from Terminator) . Personally I think that designing a public facing user interface should be handled in much the same way. Think about what issues your mother or grandmother would have if they had to use your application and solve it from their point of view.

Worried that simply user interfaces won’t show off your talents or hook potential users? Well, tell that to Twitter who basically have one text field and an update button. Anyhow, when was the last time you heard of someone not using say, a website because it was two easy to use?

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.

Monday, July 13, 2009

Day 26: The More I Learn... The Less I Know.

Dot .Net Dilemmas
A few things that I have learnt since I started this project and of which I am sure will come as no surprise to anyone are;
  1. It really is very difficult to have a fairly stressful full-time job and start a one man project/business (hence the reason that it has taken me so long to update this blog).
  2. Don’t believe all those books and websites that tell you that getting a product to market on the web is simple…. It’s simply not. In fact, this leads me to one other thing that I have found out and that is….
  3. THE MORE I LEARN, THE LESS I KNOW!
I now have a pile of books almost as tall as I am that I either need to, or would like to read but being totally honest, I could spend the next 2 years reading books and still not feel like I am ready to start. That is why I have now got to change the habit of a lifetime and stop procrastinating. I need to actually start producing something and just get it done, get it out there and get some early feedback from the people who may actually want to use it.

In fairness, all the reading and “thinking” has not gone to waste. I do feel that I have the right idea for a product and have identified my potential market. I also think that I have managed to come up with the right pricing structure to get potential clients interested. It’s going to be free. Yes FREE! However, I will explain how I am going to do that at a later date…

Another decision that I have made is, whether this micros-ISV is a success or not, the very least, I want come away from all is having learnt a lot of lessons that I can use in future projects (or if it comes to it, in my next employment.) In my opinion, ‘learning’ is never a waste to time. But just in case I am wrong and learning is in fact a waste of time, I have decided to pick technologies that I have an interested in. So, my application will be developed using the following technologies;
That should keep me pretty busy for a while. You may notice that I haven’t mentioned which database I will use. I plan to make this decision much further down the line when I need to. I am hoping that by implementing NHibernate, not only will it relieve me of the task of writing the mundane CRUD code; I will also me to switch between databases via the application config file but as yet, this is something that I need to look into..