
What technology should your startup use? - mattetti
http://matt.aimonetti.net/posts/2013/08/27/what-technology-should-my-startup-use/
======
untog
Honestly? I think the answer is "the one you already know". Most of the
languages covered in the article are capable of doing 90+% of what the average
tech startup needs (a web site, an API, database connectivity). Save yourself
the trouble of heading towards the latest hip technology and just write with
the stuff you already know how to use. Worry about how flexible and scalable
it is once you've actually proven your idea works.

~~~
mattetti
OP here, when you build a company, you need more than one person so you also
need to think about your product needs (what tech better fitted) and who you
will hire to help you build it.

~~~
untog
That still seems backwards. Hire developers. Use a language those developers
are comfortable with. Don't choose a language then hire developers for it.

In any case, I'm not sure that many (any?) product needs could dictate choice
of language in the vast majority of cases. Yes, if you need to do a ton of
realtime stuff then maybe think about Node etc., but most people want the same
standard stuff.

~~~
jrochkind1
"hire developers, use a language those developers are comfortable with."

So you can use that method when hiring the first developer.

When it's time to hire the second developer, are you looking for only
developers that are comfortable with the same languages as the first
developer? If so, you are hiring developers based on language, and no longer
following your advice. If not.... then you get a bunch of developers
comfortable with different languages, and now what?

Often the answer might be "good developers can learn to be effective at any
language." Which while on the whole (if not always) true, nevertheless only
sometimes works for an enterprise (sometimes you don't have time to wait for
them to learn it). But even so, now that turns into different advice: Hire
your first developer, have her use a language she's comfortable with, then
hire subsequent developers that either already know that language or are
capable of learning it, and have them learn it. Which doesn't sound quite so
obvious as your original advice, although it's not neccesarily an unreasonable
approach.

~~~
davidw
So use what you are comfortable with - as long as it's not something that's so
completely obscure that no one else knows it. If you just chase popularity,
you're also probably likely chasing mediocrity. On the other hand, no, Visual
Object Forth ++ from Borland is probably not the best thing to build a web
site with.

~~~
kazagistar
I... will admit I just looked up to see if Visual Forth existed.

------
tieTYT
> C#

> We have a better IDE than the Java guys

Biased Java guy here. Completely disagree. Yes VS lets you build nice UIs with
drag and drop. But if you compare bare bones Intellij IDEA to bare bones
Visual Studio, Intellij IDEA wins everywhere else. All things being equal
(that includes programming languages), you can be more productive in Intellij
IDEA because its got the fundamentals down and has intuitive shortcuts for
doing everything.

Of course I haven't used VS for about 5 years. Keep that in mind. But back
then IDEA was light years ahead and .NET devs still thought VS was better.

~~~
edwinnathaniel
As long as the .NET guys don't have Maven they can't win.

I can check-out a Java project that contains pom.xml using the big 3 Java IDEs
out there (Eclipse, IntelliJ, NetBeans), compile, build, run unit-testing,
integration-testing, navigate my codebase like crazy.

But you know, I'm gettin tired singing the same choir of Java. .NET guys can
sing how great their C# languages and VS.NET are but we know Java ecosystems
win hands down End-To-End; we got it cover from distributed systems, big-data,
enterprise, "service oriented", dependency management, build, validation
(findbugs, checkstyle).

Eclipse + essential plugins are more than enough for me (albeit I'm using
IntelliJ these days) and it's free.

~~~
jrochkind1
Ha! I think what might seperate Java lovers from Java haters is whether you
consider `maven` to be an asset or a liability!

Those who only occasionally use Java when they have to... tend to find maven
incredibly confusing to get working properly.

~~~
edwinnathaniel
Hahahaha, I think you're on to something there!

I wouldn't call myself a Java lovers as I'm moving away from Java lately but
so far I haven't found a comparable tool to build+dependency that Maven
provides nor I have found a good ecosystems that adhere to non-breaking
fundamental building-block standards (Servlet, JSP, JPA2, EJB3-lite, JMS,
etc).

