Current Articles | RSS Feed RSS Feed

The number one developer qualification: Can build from scratch

Posted by Andy Singleton on Thu, Nov 08, 2007 @ 05:24 PM
We received this comment today from a candidate developer: "I'm not interested in build from scratch apps".  That candidacy didn't go very far, because in my world, an ability and an inclination to design and build a software application, by yourself, from scratch, is the single best indicator of success.

If I ask a candidate "have you ever designed and built a piece of software by yourself", and they respond enthusiastically with a description of the project, then it is very likely they will succeed in a trial.  If not, then there is some probability that they lack the ability to design software.  However, it is almost certain that they lack the creative joy that comes from laying down whatever kind of code you want to lay down, and the rush that comes from conjuring something out of formless bits.

Sometimes I see resumes (often from India) that show a developer has worked for years on a series of team projects that involve five or ten team members.  In this case, you often have to go back to some college project to dig up the evidence.  If you find an individual, from scratch project that the candidate is excited about, no matter how old, that is a good sign.  If not, the probability is very small that the candidate will succeed in a distributed team trial.  You might think that being a good team player is a valuable skill, and it is.  It's a great addition to a foundation of development talent.  It might even be a requirement for enterprise work.  But, it can't compensate for a lack of development talent and enthusiasm.

People who like making software, and are good at making software, will do it.  They will do it on their own because they want to make something.

Tags: ,

COMMENTS

I would not argue with you on the achievements described in resumes of potential candidates. However, it is certainly a fact that candidates who are excited about giving a bunch of floating bits some structure have a very big drawvack. They would not be always comfortable following instructions from their boss. When hiring such personnel, one must be careful that off them, there are a certain few who are not in it for a job....they are in the market for a career. They are good...and have an inbuilt thirst to keep climbing higher.

posted @ Thursday, November 08, 2007 11:32 PM by Sashidhar Kokku


I think your point about the joy of development is a good one. At the same time, after several years working with a number of frameworks, I can say that I wouldn't want to work on a 'ground-up' project without a very compelling reason. There are so many "already solved problems", and I'd like to spend my time tackling the fun, interesting and occasionally novel problems that occur on new projects. Solving those problems cleanly often takes time and mental bandwidth -- starting "from scratch" means that a large percentage of your time will be spent building template heavy-lifting code that's been done a million times before.

posted @ Friday, November 09, 2007 10:14 AM by Jeff Eaton


Jeff, I totally agree. Doing good research into tools and frameworks, and using the right tools from other sources, is EXTREMELY important. Just because someone can build from scratch, does not mean that they should do it if they don't have to. And, a person who is good at doing research into "already solved problems" is very valuable to the team. Still, I stand by my observation that if a developer is good, you will find that they have at some time been compelled to build something by themselves. Statistically, it's true. It's an even better, extra positive sign if you investigate this individual project, and find that they did good research and thought about the right tools, libraries, and frameworks. The key interview question when you get to that point is "What would you do differently if you did it again?". If they respond coherently to that question, it's a very positive indicator.

posted @ Friday, November 09, 2007 10:21 AM by Andy Singleton


While I agree, I think you have to approach this with caution. The best part of a developer who frequently builds apps from the ground up, is that they are very good at finding/fixing problems. In getting an application built, there are always hundreds of little things that go wrong before you get a smooth build process going. One who has suffered through that alot will be good at keeping things going. The other major benefit is, these developers will tend to have a higher level of motivation. It takes a lot of motivation to get a project off the ground. The ones who can set their egos aside can be great mentors for junior developers. However, there can be a dark side. Many will prefer to reinvent the wheel rather than use library code. Often they will suffer from NIH syndrome and treat maintaining other's apps with disdain. All in all, you just have to get questions around both sides to see if a candidate will work out.

posted @ Friday, November 09, 2007 12:22 PM by Paul Davis


