I am currently getting involved in a startup, I am the only developer involved at the moment, and the other guys are leaving all the tech decisions up to me at the moment.
For my day job I work at a software house that uses Microsoft tech on a day to day basis, we utilise .NET, SqlServer, Windows Server etc. However, I realise that as a startup we need to keep costs down, and after having a brief look at the cost of hosting for Windows I was shocked to see some of the prices for a dedicated server. The cheapest I found was £100 a month. Also if the business needs to scale in the future and we end up needing multiple servers, we could end up shelling out £10’s of £000’s a year in SQL Server / Windows Server licenses etc.
I then had a quick look at the price of Linux hosting for a dedicated server and saw the price was waaaaaay lower than windows hosting. One place was offering a machine with 2 cores for less than £20 a month.
This got me thinking maybe the way to go is open source on Linux.
As I write a lot of Javascript at work (I’m working on a single page backbone app at the moment), I thought maybe NodeJS and a web framework like Express would be cool to use. I then thought that instead of using SQL why not use an open source NoSQL database like MongoDB, which has great support on NodeJS?
My only concern is that some of the work the application is going to do is going to be dynamically building images and various other image related stuff, i.e. stuff that is quite CPU heavy – so I’m thinking of maybe writing anything CPU heavy in C++ and consuming it as a module in Node.
That’s the background – but basically is Linux a good match for:
- Hosting a NodeJS/Express site?
- Compiling C++ node modules?
- Using a NoSQL DB like MongoDB?
And is it a good idea to move to these unfamiliar technologies to save money?
3 MONTH UPDATE
I’ve been working on this for the past few months now so thought I would give an update in case anyone is interested.
In the end I decided against using a NodeJS & Linux stack for the simple reason of time. I am doing this startup on the side, so I am working 9 hour days, then going home and working until late on the startup. While working in this way I obviously need to be as efficient with my time as possible, or I will never end up shipping the product.
After taking some of the advice on this thread I did apply for Microsoft BizSpark, and was accepted. This means I now have access to Visual Studio license, Windows Server license etc, all for free. Which is awesome. Hopefully by the time we are required to begin paying for everything we will be turning over enough that will make it a non-issue.
Do not think I am only using Microsoft tech, however, as I have tried to use open source stuff where possible. The main place I have done this is my data layer, where I have decided to use PostgreSQL and MongoDB. I am also using BackboneJS on my front end.
Below is a summary of the tech/frameworks I am currently using:
- Standard DB stuff: PostreSQL
- Logging & Data Store: MongoDB
- ORM: Entity Framework 5
- Core libraries: .NET (C#)
- Web Framework: ASP.NET MVC3
- UI: Razor view engine / BackboneJS
14
£100/month? How much do you cost? How much is going to cost your training?
If it’s £100/month but you can get a .NET app up in a month, while you will need at least 3 to 6 months to get your node.js/C++ app running, go for the .NET. Seriously. Your time is way more expensive than these little £100/month.
Ideally, yes, you’re right in your analysis. What you forgot is how long it’s going to take you to build all this (i.e. months) especially in a technology you don’t know.
Now don’t get me wrong, I’m a huge fan of Node.js and the likes (just see my github profile…). I’ve spent more than enough time to know when to use it. Using it when you don’t know about it in a startup environment (where you need to ship) is not really the best solution.
Also, I’m really not sure if this could work, but don’t forget about Mono.
PS: knowing how to use jQuery is a very little help for node.js. Knowing javascript is a big help. Don’t confuse both.
10
Frequently it is worth moving to an open source stack, but it’s more likely to be driven by a combination of factors:
- Cost – yes, you will save some money on licensing and hosting. But it probably isn’t enough to sway the decision in most cases. If you can’t afford or raise a few thousand dollars, then are you really sure you should be doing a startup whatever space you are targetting? Your time is worth more than a small amount of cash.
- Avoiding platform lock-in : important if you want to have the flexibility to scale up without reliance on a single vendor-controlled platform. You don’t want your company’s technological destiny tied to the whim of one supplier (particularly one like Microsoft, which isn’t the best known for long term consistency in it’s technologies).
- Specific technologies – the open source world has some impressive solutions that you may prefer (all else being equal) over the Microsoft equivalents. Look at some of the Java-based big data solutions like Hadoop or Cassandra for example….
- Productivity – some of the open source solutions are impressively productive once you get up to speed with them – Ruby on Rails, Clojure etc.
- Community – the open source communities are very helpful and can usually help you solve a lot of issues for free whether through forums, online documentation, IRC rooms etc.
You have to balance this, of course, against the time it will take to learn new open source platforms and technologies if you currently have mainly Microsoft skills.
It’s a close call overall:
- If you already have a mix of skills then I’d generally recommend going the open source route. My experience is that it works out better in the long run.
- If you have only Microsoft skills then I think you will probably want to stick with Microsoft purely for the reason that you will be quicker getting up and running. Startups need to move fast, and learning a completely new technology stack isn’t an extra problem you want to have on your plate.
1
The cost of Microsoft products might not be as bad as you think. Microsoft have various schemes available that greatly reduce the cost of their software. Most of them are aimed at software development companies, but there may be a package that meets your needs.
Examples:
BizSpark – Free MS Software For Startups
TechNet – Cheap MS Software – around $199 – $599 a year.
It may be worth looking into, you just might qualify for some of the offers.
4
Its not just the cost of that £100/month server, you’ll need a properly licensed copy of Windows, Visual Studio, etc etc to work with. These add up considerably if you do it without resorting to software piracy. And once you start to scale and require a lot more servers, and replicating SQLServer, redundancy and all the rest.. well, just remember MS doesn’t earn billions of dollars from their Server and Tools division because they give it away. While the cost of your time while you get up to speed will be greater than using what you already know, in the long term, the benefits of the OSS cost will far outweigh your initial investment in time.
In the main, while you may be wary of trying this out using unfamiliar tech, you have to realise that you’ll be working with new tech all the time anyway. Using node.js isn’t particularly difficult, especially if you already know javascript, so your additional cost of getting a little more familiar with it will be measured in days rather than months. There are plenty of tutorials and examples that will get you up and running with prototype code in no time, and chances are you’ll be hitting a rewrite wall once your startup becomes successful no matter what language you write all your code in.
So anyway, Linux is perfectly suited to C/C++ coding, you’ll find its one of the most popular systems for Linux, if not the most popular. MongoDB is a fine choice too, apparently the support from 10gen is pretty good. Node.js is good too, though you might end up either writing the majority of your server in node, or using it as a simple pass-through wrapper to your C++ code, depending on how comfortable you get with either of those languages.
And it scales well. I would suggest you keep an eye on Postgresql as it now has a JSON column type which will give you much of the benefits of the NoSQL DBs, but allow you relational DB features too. Postgresql is rock solid, I used it as part of an system for the emergency services so you can trust it for reliability (less downtime than the SQLServer on the same project actually!)
For IDEs on Linux, you want eclipse. Its just like Visual Studio though installing the packages for the CDT (C dev tools) is slightly more complicated.
Lastly, its good to learn new stuff, you might enjoy the Linux experience so much you’ll hate going to work 🙂
9
I don’t really have an opinion on the server portion of your question, (node works just fine in my opinion, assuming you know javascript). However I will say that noSQL databases work very well with linux servers. I’m currently using an implementation of CouchDB, (easy replication whooo!), on a linux server and absolutely love it. As far as the compiling the C++ modules, I would recommend tying the cpu intensive work in javascript. After you get it working and decide its slow, then climb the C++ module hill. In my experience, having coded image manipulation, node may end up working just fine for your cpu needs.
1
“First, make it. Then, make it right. Then, make it good.”
I’d suggest launching as early as possible, on technology that makes that possible. If you’re concerned about not having options later on, code in such a way that swapping out modules and slowly migrating to something else is possible. Just remember that the business has to get popular enough to warrant it, and you have to have a working product soon.
As a small start-up you don’t yet need dedicated servers. You can choose cloud, which is cheaper and already includes MS licenses. And you’d be using same stack as currently.
- Windows Azure — by default same stack as yours
- Amazon Web Service — your stack as an option (bit more expensive than Linux/MySQL, but they do have Windows and MS SQL Servers)
There are many reasons to switch to Open Source platform, but saving few bucks on hosting isn’t one of them.
Also, keep in mind that SysOps for Unix/Linux platform are usually paid more than SysOps for Windows. Thus your “saving” might end up costing you more.
You’re really looking at major paradigm shifts here with the unfamiliar technologies. I had good success with converting ASP.NET 2.0 apps and running them on top of mono with 3rd party libraries. http://www.ubiquityhosting.com/ provides cheap mono hosting. Both MySql and Postgres support ADO.NET connectors which saves you a lot of development time. I typically develop all my databases in sql server management studio then make minor changes to the generate sql scripts task output to get them to work in mysqlpostgres. I imagine it would work in a similar fashion for ORMs like NHibernate.
As for a C++ application, you could always host a few boxen yourself if the backend work is cpu heavy and not bandwidth heavy to keep costs low from avoiding dedicated servers. Triple core machines with 2 to 4 GB of ram are cheap with linux running on top of them.
Finally it is best to focus more effort on the features, UIUX, graphical interface and advertising that will sell your app rather then the underlying technology stack. If you start getting a lot of traffic right away, you can always move to azure or amazon to better handle the load.
For my day job I work at a software house that uses Microsoft tech on
a day to day basis, we utilise .NET, SqlServer, Windows Server etc.
However, I realise that as a startup we need to keep costs down, and
after having a brief look at the cost of hosting for Windows I was
shocked to see some of the prices for a dedicated server. The cheapest
I found was £100 a month. Also if the business needs to scale in the
future and we end up needing multiple servers, we could end up
shelling out £10’s of £000’s a year in SQL Server / Windows Server
licenses etc.
If you reach the kind of scale that requires that kind of money, then in theory your income will match those expenses and you will be able to get better deals, and host stuff with your own hardware. One of the reasons your quotes are so high, is because your renting hardware, and not buying it and hosting it yourself ( cerca facebook, Amazon, Microsoft ).
I then had a quick look at the price of Linux hosting for a dedicated
server and saw the price was waaaaaay lower than windows hosting. One
place was offering a machine with 2 cores for less than £20 a month.
My first question is “what is wrong with the company offering those sort of prices”, and how much was linux server at the same company as the windows server going to cost? I know I am asking a question in an answer, but the question itself, is the answer.
As I write a lot of Javascript at work (I’m working on a single page
backbone app at the moment), I thought maybe NodeJS and a web
framework like Express would be cool to use. I then thought that
instead of using SQL why not use an open source NoSQL database like
MongoDB, which has great support on NodeJS?My only concern is that some of the work the application is going to do is going to be dynamically building images and various other
image related stuff, i.e. stuff that is quite CPU heavy – so I’m
thinking of maybe writing anything CPU heavy in C++ and consuming it
as a module in Node.
My only suggestion is use what you are familar with. Use the programs that exist to help businesses like yours have success, once you have that sucess, you can implement and make pretty much ANY change you want. If you do get that sucess, and you are able to afford the higher prices, you might decide its not actually a problem.
Like I said your worries are sound, but are you looking at it from the correct scale, have you looked at business projections to help you decide what to do? I realize you already decided ( within a short amount of time ) what you basically going to do.
Just try to look at the larger picture, you are not going to be paying a single company that sort of money to host your servers, you likely would be doing it yourself.
Almost 10 years ago, I was in the same situation. However, all my Microsoft software was handed to me and I had a relative who was a manager in a large Microsoft shop help me out with development. One year and $50K in expenses later, Microsoft made changes to .NET which threw everything into a loop and we had to start over (Long story short. Don’t ask.).
On the advice of my relative, we switched to FreeBSD and Linux and, three months later, rebuilt everything for virtually nothing using the same people. We are a thriving small web dev business now and have no had to buy any software (or hardware) since.