Startups: Don’t Hire Frontend or Backend Webdevs
trottercashion.com
trottercashion.com
I consider backend work to the computationally-intensive part. Data mining, machine learning, information retrieval, any domain-specific algorithms. High performance storage systems. Managing server clusters.
It's very, very difficult to find both skillsets in the same person, because both skillsets have incredible depth, particularly if you also want the breadth that a pivoting startup will require.
I'm wondering if his idea of a startup is the typical web 2.0 startup, where you slap a web framework on top of a database. Those startups are essentially all frontend - in that case, it doesn't really make sense to hire "frontend" or "backend" devs, just pretend that the whole world is frontend. There's nothing wrong with a startup like that - mine was, as are most gaming, social network, or social news sites (many iPhone/Android apps too, where frontend in that case is the mobile SDK). But that space is getting increasingly crowded; I suspect that many more successful startups will start needing people who can do the algorithmic heavy lifting.
Couldn't agree more with you. Most of the current generation of start-ups is extremely boring. Quite frankly, looking at Techcrunch headlines is depressing. When you look at job requirements they post it's pretty much the same: they're looking for people to write CRUD screens in scripting languages. The current crop isn't about technology, it isn't about the people who enjoy writing non-trivial software and couldn't be happier that some one out there is willing to pay them for it (e.g., people mentioned in Graham's Great Hackers essay; reading that essay felt like music to my ears when I first read it and got me interested in the idea of startups in the first place).
This is opposed to those who see technology as just a means to wealth creation (and there is absolutely nothing wrong with that, there are plenty of "boring" problems that nonetheless benefit humanity when they're solved). That's not to say the founders aren't smart: many are coming from top schools, leaving Google etc... to start their companies; that makes it even more explicit that they're not there to solve interesting problems, they're there for something else. It looks like an awful waste of talent.
Out of the web 2.0 crowd, when you look at the successes, you'll also notice that they're ones solving non-trivial problems (machine learning/recommendation systems, graph algorithms, scalability and efficiency, etc...).
I'd love to see more technology startups emerge (i.e., those who do something technology-wise that no one else dares to try). It's a riskier route, but it's also more rewarding: you'll be able to attract more passionate people who would be more willing to actually take the risk even if the pot of gold isn't in sight (e.g., without VC funding a 100mm+ valuation).
I used to be all about the great technological breakthroughs, the really cool algorithms, all the stuff you mention. But as I got older, my interests shifted to other areas: making kickass applications that people love, designing usable interfaces, etc.
"[T]hat makes it even more explicit that they're not there to solve interesting problems, they're there for something else. It looks like an awful waste of talent."
See, that's where I disagree. I think it takes a great deal of talent to create software that helps people. It takes different talent than creating a great algorithm, but it definitely takes talent. That's why so much software has terrible interfaces and is an unusable mess.
And it takes even more talent to create something which truly shapes humanity. A lot of the companies that have made the biggest impact have no technological breakthroughs whatsoever: it's all breakthrough on all those "boring" things. Wikipedia, Facebook, Twitter, they've all done amazing things by solving "trivial" problems.
</rant> :)
Music and TV streaming would be one for me that has only been solved recently for me (by spotify and tvcatchup), the streaming problems have been long solved, but convincing the stakeholders to be a part of this business took a long time with many failed attempts, even now spotify arent able to launch in the US because of these problems.
Online banking and micropayments would be another problem in that category that has not been solved as yet. while writing an online bank is hard, it is still at the core a crud system, however its impact on users lives are massive.
While I do love programming, I have come to realise it isnt the technical challenge I enjoy, its the benefits I can bring to peoples lives that I really enjoy.
You're right that when the server-side gets nontrivial you need to stratify the architecture and the role definitions for the participants. At that point, "backend" means a just what you describe, and the business logic implementors are building what I'd call the middle-tier; it is seldom more than ORM retrieval, formatting and validation.
When you start involving ETL, algos, complex "systems" programming, deep integration with external vendors then you leave this paradigm and start having "real" backend devs.
On the other hand I think most people are using the terms a bit differently. A front-end developer is a bit of what used to be called a web designer (html/css+ "photoshop" skills) with javascript newly added that's used just for client-side UI.
The backend people handle the database, business logic and everything else that's on the server. It actually seems like this world doesn't need those domain-specific algorithms people.
With this definition, I prefer to work on the backend, but I can also work on the front-end.
I'm willing to bet that mint.com got a fair amount of popularity (and memorability) because it was so nice to look at.
What? WTH kind of startup is short on stuff to do? If you have 2 general-purpose devs, they're going to be 100% busy. if you have 1 front-end and 1 back-end dev, they're going to be 100% busy. If you add another dev, that person is going to be 100% busy, whether they're front-end or back-end.
Even if people aren't waiting around for something to be completed by someone else there is an overhead in communication. "Oh, you wanted the LIs to have that class name? Well I've got to go fix my CSS now... gimme a few minutes."
I will concede the obvious: if you find someone who is great on both sides, HIRE THEM. If you are lucky enough to hire that person, don't pigeon hole them.
I was thinking the same thing after reading "You’d be much better off getting one of your kickass API developers to spend a little time on the website portion, which would free salary space to hire another kickass API developer.".
My immediate thought is that you'd now have a front end developer. Unfortunately, it is your former API developer turned reluctant front-end designer, who is likely annoyed that his job description changed midstream.
If you can get your hands on a brilliant illustrator who can also do pixel icon design as well as strong layout and UX , then even if their HTML skills are shakey they're going to be a strong asset. Similarly, if you have a back-end dev who writes really solid, performant, maintainable code and can handle infrastructure and sysadmin work (eyeballs drifting involuntarily in Zed's direction) then who cares if he has no experience stitching together CRUD apps with the framework dujour.
In other words, hire the best people you can get your hands on and put their skills to use.
Draft for talent, not for needs.
This has been proven time and time again that people that grab the top talent in a limited talent pool (rather than trying to address their perceived needs) are the most likely to succeed.
The best analogy is sports. In (American) football, the Colts' Bill Polian regularly uses this strategy in the draft. In football, ManU's Sir Alex has a strategy to acquire what he calls "characters." While you may not like either of these teams (I love them both! :) you cannot deny that they have been among the most dominant franchises under their managers.
The real challenge is to somehow identify the best talent! :)
I disagree. Most startups have a ton of work, but they often don't have the money or the structure to support a large engineering team. Those switch hitters that traverse the stack are really important for these situations.
There's an added benefit, too. Since one gets to that level by having done a lot of different jobs in a lot of depth, that "macro" view tends to be extremely valuable in sustaining the technology through growth.
To attract those, you're going to have to have a big offer (both remuneration and the nature of the startup) to attract these folks.
Another school of thought is find back-end devs that can do some ops (although yes, it's ideal to have that as a separate position if possible) and front-end devs who can also do UI design and usability. You will need these two hats too.
You can have people who are database experts, Flash or HTML "designers" or mad javascript, actionscript or Silverlight coders -- but if there isn't somebody in charge who understands distributed systems and the restrictions that exist on RIAs, you are d00med.
As, back-end developer can do a lot more then back-end service.. they can work on backup, administrative unix task, optimizing task, inner-house tools, etc etc.
So I think it's more like: Design=front-end, ComputerGeekStuff=Back-end.. and it's really rare to find someone that does both of those things.
Finding the product designer is going to be the hard part -- there are a very limited number of visually oriented product designers who can also code. I think that person should either be a cofounder or hired as first employee with 1-5% of equity; on par with a later VP Engineering hire.
Does the flexibility of your salary options translate to a better product, or does a better product translate to the flexibility of your salary options?
If your answer is the latter, then it makes much more sense to hire front-end and back-end developers to focus on their respective niches; front-end devs focus on making the product usable and keeping users engaged. Back-end devs focus on making sure the product functions, builds features that evolve out of user interaction and keeps those features running.
When you try to combine these niches and ask a guy to play both front-end and back in his priorities become conflicting and your product becomes one of those sites that was either "Built by a designer" or "Designed by a developer".
Don't hire an architect to do an engineer's job, is what I'm saying. They play similar roles, but they have very different focuses that can directly impact the final product. Exceptions exist.
is an example of a javascript framework a front end developer would use to build this next level type of applications.
Hire what your team needs. If you need a duct tape dude who can do a little bit of everything, great. If you actually assemble an entire team of those guys, good luck.