Friday, July 02, 2010

Best web hosting companies :: A futile search without a plan and execution

Web hosting services is a thriving business and new services keeps propping almost daily. Now with every new choice new questions need to be asked. Which web hosting service should I go for? The answer to this question does not lie in any search engine queries but rather lies in a plan. In order to determine the best web hosting companies one needs to have a plan and an execution map.

Plan Phase
Selection of web hosting service is easier if answers to the following questions can be determined.
  1. Why do we need a web hosting service?
  2. What is the goal of the website?
  3. What will be our needs in the next three years?
  4. Which departments in the company are planning to use the website in the next few years?
  5. Is our company's business uniform enough to warrant a company-wide website? 
  6. How much is the company willing to invest? What is the expected budget of this endeavor?
  7. Expected automation needs of the company in the next three years? Calenders, Emails other needs.
  8. Maximum number of users(departments) who will upload data on the website expected?
The importance of these questions varies from company to company but every company must ponder over more or less each of these questions. This helps in preparing a map for searching the best web hosting company for our purposes.

Execution Phase
After pondering over each of these questions we need to heed to the following points which will filter out and help focus.

1. Throwing money at it wont make the problems go away.
Every one is interested in offering a service at a cost. Don't get lured by low costs solutions or for that matter overly priced solutions. Look before you leap. Expensive solutions not necessarily mean stable and robust solutions.

2. Linux is the best 
Yes, Linux is the best but is it best for you depends on the environment in your enterprise. If Windows and Microsoft are the name of the game in the organization then choosing Linux for website hosting might be counter productive in that it would not fit in with the software being used currently e.g. MS Project, MS Office, MS Exchange Server, MS Email Clients like Outlook. The difference in prices between Linux and Windows web hosting services does not warrant putting all the investment already done in Microsoft software to disuse. 

3. My cousin's company gives the lowest rates
Avoid falling into buying service on referrals which are not based on purely business terms. If someone refers to a company whose only 'positive' point is that its owned by the referrer's relative than this is probably a huge drawback instead of an advantage. One might not be able to fully negotiate the terms and in the event of problems really push the company to provide support. 

4. My web hosting company performs really well
Avoid giving contract to a company just because it works well for someone else. The reason is that your company's needs might be completely orthogonal to the other party. 

5. Traffic does not matter at all
Give proper attention to the traffic caps in the hosting plans. Never fall for the trap that your traffic needs six months from now will remain the same as they are today. Websites have a strange pattern of jumping from  single digit hits to hundreds (or at times thousands) of hits per day. 

Future Decisions
Once a web hosting plan has been selected and the website has been deployed. Its imperative to perform monitoring of the website as much as possible. It helps in avoiding problems as well as planning growth of the website. A first step could be registering the website with analytics service providers. Google analytics is one example of such a service. Second step is to get the website report from Alexa. The third optional step could be to buy monitoring software like one developed by Hubspot. 

Why Operating Systems Programming is so difficult?

The character of operating system programming has remained more or less constant over the years. That is a polite way of saying that it is still as scary as ever. Why it is so? Complex system requires complex programming methods and this goes against the spirit of the dictum "Good programs are easier to understand and develop". So can we conclude that system programming being done is bad programming. Or the programmers are not following best practices and all the elaborate methods created to ease programming. Or they are still dealing with a lot of legacy code. Looking at the output "they" are the best talent. Probably its the fact that they are good that they create something so brilliant that nobody can fathom or appreciate. The reality needs to be explored.

System Programming
So what exactly is operating system programming. Is it really something different from regular programming or its just a subset of programming. System Programming in contrast to application programming is directed towards hardware/system programming while Application Programming deals with creating software which interact with the user.

Sources of Complexity
The complexity in the dealing with systems programming language amongst others is due to the following reasons.

1. Legacy
2. Diversity

Legacy
Legacy code is very hard to get away with in application programming but when it comes to Systems Programming. Legacy code is EXTREMELY hard to get away. Since the legacy code has been written with an extremely large investment of time and also due to scarcity of expertise available so it is more feasible to use legacy code instead of re-inventing the wheel.

Diversity of Hardware
This is the other problem which leads to complicated code. Hardware diversity needs to be catered by system programmers as compared to application programmers who have the luxury of using interfaces (provided by system programmers) to hardware.

How to get over it
There is no short cut to success in the system programming domain. One has to go through the rigor of learning the issue. An easier way could be using the input-output model. Input output model is a way of getting reducing the code's complexity and focusing on inputs and outputs of the given algorithm/ function. This helps in first understanding the basic goals before diving deeper into the code. 

Another familiar method is to develop state diagrams. This methodology requires a little more skill than the previous method but can be extremely helpful in figuring out complicated code.