Yes, Maven could be painful to start with especially without someone who had
previous experience on your team but feature-wise, nothing competes with it
yet. Ruby needs RubyGems and Bundler (and Rake to that extends) to compete
with Maven. I heard the philosophy of "Do one thing and do it well" but if
you're using those tools altogether every time (Rails) then what's the
point...?

~~~
jrochkind1
I don't understand what you mean by "ruby needs RubyGems and Bundler to
compete with maven."

Sure, and Java needs maven to compete with RubyGems and Bundler.

?

Oh wait, you think it's significant that on ruby it's two cooperative tools
with two different names, compared to one tool on Java? I don't see how that
matters too much in practice. (But it does, in real life, is it really _just_
maven, or is it maven, and definitely ant, and maybe ivy too? heheh.)

I will admit that I find bundler a lot easier to use than maven, but I'm
definitely a rubyist more than a javaite. I _think_ that someone who only
occasionally needs to use ruby will find bundler easier than someone who only
occasionally needs to use java will find maven. But maybe that's just my own
prejudice, I could be wrong there.

~~~
edwinnathaniel
Oh I'm not referring to which one is easier to use but merely on the features.

Maven = Bundler + RubyGems + Rake

Maven = Ant + Ivy

Maven = not-sure-what-the-equiv-in-python (pip is more along rubygems?)

I don't think Maven is easy to use if you have to write from scratch (you need
an IDE or something to generate the initial POM first ).

I'm also questioning if it's necessary to have RubyGems separated from Bundler
when in real-life, you'd almost always use both anyway (along with Rake) to
have a more productive workflow.

~~~
jrochkind1
Yeah, it probably would lead to less bugs and easier to follow documentation
if they were joined, but such is open source sometimes. And it ends up being
not a huge problem in practice, I think.

Don't people similarly often use ivy _with_ maven, as an extra layer that
makes certain aspects of maven easier? Maybe I had that wrong. And I thought
maven use almost always included using ant. Maybe I had that wrong too. So not
a java guy.

Ah, from the Ivy project's own documentation, sounds like I did have it wrong:

> First, the most important difference is that they aren't at all the same
> kind of tools. Apache Maven is a software project management and
> comprehension tool, whereas Apache Ivy is only a dependency management tool,
> highly integrated with Apache Ant™,

That does make it seem like maven isn't neccesarily the "do one thing and do
it well" tool you were suggesting it was though! That might be more what ivy
is trying to do?

~~~
edwinnathaniel
People use Ivy with ANT because ANT solves part of the SCM issue: build. Ivy
gives ANT dependency management.

Many people keep saying that Maven is a bloated software but the Maven core
itself is rather small, everything else is a plugin.

Compile Java? Plugin.

Compile Scala? Plugin.

Unit-test runner? Plugin (surefire).

WAR packaging? Plugin.

Run your CSS/JS via YUI Compressor? Plugin.

The reason why occasionally you see ANT TASK inside Maven may have something
to do with the situation where there's no Maven plugin for that particular
task and there's already an ANT TASK for that particular job so people just
call that ANT TASK from within Maven. All these tools can work together
nicely.

BTW, executing ANT TASK from inside Maven? that's a Maven plugin.

So Maven does one thing and do it well: orchestrating plugins. Each plugins
does one thing and do it well: solve a particular need. It does make Maven
look bloated because it gives the illusion that Maven does everything... like
your Operating Systems.

When people refer to Apache Maven as a Software Project Management it is
because it can also generate a website for that particular module/sub-
modules/the whole projects.

Example of generated Maven websites:

