9 ms·
How to hire a programmer to make your ideas happen
- sivers 16y agoAssuming most HN readers don't need this advice for themselves. But if you disagree with it or think I left out something important, please consider leaving a reply in the comments on that page, so future readers will see your suggestions, too.
- whimsy 16y agoIt's good to have on reference for our non-programmer friends, though.
- Alex3917 16y agoThe way I was taught was to start by hiring several designers to design every screen, and then only hire programmers after you're completely satisfied with the design. The way these outsourcing firms get you is by offering a cheap bid, and then charging you every time you want to make a change. So start out by knowing 100% what you want, and then once they've accepted the project don't let them ask any questions or make any suggestions until 1.0 is completely finished. (If they don't understand something they can ask for clarification, but that's it.) Always have your fights up front, never once the project has started. That way you'll get the project on time and under budget.
- gsharm 16y agoIt must be horrible working with you.
- kls 16y agoRight get the UI right and it won't cause as many iterations on the back end (where it hurts more) as well prototype the whole UI in HTML/Javascript, Flash, Desktop app, whatever suits your fancy. Have a fully functioning UI that the user can touch and feel before you develop the back end. This will flesh out all data requirements and business logic services that will be needed to support the UI. I am a little leery of not allowing the developer to provide input though. Things are going to change, you just want to narrow those changes to the important things.
- ams6110 16y agoI don't think you need a finely polished UI to start with, but some wireframes or even hand sketches of what each page/screen/dialog will look like can be a very effective communication tool. Written use cases are great but a picture can truly be worth 1000 words.
- kls 16y agoEnd users think in terms of screens, if you can provide them with a fully functioning ui then you can get valuable feedback about useability up front. The client knows in short order that they are getting all of the features they want because the get to touch and feel the system. After I adopted this method my project change orders slowed to a trickle.
- deleted 16y ago[deleted]
- lachyg 16y agoI totally disagree, get basic stuff done by the designer, but I find it completely changes as programming happens. You figure out things won't work the way you thought they should, you figure out better ways, etc. Get wireframes down, so you don't spend thousands on designers, and then realise you have to spend thousands more.
- webwright 16y agoThe verbal narrative seems like a pretty exhaustive way to go. With something like OmniGraffle (or something like it) and a few accompanying paragraphs, you could describe the interaction a lot more clearly. Also, I think it's a good idea to invite feedback. i.e. "Here's the spec, but it's flexible. As you read and develop, be noisy if you have some ideas that could make it better." A lot of the commenters here are advocating "give devs a vague description of goals and turn them loose". I think that's a pretty bad idea unless the product/problem is a simple/obvious one to solve OR unless the the developer has a good understanding of the market. But even if the dev is a young superstar who has NO empathy for the customer of your revolutionary manhole cover design workflow software, you should be open to feedback.
- shib71 16y agoI like the idea of getting multiple teams to take on the first milestone, and not just because it a good long term strategy. As a contractor I frequently encounter clients who have unrealistic expectations. This process would give someone new to the industry a more realistic idea of the range of skill and the difficulty of the work.
- lvecsey 16y agoI was listening to a project proposal the other day and had a similar set of questions to guide the conversation. It was actually with a psychologist and I think that field and way of thinking represents the exact flip side of the type of rational thought that is reinforced and developed by programming. I'll likely end up turning down the project; my biggest fear is getting sucked into something that won't conclude well, so I'm going to use this fleshed out guideline next week and see how many of the steps I can reach clarity on.
- pier0 16y agoBased on my own experiences using marketplaces to find freelancers, as long as the project posted is well defined, it is much better to have the coders submit bids for the total. Every single time I paid by the hour I have had problems. I understand Derek's advice is to find one coder to work on a large project. But even then, IMHO is better to start with a fixed amount and eventually change and pay by the hour (and add other perks) only later.
- snh 16y agoGranted, detailed requirements are good. But many - if not most - clients are unable to write a requirements document on their own. So it becomes part of the contractor's job to help them develop the requirements. I've seen a number of cases where the client spends a lot of time writing detailed requirements that are technically infeasible. They may not realize that in their simple "if x then y" statement, x is actually the result of a fifty step process involving a unicorn and a carebear making sweet love.
- christonog 16y agoJust curious, in what instances have you experienced a client request something technically infeasible? What was the feature or project?
- Tichy 16y agoI actually don't believe in detailed requirements or specs anymore. It is never possible to think of all issues beforehand. I am also not sure if they are really good for the client. Sure, it helps when negotiating fixed price contracts. But that also means that you will only get what was negotiated. If the developer has a brilliant insight while coding the thing, he'd better not tell you about it if he doesn't want to mess up his time calculations.
- kls 16y agoLeave off all details that the programmer doesn't need to know. I differ on this, what you need is a clear road map, not people left in the dark. A feature for 2.0 may require a portion of 1.0 to be designed in a certain way, if you omit the knowledge of that feature coming down the road, you may be looking at a costly rewrite to adapt the app to that feature. Whereas the developer having for knowledge of the feature may steer them in designing the system with the though it mind that it will be coming. you're paying multiple times for this first milestone, but it's worth it to find a good one This is not good advice. You would be much better off combining that money and hiring a proven senior level guy, as one senior level guy can outperform a group of junior level guys. Which is what you get many times when you solicit from those sites. To be honest those sites are a race to the bottom and no senior level guys are lurking there because they have plenty of work and don't need to compete in that race. The best advice is to break your 1.0 requirements into micro-milestones with the respective developer, the trick is to get them down to 40hr increments, for example you ask the developer do you think you can get account create / update done in 40hrs and the developer says yes with the exception of roles and permissions, or just yes, I can get that all done. You work the contract from that perspective, they have to produce something in 40hrs and if they start going over then it becomes apparent quickly and you are rarely ever at risk of loosing more than 40hrs. This allows you to measure your risk in small increments and allows you to cut loose at the point that they start failing, while still having and completed 40hr blocks as feature complete, that you can turn over to a new developer should they start failing. For instance, say you have 3 features in 1.0: account, orders and inventory. say the developer does account in 40hrs, submits it to you and it is feature complete, you then move on to orders and the developer misses 40 and claims that he needs 20hrs more (it happens) so you give him the 20hrs and it comes back feature complete. Now you have 2/3 done, but at any given time you where only at risk for a 40hr loss and 60hr loss when you decided to take a greater risk. Finally, say they miss inventory and claim it will take them another 40hrs, you decide that you are willing to assume 80hrs risk and it still come back defective and it will be yet another 40hrs. At this point you feel that it is too much risk so you cancel the contract, you are still in possession of 2/3 of the development effort and you can solicit for that final 1/3. As well you can opt at that point to diversify because you are loosing faith in the original developer at which point you could agree to the addition 40hrs with the original developer while hiring another developer to build the final 1/3 in parallel, in case the original developer is not able to complete the task. One other thing to note, is when the first 40hrs is complete hire an independent party to review the architecture and the code to ensure that it is not a ball of spaghetti that will become a maintenance nightmare. This is a far more pragmatic approach to hiring a developer.
- city41 16y agoI am the developer in this situation right now. I was hired by a small company as their sole developer to write them a program. So far, I have to say I pretty much disagree with everything said here. I think the developer really needs to know the details of the domain and problem space. The company I am working for is a workforce management consulting firm. The first week on the job I interviewed 10+ consultants with the company. Got to know their tasks, goals, accomplishments, needs and pain points. I also shadowed in on one consultant for a day, and read a lot of literature. I know an awful lot now what it means to do work force management and workforce management consulting. This is helpful, very helpful. I become a knowledgeable user of the very system I am creating. Imagine if Adobe's developers had no clue about image editing, Photoshop would have been a disaster. This feeds into my other point. Don't give the developer detailed descriptions of every click, button, error, etc. Give them the exact opposite. Tell them what the system needs to accomplish, and let them design it. For one, they will almost certainly design a simpler and easier to manage system than you will (maybe not easier to user, because let's face it, that's not usually a programmer's forte). Since the developer now knows the domain pretty well, they can use that knowledge to help design an effective solution. let the developer arrive at your goal with as minimal amount of code and work as possible. That way you can see your vision in the flesh, use it, and actually start to understand what it does. Only once a feature is actually implemented and put to use do you really start to understand what it needs to do. Maintain a dialog with your developer. Give feedback often and have the two of you work together on where the project is going. Basically all I am saying boils down to what most agile development processes ascribe to. I do however totally agree with doing the "simple" version 1.0 release first.
- robosox 16y agoCan't agree with this comment more. I realize this article is aimed at getting the best hired gun you can, but the best way to partner with a developer is to do just that - actually partner, not toss requirements over a wall. Get their advice on design decisions early on. Make them feel a part of the product's direction. Ensure they understand and are on board with what the product is trying to accomplish. Then let them run with it. You could combine this approach with the whole "hire 3 people and see who can turn in the best result" idea. But I strongly believe that having developers who are motivated is extremely important...and the best motivation involves giving them ownership and autonomy as well as objectives.
- drewcrawford 16y agoRegarding the overall "numbers game" approach, it will work, in the strict sense that the client will get what he asked for, but not in the sense that he will get what he wants. Most people, when they try to hire me (although they don't realize it) are looking for technical or domain expert feedback. They may think they need such-and-such coded, but in reality they have a business problem that they need solved. More often than not, I can weasel out of them the business problem, and the technical solution to solve it, and it's often not at all what they originally wanted to have me do. Part of it is that clients vastly overestimate the development time of some types of features, and vastly underestimate the complexity of other types of features, so they cut the wrong stuff from their MVP. In a sense, their project is doomed before they even hire a programmer. Top technical talent can get and keep you on course in a way that will fix problems you don't even know you have.
- siglesias 16y agoThis comment applies to non-engineer college students who have ideas for complex websites, big ambitions, and are looking for programming help. This doesn't apply to those looking for spot jobs and minor features. Personally, I've gotten burned big time hiring "talent" abroad, even utilizing a bidding and feedback system like that on getafreelancer.com, primarily due to the fact that (at least for me), it's impossible to get a foreigner psyched on a predominately American consumer product. I found that these programmers are constantly striving to provide the bare minimum, they constantly recycle code from other projects where they think it might fit (even if it doesn't), and they are desperate to close the ticket on your project and move on to the next as quickly as possible. In my opinion, my observations fall in very closely with what Marx describes as "alienation," wherein workers (or in this case, foreign programmers) are to the extreme out of touch with what they are making. Sure, you can provide detailed documents specifying the exact nuances of what you want implemented, but you will NEVER anticipate the misunderstandings that are possible when traversing across complex language barriers, and secondly, you will never get the fit, finish, and craftsmanship that only somebody passionate about the product can imbue into it. The second trap, of course, is to think that you can hire American freelancers, or, better yet, the "hacker" at your particular university. This, of course, comes with other disadvantages. It is often the case that university undergraduate "hackers" have several pet projects, and even in the case that they are open to discussing programming your idea, they often eventually begin to doubt whether it is worth it to essentially build your website for you (as they see it) as you sit around and tell them what to do. After all, did YOU spend the time, sweat, and endure social ostracism honing the valuable skill of computer programming as they did for years? Look no further than what happened to the Winklevoss twins at Harvard when they tried to get Zuckerberg to do ConnectU. These arrangements almost inevitable fall through, consistently. Having been very close to entrepreneurship circles at an elite university, I can tell you that I have never once seen a non-hacker recruit a hacker to build a product successfully, though I've seen, and made, multiple attempts. The hacker's pet project ALWAYS comes first, followed by school and internships. And too many hackers, in my observation, are trying to chase the Zuckerberg dream by precluding any strong non-coding liberal arts thinkers from their teams and making all business and user experience decisions themselves. I can't speak to the success of this trend because I haven't seen the opposite case even attempted due to the pervasiveness of this hacker-centric startup attitude. My pessimistic conclusion (though it might have a silver lining) is that unless you have a really trusting programmer friend who will help you out of your preexisting relationship, it is both not worth it to pursue hiring a programmer for your startup from abroad and not worth it to pursue alliances with your local college hacker. The best way to go is to bite the bullet and learn to code, and that way you actually have a means of effectuating your own ideas, which are liable to change, multiply, grow, etc. at a pace that you will want to control. Once you learn to code, you'll gain more respect of the hacker types anyway, and from that point you can build meaningful alliances of mutual understanding and respect. This is the route that I have taken, and I don't regret it one iota. A year into programming, I've got three iPhone applications in the store, with several more coming. The only limit for me, now, is time, and that's the only limit you really ever want to confront when building a startup. Depending on a stranger who is just doing it for money? For the birds.
- rmundo 16y agoHow about using this idea to hire people long term for your company, as a supplement to the interview? Filter through resumes, send promising ones a one day scope problem, with a one day deadline and one day's pay. Allow one or two "call tickets" where they can contact you for feedback.
- leelin 16y agoCool, the post describes how to build a Nondeterministic Outsourcing machine to solve your programmer problems... just fork a whole bunch of jobs trying to solve the same problem and then pick the one that turns out best! Sarcasm aside, I like the "I AM REAL" suggestion to auto-filter out the guys who reply to every single job without reading. It works well on Craigslist too, to reply with a special subject tag.
- T_S_ 16y agoThere is an overwhelming desire by non-programming business people to reduce programming to something they understand better. Not knowing how to program, they have to grasp for analogies like building a house, a bridge or some other large engineering product. The problem with this is that every large development project I have seen on included a large element of what is really R&D. Most of the engineering around came in the from network admins, DBAs and sysadmins and, most of all, compilers. To roll with the analogy, the development team was designing new studs, beams, screws, and other widgets, to be produced by a (zero cost!) digital factory and later installed by a team of helpers. This perception gap leads to all sorts of dysfunctional behavior and game playing on both sides. The example you see here is like working extremely hard to boil down your R&D to the equivalent of a one day high school lab, and then staging a contest. It will definitely give you some information, but won't solve the original problem.
- noverloop 16y agoI like to explain programming by comparing it to writing a book. You can't change the plot-lines overnight without having to throw away a few chapters, as well does the plot always have an impact on the story that builds up to it. Starting to write a book without a good grasp of what story you want to write will probably just be a time-suck. Both are a produce of intellectual activity and require adequate understanding of the goal in order to streamline the product.
- lukevdp 16y agothe best way to get a developer to work really hard on your project is find one that has worked on similar projects and then pay them enough that they don't have to have other jobs on the go. The biggest reason for a developers work to slow is that they have another job. Ask the developer if they've got other work on, when it's scheduled for. If they are the type to have lots of projects on... Pass or ask that your job be their only job for a specified time. Hiring off shore for a complicated app is simply an exercise in banging your head against the wall. You can give an identical spec to two programmers and have a great app and a piece of crap come back. Hiring offshore is bad because 1. It's harder to communicat. With them due to them not being native English speakers And 2. At least in some countries there's a culture of doing the minimum required to get the job done. Having said that, if you are non technical and have a limited budget, I think the original article is a pretty good way to hire someone in a bad situation.
- ericb 16y agoCould not agree more! Hiring someone who has already done something similar and received a good review is as close to a guarantee that the project will work out as you can get. I have done some That said, once you've used them, I find it is ok to branch out a little and stick with the same person. Still, I generally stick to branching out only a little because I find giving a web app to the "Firefox Extension Guy" might mean you are out of their sweet spot--they may not enjoy web app development which slows them down, or they may not be very proficient at it.
- midnightmonster 16y agoMost freelancers seem to be concerned about being out of the loop if people followed this advice. I can feel that, too: IMO clients almost always benefit from the improvements I make to whatever they were planning. But what I really wonder is how many people even could follow this advice. In the years I've been freelancing I don't think I've ever received even a single feature request that was thought out to the every click, every branch level of detail--let alone an entire application.
- alttab 16y agoI stopped reading at describe every click. This guy is our worst nightmare who has worked with too many talentless hacks.
- davidmathers 16y ago“VERY IMPORTANT: To separate you from the spammers, please write I AM REAL as the first line of your bid. We will delete all bids that do not start with this phrase, since most bidders never read the requirements. Van Halen: Just as a little test, in the technical aspect of the rider, it would say "Article 148: There will be fifteen amperage voltage sockets at twenty-foot spaces, evenly, providing nineteen amperes..." This kind of thing. And article number 126, in the middle of nowhere, was: "There will be no brown M&M's in the backstage area, upon pain of forfeiture of the show, with full compensation." So, when I would walk backstage, if I saw a brown M&M in that bowl ... well, line-check the entire production. Guaranteed you're going to arrive at a technical error. They didn't read the contract. Guaranteed you'd run into a problem. Sometimes it would threaten to just destroy the whole show. Something like, literally, life-threatening. The folks in Pueblo, Colorado, at the university, took the contract rather kinda casual. I came backstage. I found some brown M&M's, I went into full Shakespearean "WHAT is this before me?" ... you know, with the skull in one hand ... and promptly trashed the dressing room. Dumped the buffet, kicked a hole in the door, twelve thousand dollars' worth of fun. The staging sank through their floor. They didn't bother to look at the weight requirements or anything, and this sank through their new flooring and did eighty thousand dollars' worth of damage to the arena floor. The whole thing had to be replaced. It came out in the press that I discovered brown M&M's and did eighty-five thousand dollars' worth of damage to the backstage area. Well, who am I to get in the way of a good rumor? http://www.snopes.com/music/artists/vanhalen.asp http://www.snopes.com/music/artists/vanhalen.asp http://www.thesmokinggun.com/archive/years/2008/1211081vanhalen1.html http://www.thesmokinggun.com/archive/years/2008/1211081vanha...