It depends of developer level and technology where he will need to develop a project from the ground. From my experience with rails, I can tell than I will never participate in developing a rails project from the beginning. I started about 5 or more rails projects and such kind of things are boring to me now, I prefer to let other developers that are new to technology to do this and I could tell them how to do it better. Other case is with new technology that I know a little or nothing about it. It is interesting to me and I will participate with pleasure.

posted @ Saturday, November 10, 2007 3:08 PM by Vitalie Lazu


I agree with Jeff and sympathize with the developer you rejected. There are two kinds of aesthetic pleasure you can get from programming: the elegance of construction and the elegance and quality of the final result. For the first, build-from-scratch is by far the most satisfying approach. For the second, build-from-scratch is just torture. When I provide software to users, I'm always thinking about all the little touches that would make their lives easier, but which I didn't have time to implement. Automatic updates. Better autocomplete. A better widget for finding the right code to enter in a certain field, out of the 15,000 valid codes. Good performance when displaying a dataset that doesn't fit in memory. Ability to export data to a legacy app that has that one capability that will still be needed occasionally for the next year or so. Better usability so they can use the program without it requiring too much of their attention. These are the things that keep me up at night, which is why, in the context of my current work, I would say exactly what your interview candidate said.

posted @ Saturday, November 10, 2007 3:20 PM by David H


I fully agree with Andy Singleton. An ability to think through hundreds and hundreds of scenarios/possibilities is not something for the faint-hearted. And having said that, as he responded to others, learning from others' experience is also valuable, then he/she also becomes an asset when he's flexible to work as a part of team as well.

Also, I think sometimes we (programmers) need to get away from the conventional thought process such as data validation...
it really depends on the nature of app... ok, this is like rambling, stop right here :)

posted @ Saturday, November 10, 2007 4:15 PM by Don


That is what I learn at my studies. Building a project from scratch. Doing requirements analysis, project planning etc. If you can't do that you're not a developer.

posted @ Saturday, November 10, 2007 4:32 PM by Julian


I love building things from scratch - if I was an employer, I'd only hire people who have a passion for their job. There are so many good, intelligent coders out there that are just waiting to be snatched up by someone who will make good use of them. Building your own app from scratch and learning code discipline on your feet is great fun, our first site using the cms/framework that I built should be launching next week sometime and I'm really excited :)

posted @ Saturday, November 10, 2007 5:01 PM by James


Please define "from scratch". I have built many custom PHP apps for various clients, usually because they needed some goofy solution and I couldn't find anything preexisting to do what they needed. However, I almost always make use of a few preexisting classes. Would this still count as "from scratch"? In my experience, sometimes a coder who is unfamiliar with classes will hack together a solution of their own. However, a 10-second search could have saved hours of development time, and hundreds or thousands of dollars for the client. Not exactly a good thing if you ask me.

posted @ Saturday, November 10, 2007 7:26 PM by zaphod


First of all, interest in the field waxes and wanes. I've seen it in myself, and in coworkers. I've known people who were at one time building great software on their own, but since then no longer even use a computer at home, and just see their job as a 9-5 necessary evil. Then there's the young'ns with the attitude "I can't believe I get paid to play with my toys. Kewl." A friend of mine once joked, "it's our job to write the software. It's the users' job to like it." I think that sums it up. Interest in the field, yes; user satisfaction, no. It seems to me that a good software developer has a healthy balance of all 3 of these motivations: * interest in the field * customer satisfaction * job security Your post is just about the first one.

posted @ Sunday, November 11, 2007 10:26 AM by awh


awh has expanded the topic with great merit. I would think * interest in the field * is about WHAT; * customer satisfaction * is For WHOM and * job security * is probably about WHY or MOTIVATION.

Btw, does anyone have some idea/thoughts/techniques on convincing/selling something intangle (benefits not immediate) to target customers? Thanks.

posted @ Sunday, November 11, 2007 11:35 AM by Don