[http://james.apache.org/](http://james.apache.org/)

[http://maven.apache.org/](http://maven.apache.org/)

So you can put everything under your source control and have them build by
maven to generate a complete website + documentation + javadoc + release notes
for your modules/libraries/javadoc along with other goodies as well (code-
coverage result as part of your project website).

Example of the goodies that the maven site plugin can generate:

1\. Display dependencies of your libraries/projects

[http://mojo.codehaus.org/cobertura-maven-
plugin/dependencies...](http://mojo.codehaus.org/cobertura-maven-
plugin/dependencies.html)

2\. Project reports

[http://mojo.codehaus.org/cobertura-maven-plugin/project-
repo...](http://mojo.codehaus.org/cobertura-maven-plugin/project-reports.html)

\- Checkstyle report (does your code violate any coding rules?)

\- Cobertura => check the code coverage

\- Javadocs => brings you to the API

All the links in project reports are generated by "mvn site" command and the
availability depends on whether you install the plugins.

------
Spearchucker
The whole "C#, VS and MSDN reek of licenses" is getting a bit staid. I'm
writing a thick client/desktop app (almost 300k LoC) using Visual Studio
Express , SQL Express and online MSDN. Yes, I paid money for Windows and
Office, but that has little bearing on being able to write shrink-wrap quality
apps with free tools from Microsoft.

~~~
hackula1
I left the .Net world about 3 years ago. There were plenty of things to
complain about, but licensing was never one of them. Most of the stack is free
until you get to the point where you should be able to pay for it anyway.

~~~
chc
I recently decided it might be worthwhile to learn the Microsoft stack, and
had heard similar things about how you can just get whatever you need for free
until you've scaled up. So I went poking around Microsoft's site for this free
stuff. Half an hour later I gave up without having gotten my hands on anything
but an impenetrable white paper about different versions of Visual Studio. So
it seems that either people are exaggerating how free this stuff is or
Microsoft is very good at hiding this.

~~~
adolfojp
1\. Go to the Visual Studio website:
[http://www.microsoft.com/visualstudio/](http://www.microsoft.com/visualstudio/)

2\. Click on the Products menu

3\. Click on Express 2012 products

4\. There is no step 4

~~~
chc
Ah, I didn't realize that when people say they give their stuff for free, they
meant they're giving a different product away for free. That is…weird. I can't
figure out what this includes. Is this actually enough to deploy a web app
with the full Microsoft stack?

~~~
adolfojp
It is fairly normal for companies that produce commercial products to offer
different editions of their products at different price points. Microsoft is
not a weird exception.

The Express products are completely functional although they lack certain non
essential features. The main limitation of the Express editions is that you
can't use third party plugins with them. Third party plugins are used to
enhance Visual Studio itself and are not to be confused with third party
libraries which you can download conventionally or with the built in package
manager Nuget.

The Express editions are distributed by task so you only download what you
need. If you don't want to create Windows Phone apps, for example, you don't
have to download that functionality.

To develop web apps you have to download Visual Studio Express 2012 for Web.

[http://www.microsoft.com/visualstudio/eng/products/visual-
st...](http://www.microsoft.com/visualstudio/eng/products/visual-studio-
express-for-web)

It allows you to develop ASP.NET MVC and ASP.NET WebForms apps with C# or
VB.NET right out of the box but you can also use it to develop web services
with WebAPI, regular HTML5 websites, etc. And out of the box you can deploy by
using FTP, WebDeploy and Azure but you can also use whatever external tool
that you like.

The product includes a copy of MS SQL Express that runs as a process but
you're not limited to using Microsoft databases.

~~~
chc
> _It is fairly normal for companies that produce commercial products to offer
> different editions of their products at different price points. Microsoft is
> not a weird exception._

Oh, no, you're definitely right about that. What I meant was weird was that
nobody seemed to describe it in those terms, so I was looking for the wrong
thing.

Thanks for the rundown! Now that I actually have some idea what I'm doing,
I'll have to give it another go once I get a bit of free time.

------
blacktulip
This comment[0] interested me. I've never exposed to erlang. Can someone
please explain this a bit to me why she said only erlang can do concurrency?

[0]: [http://matt.aimonetti.net/posts/2013/08/27/what-
technology-s...](http://matt.aimonetti.net/posts/2013/08/27/what-technology-
should-my-startup-use/#comment-1019493802)

~~~
lucaspiller
"Erlang based systems obtain many of the aforementioned properties from the
Erlang concurrency model. Erlang handles the concurrency itself instead of
relying on the OS. A concurrent entity in Erlang, called Erlang process, is
much lighter than a standard OS process or thread, initially using about 3 KB
of memory on a 64bit system. In a typical Erlang systems, you can easily
create hundreds of thousands or maybe even millions of Erlang processes. The
Erlang virtual machine uses its own scheduler which ensures that each process
gets a fair share of execution time. The scheduler also distributes processes
over available CPU cores, using as few OS threads as possible (by default only
as much as the number of available CPU cores)."

[http://www.theerlangelist.com/2012/12/yet-another-
introducti...](http://www.theerlangelist.com/2012/12/yet-another-introduction-
to-erlang.html)

It is kind of like Node in that it is very easy to do concurrent stuff, except
instead of nested callbacks and all that jazz, you write 'processes' which are
designed to share nothing. They run akin to OS threads in that one process
crashing won't bring down the whole system (unlike Node). As no state is
shared it also means that they can easily (i.e. it is built into the VM, and
switched on by default) be scaled up to run over many cores. If you are
interested, you might want to look at Elixir (a language built on top of the
Erlang VM) which has a more Ruby-esque syntax: [http://elixir-
lang.org/](http://elixir-lang.org/)

EDIT: Should also point out that I think "Jessica's" comment was just
trolling, however it isn't far from the truth :)

~~~
_nato_
Is ``Jessica's'' comment not far from the truth because Scala and Go have
shared memory for their Actors/Processes? I know Erlang doesn't share memory
between their processes which leads to concurrency; is this what she was
getting at?

~~~
rdtsc
In general (apart from run time code loading) one can accomplish a lot of
things Erlang does in any language.

Her "how much pain and when" I think implies that she only accepts concurrency
as practical when units of concurrency are isolated as that would reduce the
number of shared data structures being updated, lock contentions and so on.
There is some truth in there that I agree with.

But then again maybe she was just trolling. I for one do not like her tone her
comment.

------
czbond
I have a different stance on this. The technology that drives the company is
strategic business decision, not a technical decision. Sure - create the MVP
in whatever you want, the technology is less import - but don't do that for
Rev 2. Rev 2, the true architecture of the company should be based on A)
what's the right tools for the use case B) are the resources with that talent
available to keep from hindering the company? For example, I wouldn't start a
company with Go/Rust/etc anywhere but in SanFran - because to most of the
country these languages are still fads.

------
mindcrime
Interesting take, but I'm disappointed that Groovy wasn't broken out into a
separate entry. Groovy is a great choice in that you can leverage the entire
world of Java libraries, while using a modern, dynamic language that is mostly
backwards (syntax) compatible with Java - but without the verbosity. And
Grails is a first-class convention-over-configuration framework for building
webapps.

IMO, Groovy is absolutely one of the top platform choices a startup could
make. We've been using Groovy and Grails at Fogbeam for 2+ years and haven't
regretted the decision at all, FWIW.

~~~
vorg
Because Groovy has unfortunately turned into a mere appendage to Grails, with
very little independent use, it's generally not considered as a viable
standalone language by many people anymore.

------
wes-exp
Clojure seems to get a lot of attention, but don't forget Common Lisp. If
you're tired of the reinvention treadmill and want a great language that is
actually mature, CL can be excellent. CL also has great runtime support: SBCL
(for super performance) and ABCL (if you need the JVM).

------
BerislavLopac
There is only one answer to this question: whatever your people are best with.
Whether have any "people" (including yourself) who can code or not, you don't
need to worry about the technology, you need to worry about your team.

If we're talking about Web apps, technology is much less relevant than the
team's abilities. If you're also going for native apps, your options are
mostly limited anyway (especially on mobile), but the same principle still
applies.

Another reason for going with a familiar technology is that it will be easier
for you to find future team members, as you will (presumably) already know the
local community, thus avoiding what happened to Reddit.

------
bifrost
I have similar views to the author, however I generally respond with "LOLCODE,
all the cool kids are using it" because its clear they need to do the work
themselves to figure it out.

If they ask "is it sane to use XYZ" I could give them some actually useful
information, but sadly people often want to be given the answer rather than
get advice.

I'd say this question ranks up there with "Can I ask you a question?" to which
I usually respond "You just did...". If you want useful information, just ask
for it, your friends and peers are not your parents.

NB: I ported a lolcode interpreter so I do actually encourage people to use
it... sometimes...

------
DanielBMarkham
Asking this question for many readers is like asking "What kinds of shoes
should your startup use?"

Value is important. Say that about a thousand times. Once you are creating
value, then you can write long blog posts about various tool choices -- or
spend time reading them. Until then? These issues are so trivial as to almost
not be worthy of discussion.

The interesting thing is that this is exactly backwards from the way most
folks are taught programming. You pick the tool first, learn it's secrets,
then set about making someone happy. This is a great paradigm if you want to
be a corporate programmer, but if you're looking to form a startup you've got
the cart in front of the horse. Sure, bring the skills to use all kinds of
tech. But don't spend a millisecond focusing on that crap when nobody wants
what you're offering.

A lot of guys who say they're in startups are like a severely overweight and
out of shape guy who sits around reading running magazines and ordering
expensive gear. Yeah sure, that stuff can be dreadfully important. But only in
the context of actually doing something. Otherwise it's just bike shedding.

------
greatzebu
I clicked through in the hope that it would say "it barely matters, just get
started and fix mistakes as you go". It started off with promise when he
asserted that the people asking this question usually didn't actually care
about his answer and that other factors are much more important, but then for
some reason we got the long list of languages and bullet points anyway.

------
tieTYT
> My problem with Clojure is that ... Exceptions are often meaningless and
> trying to debug someone else’s code is challenging since the language itself
> is complex and it can be extended by macros. Finally, the Clojure community
> isn’t really web-oriented, most of the work done in Clojure seems to be
> data-centric.

You really nailed it here. I really like the language but I really struggled
with debugging code and I'd shit my pants every time I refactored.

I had a much nicer experience with Haskell: If your code compiles, it probably
works. With Clojure: If your code compiles, it probably doesn't work. I'll
tell you something's wrong, but you'll spend most of your development time
discovering the cause. That's very frustrated. But to give Clojure the benefit
of the doubt, I never felt like my development pipeline was efficient.
Unfortunately, I couldn't find a canonical example of a good development
pipeline.

------
bernatfp
I thought this lesson was already learned. You should use the one you're more
comfortable with to build an MVP even if it doesn't scale well. You will take
care about that later.

------
cgag
I don't know what you mean by Clojure being data-centric rather than web
centric. Requests are data, responses are data. Plenty of people are doing
web-dev in Clojure.

Edit: I would also disagree with the language being complex. I think the only
languages that compete with its level of simplicity are mostly other
lisps/schemes.

~~~
Mikera
The point about complexity is probably fair from the perspective of someone
just getting started with Clojure.

Sure, the syntax itself is very simple and regular (like any Lisp). The
complexity is in all the other stuff - macros, code-as-data, vars, namespaces,
metadata, managed references, persistent data structures, leiningen, paredit
etc.

Once you've got up the steep learning curve, I find Clojure is unbelievably
productive. It's just a bit tough getting there. I think it's all solvable,
but the Clojure community does need to listen and learn from constructive
criticism.

------
crazygringo
> _Does this technology fit my company’s core values?_

This is actually a fantastic way of looking at it. All programming languages
have philosophies, and certain "cultures" that they bring along with them.

It's important to realize that technology choices are not just about the
technology.

------
weakwire
scala is just great (minus compile time). But really. what you know best .
(pref type safe)

