Ask HN: What (enterprise-level) platform should I invest in?
I'm the developer for a startup, and up to now our website/application was developed using CakePhp, a framework that works well but is slowish, and doesn't have a lot of momentum. We have a (M)VP, but are working on a completely new (hosted) service, targeted at medium to large enterprises, with certain pieces maybe being a installable product in the future.
What platform should I invest my time/energy in?
Node.js is interesting and has momentum, but isn't very mature (especially libraries and addons). I've played around some with Django and Ruby, but should I? What's important in choosing a platform?
EDIT: Clarified that it's mostly a service, not self-hosted product.
20 comments
[ 2.1 ms ] story [ 48.3 ms ] threadI've worked with Grails a lot and like it. Been working with Rails some and while many principles are the same, there's a lot of differences (from grails, php frameworks, and others) which have not really endeared it to my heart. But it certainly fits some peoples' style.
Most modern frameworks are probably worth getting your head around - it comes down to personal preference in the end.
I'd also suggest spending more time getting good with a JS framework, and if there's some good interop between that framework and your server framework of choice, all the better.
I'd stay away from newish technologies like node.js (even though I love it), also I'd stay away from frameworks that have had their days (CakePHP). NodeJs has fell over a few times on my dev server for unknown reasons. When we talk enterprise app, that's just a big risk.
I mean you seem to know php. So maybe PHP is not bad to keep betting on. Make your own home brew of MVC framework that is lightweight and fits your needs. CakePHP comes with the sources.
Also Code Igniter is a framework I respect, once again in PHP. Developers for it seem harder to find though. Finally there is Zend. I prefer Code Igniter over Zend because I find Zend too complex, but it's also a perfectly good option.
- Cost. I have found no way to accurately estimate what the development and deployment will cost me initially, nor when I need to scale. BizSpark makes it affordable for a very short time all things considered, but it's really sorta like a free crack rock. - Linux. I simply don't feel comfortable deploying anything publicly on Windows. It might be more secure now than in the past, but my experience is on Linux and I feel like it's a whole new world to come up to speed on the linux side. It's almost as if Microsoft should have a ".Net for Startups who are used to *nx OSes" class. - Linux. I develop on and am most comfortable with Linux. I'd have a hard time spending my days on Windows 7.
Other than that, certain features of .NET do indeed look interesting. At least C# as a language has improved over its parent (Java).
Also, has any startup actually deployed a large scale web app on Mono with ASP.NET?
Best thing I ever did ... sure it costs 3x what I was paying for a VPS, but it has been rock solid compared to a number of resource leak issues with Mono, and the fact that I can admin a windows box with googling everything I need to do.
If you are developing a for-profit venture and the cost of deploying on Windows vs Linux is a breaking point for a .NET project then I'd suggest you look at the business plan again and decide if it has enough profit in it.
Personally I host MVC 3 on a Windows server 2008 R2 with Hetzner for €65 per month.
The Bizspark programme will help you to keep the licensing cost down to pretty much zero in the short run so I don't think this should be a major concern.
Like another commenter suggests you can look at Mono which will let you run MVC 3 (with the Razor view engine), however note that EntityFramework isn't supported and you would be advised to start from scratch in Mono and port to .NET actual later if you chose that route rather than the other way.
However, if it is an application that the customers will host internally on their own servers then they will care about the following things:
- What web/application server is used
- Whether there is any integration with management/monitoring tools
- What kind of integration is supported with internal directories (particularly Microsoft Active Directory) - for authentication and authorization
- What database engines are supported and whether you make any "unreasonable" requests (e.g. not being able to share the database server/cluster with any other applications)
What kind of application are you thinking of building?
Anyway, I vote for something in Python with SQLAlchemy and either Werkzeug (maybe Flask, if it suits you) or CherryPy. Pyramid might also be good, but I haven't used it much. I tend to avoid Django because the ORM just isn't as good as SQLAlchemy, and the template language isn't as good as Jinja.
Not sure why everyone is suggesting the standard enterprisey platforms Java and .NET. You control the server environment completely, right? Go with a dynamic language for development speed, then. The big ones for the web are Ruby, Python, and PHP. Of those: PHP is a mess of a language with no big advantages; Ruby and Python are both great languages with all the libraries you need (probably :), but I give Python the edge because things in the Python world tend to have much better documentation.
Get the volume first, and when the platform becomes a problem, you should be really happy then, while crying all the way to the bank, worry about maybe hiring some experts in another, more scalable one?
Reasons:
1. Node.js is maturing and growing by the day
2. You want to invest in something that becomes better [more reliable, mature, documented etc.] over time, and the Node.js community is going to be great over the next few years
3. You don't want to invest in the technology of the previous decade, you want to invest in the technology of the next decade. Node.js is that technology.
4. Building on Node.js lets you have an advantage in hiring because developers that know Node.js tend to be very good hackers [they were curious enough to learn something new].
5. My company, Flotype, is taking Node.js to enterprise with our NowJS offering. Every single major corporation out there, such as Zynga, Google, HP etc. are all working on Node.js right now. Enterprises are looking into the future and are betting on Node.js.
Honestly, there are benefits of sticking with something like Rails, but you should be looking into the future, and the future is Node.js
The list goes on!
2. This is a restatement of the first reason.
3. How do you know that popular technologies right now are going to decline? Java was popular ten years ago, and it's still popular. Python was not popular ten years ago, and now it is. I don't expect either to decline in the next ten years. Node, on the other hand, could very well stop growing, or even recede.
4. Why would you require Node experience? A good web developer should be able to pick it up quickly. That allows you to work with the same general talent pool as if you were hiring for Rails or whatever.
5. This is a restatement of reasons one and two.
Here's what I've observed about programming languages and frameworks. Each programming language has a community. The priorities of that community will dictate the direction of the framework, and to a lesser extent, the language. Frameworks seem to advance/change faster than the core language itself.
So, rather than asking what language/framework you should use, you should be considering what type of community you think fits your team/product best.
As I mentioned, we love Rails. We've been extremely happy with it, but it's a fast moving framework that requires constant learning and comes with it's fair share of drama. I'm ok with that, because our team doesn't mind the pace, and we enjoy the benefits of a stack that has strong "default opinions". I've introduced several PHP programmers to Rails, and they're constantly amazed at the broad nature of the Rails development stack. Aspects like deployment strategies with Capistrano, and now asset pipelining, are all concepts that the Rails community embrace and support. However, if you're not down with having someone else dictate these aspects of your project, Rails probably isn't a good fit for you. That doesn't make either decision wrong.
If you have an MVP, take your time. Short-list three or four languages/frameworks and do the following:
* Run through the "hello world" tutorials for each.
* Have a look at the documentation for each. How well does the documentation read.
* Pick a component of each framework, like the ORM, and dig in to the documentation a bit. How detailed is it? Documentation that looks good at first may turn out to be not-so-great when you get in to the details.
* Drop by the IRC channel for each. What kind of discussion is happening? How are new members treated?
* Look for mailing lists related to the language/framework. What types of problems are being solved? What's the focus of the list?
At the end of the day, you're the only one who can tell you what is the right fit for your organization. Hell, it might be PHP. Don't fall in to the trap of believing that the right language/framework is going to make your product a winner. It's the people, not the tools, that make the product go.
But let me tell you why I still like you asking this kind of question, sir. You've tracked down that your shoes don't to your roadmap anymore. And you've tried out new shoes. But it looks like you are looking for boots.
So the simple fact that you don't get blinded by a trademark of shoes is making you 'sympathic'.
Shouts .X4