I think I have been misinterpreted. My point is that if you are interviewing a new developer, this is a very good INDICATOR of skill. A good developer will almost always have built an app on his own. A poor developer rarely does this. I did not say that it is a good idea to build from scratch if you don't have to. The "build from scratch" somewhere in the past is a great indicator of talent. It's usually not the right recommendation for the next project. I also did NOT want to say that "build from scratch" means that you don't start with as much existing tools and libraries as you can. My definition of build from scratch is that you did not start with a pre-existing application. You thought it up yourself. However, you should do a lot of research into available tools before starting this project, and use existing frameworks wherever possible. If you don't do that, if you want to waste time building from scratch, rather than get to the new parts of the app, then I don't want to work with you. I want to get to the value-added part as quickly as possible.

posted @ Sunday, November 11, 2007 12:40 PM by Andy Singleton


I guess your last post should clear some misinterpretations regarding this post. This topic is very 'common sense', but is often neglected. It should always be considered when hiring developers.

posted @ Sunday, November 11, 2007 7:18 PM by E


It shouldn't be misunderstood. Let me use an analog of the consideration (not ability in this case) of 30 bucks for 100 apples. Does that mean I'm going to spend 90 bucks in my pocket to buy 300 apples now or tomorrow for that matter? No unless of course some one just told me in secret each apple is going to be worth a million very soon :)

posted @ Sunday, November 11, 2007 8:53 PM by Don


Re: Don's prior comment; selling intangible benefits Whenever I am selling to a client I am either a) going to save them money or b) going to help them earn more money. What sort of intagible benefit are we talking about?

posted @ Sunday, November 11, 2007 10:44 PM by zaphod


yes totally agree with Andy Singleton.But i think building from scratch practically may not happen in projects and it should be part of the developer's personal project to achieve the same.

Thanks
Prashant Jalasutram

posted @ Monday, November 12, 2007 1:38 AM by prashant


To zaphod, on your
"a) going to save them money or b) going to help them earn more money.". I agree on its validity for the business environment, however, they probably won't be applicable to some other demographics, say, the college crowd, and let's use facebook as a case.

Regards

posted @ Monday, November 12, 2007 2:17 PM by Don


Don: what sort of intangible benefits are we talking about? To use the Facebook example, perhaps you are making the case for using a complicated "best practices", whereas the student feels a simpler solution is good enough. In a case like this, I might argue that using best practices will require more work now, but save untold hours of work later, when the Facebook API is altered to include new features. If the issue is security, I would simply link the troublemaker to the latest security exploit, MySQL injection, or MySpace glitch, and then remind them that not only will these security breaches cost time and effort to repair, they will also undermine the faith and credibility of your system.

posted @ Monday, November 12, 2007 2:23 PM by zaphod


This makes me think of a number of things. First off, hiring programmers is a tricky business as so many things are involved. When I have had to do this task I always rely on things that are not specifically about programming. I like to present one or two puzzles to see how the canidate reacts. I always give them the option of taking the puzzles home. This is to see if they have "follow through". If they can take the puzzles home and email me with an answer then I have a reasonable example of their ability to follow through. I also use the puzzles as an indicator of creative thinking. One of the candidates I interviewed and subsequently hired took the puzzle one step further than I had imagined it could be taken. This really got my attention. I also give extra points for those who have the gumption to try the solution while at the interview. I leave the candidate alone for ten minutes and check in with them after that time. If they need more time I give it to them. This process lets me guage if the person is a so called "go - getter". Beyond that I rely on the standard interview questions. During that time I'm looking for attitude, cooperation, team compatibility, etc.
Secondly, as to whether someone can build an app from scrtach or not. If a candidate can't do that they can't begin to do what is required in all the other areas of software development. That being said, the idea of truly building from scratch is ridiculous. You better be pulling from all available libraries and if you don't know what patterns are you haven't been paying attention to the ground swell of intellectual insight that has been coming at us for the past five or more years. Paying attention to what is being talked about, written about and lectured about is absolutely important. This stuff is moving so fast that you can become a "has been" in a matter of years. So, if you think that you can come up with all the terrific ideas that the whole community is coming up with you must be delusional.
Thirdly, I've had the great good fortune for the past two years to be building an app from scratch. It is really fun and I'm getting paid for it. I have been using the Agile methodolgy and trying to deliver some new functionality to the users every week or two at the most. Previously I was the head of application development for a financial serivces company and I had a team of five working on a large application when the opportunity to join a smaller company and assume total responsibility for the architecture and the coding of an application came my way. I jumped at the chance.

