Should a Web Startup Go Straight To the Cloud?
Javaman59 writes "I am a one person company developing a web site from home. The site is hoped to attract millions of accounts and daily hits (just to give an idea of the scale of things, as its important to the question). My infrastructure is currently Visual Studio 2010 on a PC. To progress the site I need to set up version control, continuous integration, and staging. I have a Win2008 server VM, with all the Windows software (free and legal) to do this. However, I am only just competent as a Win admin, and I foresee each step of the way (setting up a domain; SQL-Server, etc) as a slow, risky process, and a big disruption to development. Should I forget my VM server (it will make a nice games machine!) and just go straight to the cloud for all my infrastructure?"
The reality is that a "just competent" person is far from qualified to make this choice. It is easy to think that "the cloud" is an easy answer to scaling problems, but if you do not design your service/software with horizontal scaling in mind, you may find that your service does not scale up on "the cloud" any more effectively than it could on your own servers. "Cloud" does not imply scalability, it implies out-sourced infrastructure which is accounted for as an OpEx, rather than a CapEx. You still must plan for scaling up.
Seriously. What is this on Slashdot for?
Disagree != mod troll.
Unless this is some kind of troll, I'm unclear why you would have picked a platform like Win2008 for a large-scale web server, when a LAMP architecture is easier to manage and more easily portable to the cloud if you do decide to go that way.
I really don't understand why a small web startup would go with Microsoft. The licensing costs when you (hopefully) start to scale up are going to kill you. There's a reason that all the big-hit startups over the past decade weren't standardizing on Windows as their web platform.
I think you are right, but he's probably taking on this challenge because no one else can dedicate the time or effort he can. At least not for free.
In his situation what should he do? Just give up before he has even started? A more proactive approach is to admit there is a lot to learn, but it is by no means insurmountable. It will just take a lot longer.
Sometimes that is the only realistic option available to people. I admire his can-do attitude. It will be one hell of a learning experience!
What you really need to do is find an entity who can help you with the tech mechanics. That entity could be a friend you promise to reward later, a business partner you legally go 50/50 with, an independent consultant you hire, a company (large or small) you hire. But you're asking really basic questions about stuff, so you obviously need some help. Moving to the cloud just moves the problem to some place you can't touch; it doesn't address it.
(If you're offended by the suggestion that you need help, you need to adjust your thinking significantly, or abandon the idea of going into business for yourself. No one person can do everything, and any successful business person will need to realize that early on.)
dragonhawk@iname.microsoft.com
I do not like Microsoft. Remove them from my email address.
I call shenanigans. The username of this "Windows developer" is "javaman". He names the major Windows dev and SQL Server brands but doesn't mention Azure. He refers to "continuous integration" but pretends that setting up SQL Server is hard. Methinks this is a plant...though I'm not sure for what.
'The cloud' does not set up your infrastructure. It does not design or enforce your version control. It does not harden against SQL injection attacks.
Your 'infrastructure', Visual Studio on a PC, is not infrastructure. That is merely a basic dev box.
Staging? Needs to be a small scale duplicate of production.
Do you have any clue? Apparently not. If you did, you'd hire someone else that actually knows how to do this. Because you clearly do not.. You have an 'idea'. An idea that you apparently cannot bring to the public.
Sorry, but that the truth.
The guy above said you're not qualified, but the young and inexperienced have come up with plenty of new and innovative stuff, so:
I think the question is: If not cloud, what?
In no case would I run the site from home. You'll probably get your home Internet yanked.
Cloud usually implies the ability to instantly increase/decrease the size of your server. I don't think you need that at the start.
You could go with a cheap VPS. In fact, I think that's what you should do. You should be able to take a stock Windows VPS and install your application, and have everything working. Either write an installation how-to, or reduce the steps to a script (PowerShell or whatever).
After you're able to do that, you could start looking into cloud provisioning, separate database server, database replication, DNS proxying, round-robin DNS, backups/rsync, https and SSL certificates.
You'll need to run email on the server, too, if only to send notification messages to your users (or to yourself). So you need to learn about how to administer and email server. Or rent and Exchange Server.
You also need to learn about CANSPAM requirements.
You'll need to have some kind of monitoring service to alert you to problems with your server. collectd is great for this on Linux.
You also need to look into which ad service you'll be using. Or alternatively, which payment service. Don't keep credit card numbers on your site, don't manage subscriptions by yourself. Let the payment processor do it.
I'm not a lawyer, but I play one on the Internet. Blog
Reality is in the big picture, there is no difference between MS OSs and anyone else. For joe blow at home playing, *nix may be more fun, but lots of huge web sites run MS and *nix - and most probably run a mix of the two. A couple of posts ago, hit the nail on the head; scalability is something you design. An os choice does not make you scalable. the fact that you throw that out there is a tell you are out of your league.
slashdot troll = you make a compelling argument I do not like the implications of.
If you're already developing with Visual Studio 2010, and using MS SQL as the backend, why not look at Microsoft's Azure platform? It integrates with both, and your web application should take less to run. Plus, I saw some items that they had promotions for people who get their apps validated (marketing funds and Office 2010), and something about free or discounted trials on Azure.
And if he has money he should buy managed hosting, cloud or otherwise. An ideal, but expensive, solution for his situation is a managed Rackspace server. For a few hundred a month he won't have to deal with system maintenance, OS upgrades, or emergencies. He would be able to focus on his applications.
Developers: We can use your help.
Reality is in the big picture, there is no difference between MS OSs and anyone else.
Except that adding another server to handle more load will cost a couple grand per seat on Windows (Hardware plus licensing) where on an OSS platform you only pay for the hardware.
Your argument that it is possible to do is beside the point, since no one is saying Windows can't scale. The point is the cost of doing so.
The poster stated he is using the Microsoft route since that is what he is familiar with. And there is nothing wrong with that, as long as you have firmly in the front of your mind that is what you are doing, and there will be huge costs involved to do that.
Since his question was about costs, specifically keeping them down, you can not expect people to not recommend tools that perform the same function just as well yet are free.
If he wasn't willing to change from what he is familiar with, he wouldn't have asked for cheaper options, and would have just accepted the fact he must pay a lot of money to stay with the familiar.
I'd recommend you drop Visual Studio and Windows and "go to the cloud" on an environment that is already scaled out. There are a few options, but I think one of the easiest to set up and get going on is Google's App Engine system. I don't know what your preferred programming language is, and if it's not Java or Python (or Go), then you're going to have to switch, but all of those are easy languages to learn and the time required to learn them will be trivial compared to the rest of what it's going to take you to build a significant site. The App Engine SDKs are pretty easy to work with and provide a lot of powerful tools, and your site will be running on Google's infrastructure so you know it'll scale as far as you need it to. The free quota will allow you approximately 5 million pageviews per month, so there's plenty of room for initial growth. When you get to where you need more than that you should also have some cash flowing in to allow you to buy more quota.
If you're concerned about being tied to Google (a valid concern), I'd also recommend that you put some thought into placing a layer between your business logic and Google's APIs. I wouldn't make a huge investment in that, because it's the sort of thing that can soak up a LOT of time, so much that you never actually get your site off the ground, but a little thought up front will make it much easier to migrate to your own platform when you have the revenue to justify hiring all the people you need to do that (because it's a BIG job).
The nice thing is that you can start small, for free (other than your time, of course), and have plenty of room to test your ideas and your approach on the small-to-medium scale before it actually costs you anything, other than your time. Then by the time you're ready to scale up, you should know what you need, and hopefully have the cash to fund it. Or, if it doesn't work out, at least you minimized your sunk cost.
(Disclaimer: I'm a Google employee. That actually has little to do with my recommendation, other than that my employment has motivated me to play with App Engine and I've been impressed with what I've seen, but I feel it should be mentioned.)
Note to ACs: I usually delete AC replies without reading them. If you want to talk to me, log in.
Hi Javaman59. I run my own web startup and in the first year found myself moving from a dedicated windows server to a cloud based linux solution for the significant performance improvements. The learning curve for linux administration wasn't too big and if you're already developing for .net/mssql I'm sure you can handle it. PM me if you want any specific recommendations or articles to start with. Good luck, it sounds like a fun project.
P.S. 2nd vote for Azure if you're sticking with a M$ platform.
The reality is that for most companies, particularly startups, you have shit loads of money going away from you... That is why so many fail in their first year.
Sorry, this is BS. I am a one-person company that has been around for several years (growing soon to a more-than-one-person company) and we are MS partners and use their SPLA (Software Provider Licensing Agreement) to get our clients access to things like SQL on the cheap. We use the Web edition of Win Server 2008 on our two servers and our annual expenses for MS products with maybe ten clients needing SQL licenses are maybe $700, which we collect back in the form of hosting fees.
We started out with MS just because SQL Server did a few things that we needed that MySQL didn't do back in '03/'04, and that's no longer the case -- so I'm not saying this to knock OSS. But MS software does not require 'shitloads of cash,' at least, not for a web shop.
Because it's not a bad question. You're getting answers from a lot of people who are either so buried in the deeply technical side of things or locked into the past that they don't really understand it. Having shepherded a couple of dreamy startups through this phase, though, I don't think you are either crazy or necessarily under-qualified to make a successful site. To be honest, it no longer takes the hardcore technical skills that it once did, if in fact it ever did. Technical competency is over-rated by technical people; there are super-successful web businesses out there that started out (and sometimes even continued) with really shoddy coding and infrastructure setup. Craigslist and PlentyOfFish come to mind as examples. I know several others without such name recognition but which nonetheless did quite well for their owners, who slipped along with very basic programming skills and almost no hardware competency whatsoever.
Having the ability to outsource your infrastructure makes it even easier to do this today. I'm going to stay away from the "C" word because it's so shot through with marketing dross and misunderstanding now. But it's entirely possible to effectively do away with almost all the Windows admin if that's not your strength by going with hosted services. You are probably a long, long way from having to worry about Windows/LAMP stack comparisons even at your stated traffic goals, and using a hosted service will abstract that to the point where you aren't going to need to worry about it anyway. I wish you the best, but the reality is also that few sites make it big anyway, so while scalability is certainly something to consider at this stage, you shouldn't allow it to hobble your choices excessively. If you actually get there, it's almost certain you are going to have both the resources and the need to rip everything up and re-do the entire site from scratch once or twice along the way anyhow. You can re-tool then if you must.
Abstracting hardware doesn't absolve you from making other design choices that will afford scalability, and you should have some understanding of what's going on under the hood so you can make those appropriately. But you don't need all that to get started. I don't know anyone, at any skill level, who actually correctly made all the right choices on their first pass. You'll be learning along the way. That's actually an advantage; tech is filled with people who found their comfort levels and can't adjust to newer models.
It sounds like you are asking as much about your dev environment as production. I would say "yes," move it all to a hosted environment. At this stage, you don't need to be worrying about the underlying nuts and bolts. Get up and running quickly and easily. Be flexible and make adjustments along the way. You probably don't even need to go with a full-on PaaS provider right now, either; get a cheap hosting plan with a company that will help you scale when you need to. Depending on your service requirements, you can go with best of breed hosting to find the most efficient solutions for your various problems... use a SaaS vendor for version control, use a CDN for content hosting, and so on. It's cheap, it's fast, and it reduces the time and cost of failure. Failure is undoubtedly something you will run into a few times along the way. That's going to happen whether you are a technical genius or just some schmoe with a good idea. Build it in to your plans; don't over-invest (whether in time or money) in things until you can see better how things are working out.
If you have a good idea, don't be too afraid if you don't know what you are doing. A lot of the best people don't. One of the most valuable lessons you can learn is what not to spend time on, and a lot of things that certain folks here on Slashdot hold dear are things that you don't necessarily need to spend a lot of time on right now. Prove your concepts first. If you turn into the next Facebook, you can worry about infrastructure then. Until then, don't let the idea that you need a Facebook-worthy infrastructure before getting started to hold you back. Re-format that VM server into a games machine and go rent time elsewhere.
No relation to Happy Monkey
The bandwidth needs alone will push you to the cloud (or to a coloc).
You say you're expecting milions of hits/day - if each user pulls down 50KB of content, and you get a million of those hits over a 10 hour period:
50KB/hit * 1 M hits/day / 10 hours / 3600 seconds/hour = 1388 KB/second
It'll take at least a 15Mbit/second upstream connection to handle that bandwidth which is hard to get on a residential connection in most areas of the USA. Plus the mean-time-to-repair on a residential connection can reach days, so if you have an outage, your site will be offline for a long time. And you probably don't have a generator (and even if you do, there's no guarantee that the equipment that serves your internet connection is also on generator), backup cooling (if needed in your climate), or someone to reboot your server or swap a failed drive when you're on vacation.
You can certainly get that much bandwidth delivered to your house, but you'll likely end up paying more than the cloud hosting costs and still won't have the uptime and reliability you'd get from the cloud provider.
You need to look at the bigger picture.
Let's face it, unless you've seriously screwed up the application design a modern server is plenty powerful enough to cope with a good number of users on a website. Provided you can monetize those users somehow, the extra cost of another Windows license is going to be a drop in the ocean next to the other costs a startup faces.
If your server can't keep up when you've got hardly any visitors and you can't figure out some way of getting money out of the few visitors you do get, you have far greater problems than "can I afford another Windows license?"
Anyone who says "I foresee each step of the way (setting up a domain; SQL-Server, etc) as a slow, risky process" really isn't going to be comfortable even with a managed server - they need to find a partner with at least a bit of experience.
That said, this whole thing sounds like pie-in-the-sky. No, your groupon clone or whatever is not going to get millions of hits a day. Ever.
Let's call it what it is, Anti-Social Media.
Zuckerberg also had no idea what he was doing technically, but was spot on with his idea about Facebook. You can always file a patent or trademark, talk to VC and hire a server engineer..
So, you have a CAL for everyone that is going to connect to IIS? or a special Web license for IIS (I forget what that is called).. Do you have processor licenses for SQL Server? or one CAL for each user that might use the site? (and remember, its one Processor License for processor in the physical machine, not how many you expose to the VM, at about $6K per processor). Do you have the Machine CALs for each machine that is going to connect to Active Directory? Do you have a proper MSDN Development license?
See why most stuff on the internet and cloud run Linux yet?
Your data on the licensing is incorrect. Here is where you can read about it. http://www.microsoft.com/windowsserver2008/en/us/licensing-R2.aspx For example, windows web server is $469 USD list and requires NO cal's. http://www.microsoft.com/windowsserver2008/en/us/pricing.aspx
If you can't be bothered to read, you could even call their sales line and just ask. Voice: 1-800-Microsoft (642-7676)
I'm no Microsoft fanboy, but if you're going to argue about stuff like this you should get your facts straight first.
For my websites, I have a PC in my garage, running on my DSL box. It works perfectly. I have some downtimes, sure. Just this morning, my kid found my router's plug and thought it was fine to unplug it because his DSi was out of battery... It lasted 5 minutes.
When I'll have bandwidth issues (which will come before HW issues - 1.5Mbps up) we'll see. For now, I have about 1000 hits/day and my DSL box is doing fine. It is most likely that my outage of 5 minutes went completely unnoticed.
That said, to do this, you'll have to be comfortable running a PC, administering a database, managing backups, etc. But you get the liberty of your own house.
Write boring code, not shiny code!
I'm sorry, but if you need to ask Slashdot on something like this than your not qualified to do what you want to do.
I get the impression you have never worked for a small startup. In small startup businesses often the best thing they have going for them is a single good idea. These good ideas do not often come from the best technical brains, who can implement something in the ideal way.
Nothing personal but your only going to have hours to days before your website is hosting malware or gets turned into a spam relay.
Not necessarily. If he goes with the cloud solution I would in fact be very surprised if this happened since Amazon or whoever would be responsible for protecting him from everything other than coding errors and those are very hard to find via automated means. That means it takes an actual human being to hear about his site and take an interest in hacking it, if you are not taking credit card or other personal details from people or doing anything to irk the hacker community this may never happen.
None of this is to say that doing things badly is a good idea, but sometimes it is necessary in order to bring something to market quickly and test its commercial viability. Once an idea has proven itself you can invest the extra cash in doing it right. This is where the cloud really comes into its own since it scales up very easily to cope with a horrible mess of bloated, thrown together code.
In version 2 of the product you then build it the way it should have been built originally but with the benefit of more planning time and learning from your previous mistakes. There is no point in trying to make version 1 perfect since you do not know everything you need to in order to accomplish that aim from a business perspective and never will without some experience. You just make sure you factor the short lifespan of the initial version into your costs.
An excellent blog covering these sorts of issues is here: http://www.softwarebyrob.com/
Disclaimer: I have nothing to do with Rob :)
I dont read
Im not M$ fan boy but this is not the case, at least not as a start up, some friends of mine are a startup and are using the services offered by http://www.microsoft.com/bizspark/ basically whilst you are strung for cash (m$ says first 3 years) they give you everything you need for free. And then once you start making money and are locked in to using m$ services you start paying, which is fair.
(My background: I've been doing IT for the last 18 years or so; for the last two years, I've been working at Netflix, one of the highest-visibility cloud consumers out there. Until two weeks ago, I was on the IT side, focusing on the datacenter; about two weeks ago I moved over to Cloud Operations, focusing on the cloud (duh) and monitoring, specifically. The following is my opinion only, and does not necessarily represent the opinions of my employer).
In my opinion, the cloud is the easiest way to launch a new service with reasonable redundancy and growth potential. It's how I would start off any new business. Have there been failures? Sure. But largely, cloud failures have only impacted cloud consumers who engineered their environments in a non-fault-tolerant way, in the mistaken belief that "the cloud never fails." The cloud fails. It fails all the time. But following good design principles (ideally, be in multiple regions; at minimum, be in multiple availability zones; test what happens when an AZ dies an ugly death) will give you better uptime, with better cost, than you would achieve for a reasonable amount of money running your own datacenter systems.
And then, once you've got a significant enough size with a big enough ongoing consumption of cloud resources, you can look at creating your own DC environment.
Thanks for all the comments.
I put on a very thick skin before posting, so the "you can't be serious" and "you are obviously not qualified" comments have not bothered me.
Having been on Slashdot for some 10 years, I expected that (if my question was posted) that I would get some useful ideas from left field, and also some useful direct comments, and that is what has happened, and I am especially grateful to all who took my question seriously and shared of their highly valuable expertise.
One bit of info was unfortunately omitted from my question, because of finger trouble while I was editing it. Obviously I am using Microsoft products, but it's not just because it's all I know (it isn't) but because I have used .Net for 8 years, and find myself always enjoying the latest stuff (now Linq, ASP.NET MVC, and F#) and, as a developer, this enjoyment is central to my productivity. I would never tell a RoR developer to stop enjoying his stuff, and I give myself the same license.
A brief comment on the useful Win vs Linux comments. There has been some advice that, were I to switch to Linux, that I would find a Linux network easier to manage, as well as obviously saving money. I am also "barely competent" as a Linux admin, but I can see the wisdom in that, and I have found Linux administration much more enjoyable than Windows. If I had time to spare, then I would probably go with Mono, for the "best of both worlds", but that's not realistic.
A lot of the advice relates to the cost of scaling if the application takes off, with warnings about the costs then of Windows. That is a factor I had not considered. I am, because of my free Windows infrastructure, immune to the costs for development, but I will have to look at the costs for scaling. I had thought that, if I'm getting many hits, then I would also being generating sufficient revenue to pay for servers, or that I would have sufficiently proven my concept to get investor funding, and possibly switch to Mono then. IOW, that would be a problem I would like to have. The comments here have suggested that I reconsider this optimism
I haven't yet processed all the most helpful comments, and I will certainly be taking my time to do so, but there does seem to be some repeated advice that Azure is the way to go. This will, hopefully, provide a uniform environment for development, staging and scalable hosting.
Some advice to young people out there. Don't be afraid to ask stupid questions. The chances are that your question and the answer will save you a lot of time.
Thanks again, Slashdot
And, a quick comment on my username. I adopted "Javaman59" when I moved to modern OO development in 2001. I have kept it, with some fondness for those roots in Java, Linux, and the GOF patterns.
Javaman59
I'm a software visionary. I don't code.
Web Server 2008 R2 is severely limited. You have to run your database under the same OS instance as the web server, for example, and you are not allowed to access that database from any other machine. This means that you can't, for example, poll data from your database for processing -- that's against the license terms, and you need to change to a CAL license.
Oh, and of course, the database is not included. If you want to use MSSQL, Microsoft does have a web edition, but it lacks a couple of much used features, and costs $3500 per processor + $876 per year in software assurance. And you can't even buy it unless you're a volume license customer.. And it too has the strange requirement that you can't hook any other applications up to the database, even if it is to make use of the data you get from web users. A CRM system? Specifically forbidden.
If you can't live with that restriction, or don't have volume licensing, MSSQL standard might be the cheapest alternative.at $7171 per CPU, plus $1793 yearly software assurance.
The price of the OS then becomes rather irrelevant.
In pure license costs, LAMP is cheaper. Even if you go with the most expensive solution, Red Hat Enterpris Linux.
However, it can be much harder to get someone competent to admin LAMP systems (and much easier to get someone incompetent).
tl;dr: If you wnat to play, be prepared to pay. Either in license costs and downtime, or salaries.
TANSTAAFDBA+SADM