Lastly here is one of the puzzles that I have used in the interview:

You've been invited to go on a camping trip in the woods with 30 of your closest buddies.

You pile into your cars and drive to the cabin. The next morning, everyone gets up and decides that Cookie is going to make homemade panckaes for all 30 of you. But, he needs exactly two gallons of water.

You are sent to the well to fetch the two gallons. However, you have no measuring device. When you get to the well, you discover there are two jugs there. One says 13 gallons and the other says 7 gallons. Your job, if you choose to accept it, is to come back with exactly two gallons of water.

Can you make two trips to the well? No. You are allowed only one trip.

posted @ Monday, November 12, 2007 5:39 PM by Franko


to zaphod,
Let me first say this, I took a peek at your site, I like its design, did you do it yourself?
Now, on "intangle benefits", imho, stock investment may be considered as one, its benefits are not up front, vs. "tangle benefits" like buying a bunch of apples and you can eat them, taste them right away. And I think in general it's easier to sell "tangles" than "intangles", and your thoughts? Sorry, Andy, we're are deviating your "COURSE" :)


posted @ Monday, November 12, 2007 9:00 PM by Don


Don: thanks for the kind words; sadly, I don't deserve any credit. It is a WordPress theme called "subtle", available here: http://www.gluedideas.com/ I would also agree that tangible benefits are an easier sell. I also like Franko's riddle above. 13-7=5; 7-5=2. Am I hired? :-)

posted @ Monday, November 12, 2007 9:04 PM by zaphod


Zaphod:You've got the math correct but just like coding the devil is in the details. What's the sequence of filling the two containers? You're still in the running. By the way the site looks clean and handsome.

posted @ Tuesday, November 13, 2007 9:12 AM by Franko


13-7=6, not 5 Fill the 7 gal. bucket, empty it into the 13 gal. Fill the 7 gal. bucked, pour 6 gal. into the 13 gal., filling it, leaving i gal. in the 7 gal. bucket. Empty the 13 gal. bucket, pour the 1 gal. from the 7 gal. bucket into it. Fill the 7 gal. bucket, pour it into the 13 gal. bucket, leaving 8 gal. in it. Fill the 7 gal. bucket, pour 5 gal. into the 13 gal. bucket, filling it and leaving 2 gal. in the gal. bucket.

posted @ Tuesday, November 13, 2007 2:46 PM by Bill


Yeah - that math was not correct. Don't hire me - I can't pay attention to details.
Bill has the sequence correct. I would consider him a candidate.
It's a good tool but only a small part of the difficult process of choosing the right candidate.

posted @ Tuesday, November 13, 2007 2:54 PM by Franko


D'OH! I guess I'm off the unemployment line.

posted @ Tuesday, November 13, 2007 2:56 PM by zaphod


..

posted @ Tuesday, April 29, 2008 9:00 PM by themestory


Whaaaaat... no one person can "build from scratch" not with the size of software projects today. If you're talking about very small projects then everyone has built from scratch unless they skipped their HelloWorld tutorial in CS101. Then value would you get out of it if it were small? Even then you might still be using someone else's software library.

posted @ Tuesday, November 18, 2008 6:34 PM by Kareem


"13-7=5; 7-5=2. Am I hired?" 
 
Zaphod answered the question very well and concisely. If you know enough to ask the question, you know enough to recognize the correct solution. I'd hate to work for someone that didn't know enough to recognize a correct solution.

posted @ Thursday, December 11, 2008 10:03 PM by John Thomas


Post Comment
Name
 *
Email
 *
Website (optional)
Comment
 *

Allowed tags: <a> link, <b> bold, <i> italics

Receive email when someone replies.

About This Blog

Author Andy Singleton writes about accelerating software development, distributed agile teams, and Assembla.com services.

Subscribe by Email

Your email: