Fog Creek Software
Discussion Board




trust new grad with major module or contract out?

We are a team of 4 in an engineering firm working on CAD software development.We have a deadline for shipping in April of a large code base (source and binaries) of around 200KLOC, including 50KLOC of new development. 3 developers are doing 85% of the total design, coding.There is another module, that is a very important part of the system, around roughly 12KLOC of work, estimated at around 3 months for the 4th member, a new grad.
We are a C++ shop, and the new grad who is the 4th member of our team has done mostly Java.He has joined 3-4 months back, so not really familar with the code base. We need him to implement the module correctly with a low bug count.
A senior dev will give directions and some specific design ideas, but ultimately he is responsible for the code.
My question is would you completely trust him to do this work knowing -

1. he has limited C++ experience
2. Will have to implement difficult 3D algorithms with some imagination
3. Will have to provide farly good production level code.
4. His module is a vital part of the system

The new grad lookes perfectly capable, but we assume it's a risk, would you contract out to somebody at a much higher rate? In that case the new grad would be redundant and we would have to lay him off.

Rodger
Thursday, January 15, 2004

1. How well spec'ed out is his module?
2. How clean, maintainable, and bug-free is his Java code?
3. Will it require that he use features in C++ that are not present in Java (i.e., multiple inheritence, templates).
4. Does he grok pointers?
5. Will he have a guru on-hand to guide him through learning the STL?
6. Are you looking to keep him as a employee in the long run?

If the answers are "good", "fairly", "not really, only once in a while", "yes", and "yes", and "we're thinking about it", then I'd encourage you to keep him on board.

Alyosha`
Thursday, January 15, 2004

12KLOC with 3 months until you ship? Key graphics module needing unproven algorithms yet to be designed? Somebody who barely knows C++? Not going to happen, IMO... I don't think any contractor is going to finish it in that timeframe, either, unless they've already done something extremely similar.

Ron
Thursday, January 15, 2004

Just to give a few more details about the new grad -

1. the algorithms are not unproven, but require good understanding of higer level maths.I think his math skills are upto the mark
2. We have our own libraries for STL like containers, think he can pick it up
3. Is 12KLOC to much to expect in 3 months?
4. the new grad has some good solid experience in Java before starting in co-ops, but how to judge his C++ aptitude, pointers etc..?
5. the design is spec'd enough in the sense that a basic framework is there, and he'd have to convert hand drawn 3D drawings as spec to 3D ones on the screen model.

Rodger
Thursday, January 15, 2004

If you really mean "ship" in 3 months (and not just a code freeze and start of testing), I think it's extremely aggressive no matter who's doing it... something of that scope sounds like a month or so of integration and another month at least of testing and debugging. That leaves only a month for what you estimate is a 3 month task.

It's not the kid's fault, if he's skilled in math and 3D algorithms they're hard to find and I think you should hold onto him. But I'd say prepare your customer or higher ups for the delay...

Ron
Thursday, January 15, 2004

Doesn't sound extremely difficult. 

Are you using DirectX or OpenGL routines or do you have your own matrix/quaternion routines?

You say he has to convert a hand drawn model on a sheet of paper to a 3D model?  I guess I don't understand why you would do that in code?  If you did it in code it would be easiest to use primitives that are easily created via code like a sphere, cube, torus etc etc..  But wouldn't you create this in a 3D modeling program and then export it to a .X format or convert the 3ds file to your own format.  Especially if it's a complex shape.

I would say give 'em a go at it.


Thursday, January 15, 2004

" Is 12KLOC to much to expect in 3 months?"

wow.  for 1 person?

3 months = (assuming 4 weeks a month)  12 working weeks = 60 working days (assuming 5 days/week) = 480 working hours (assuming 8 hour day)

12000/480 = 25 LOC/day

whats the industry average again? I have an idea it was substantialy lower than that...

FullNameRequired
Thursday, January 15, 2004

LOL oops, I mean 12000/480 = 25 LOC/hour = 200 LOC/day

I think you are dead in the water. (personally Id hire the young guy, gives you someone to blame when the project crashes and burns...)

FullNameRequired
Thursday, January 15, 2004

We have a high level wrapper library for OpenGL, he has to use that, the model to be developed is not a static one, it can change dynamically,and we cannot use another package due to integration issues.

Rodger
Thursday, January 15, 2004

I'm trying to figure out how they know it's 12 kLOC...

Philo

Philo
Thursday, January 15, 2004

12 KLOC with comments, new lines.
Actual lines of code would be around 6 KLOC

Rodger
Thursday, January 15, 2004

which makes it 100LOC/day

still sounds pretty high to me...although I cant remember the industry average so I may be well off base.

FullNameRequired
Thursday, January 15, 2004

the industry average is 3 lines of code per day.

100 LOC of code per day is 3 singlespaced pages of code.

I'm with philo, I don't understand how the LOC is known in advance. 

I seriously doubt anyone is going to produce 100 LOC per day coming fresh into a project.


Thursday, January 15, 2004

Keep it in house with frequent code reviews.

_
Thursday, January 15, 2004

<looks around happily>

so we're agreed then?  he should move this new guy into the project, everyone should work like billy-oh and when its not going to be ready on time the young chap should be used as the foil for the blame.

a sidebenefit would be the reason for the time it does take to finish. "sorry, we underestimated how long it would take to massage his code to work..going to be another 3 months.."

seriously, using this young guy as a fall guy is a gift that just keeps giving!

FullNameRequired
Thursday, January 15, 2004

Have him add a simple Help/About dialog, then when he's done tell him a bunch of the other menu functions now seem to be broken, so could he please make sure they're all working by Monday morning, mmmmmm-kay?

Cubist
Thursday, January 15, 2004

Even though LOC is a completely bogus metric, 12 KLOC in 3 months seems a feat for anyone, especially if they are difficult LOC.

Maybe the real question is whether he should accept working with YOU guys, whether he should trust in YOUR sanity ... =-)

Alyosha`
Thursday, January 15, 2004

I would like to know why a small engineering firm that specializes in CAD software development and uses the C++ programming language bothered hiring a wet behind the ears Java programmer!

If it was because you guys thought he has a lot of potential then someone needs to mentor him! Give him the module and make sure that your group performs frequent design and/or code reviews.

One Programmer's Opinion
Thursday, January 15, 2004

Aloysha... I'm on a product team of four, and we've done around 300k LOC in the last 11 months.  I'm not bragging, i'm just saying I don't think 12k in 3 months is that tough for someone with experience. 

vince
Thursday, January 15, 2004

"we've done around 300k LOC in the last 11 months."

7000LOC/month each (or thereabouts)

thats not a bad effort.  <g> Id love to know what my measurement is, maybe I should go and count them all...

FullNameRequired
Thursday, January 15, 2004

thats 31 lines of code an hour @ 7000/month

(assuming 8 hour day and 4 week month)

reduced to that it sounds easily doable...I suspect that the hard part comes in keeping it up.

FullNameRequired
Thursday, January 15, 2004

As a recent new grad, I think it's doable.

I'm not sure with your situation, but it sounds like the application is highly specialized, and you may have trouble contracting it out to someone competent, unless you already know somebody.

I worked for a year, and with another new grad who had been there only for a few months, did some major kernel work in a month. Neither of us had every really done such work before.

The new grad is young, most likely without a family. Just stress that it has to be done. Encourage him by giving him an air mattress. :-P

As my systems software professor used to describe his class, "baptism by fire!"

SG
Thursday, January 15, 2004

"baptism by fire!"


there are other terms which might be applied to employers taking that particular approach.

FullNameRequired
Thursday, January 15, 2004

It sounds plausible if he's good enough, but for one thing: C++.

If it was in Java, I'd think it was a reasonable bet, but it's not. C++ is just too damn easy to really screw things up badly with, if you've got someone who doesn't know what they're doing.

With the schedule that you've set, there isn't going to be time for him to learn what he's doing. So he's going to pump out what is likely to be very brittle code, at best.

Sum Dum Gai
Thursday, January 15, 2004

I'm with the five people who have the sense to point out that 100 or 200 lines/day of highly algorithmic, math oriented brand new freshly written code, fully debugged and ready to ship is not only not going to happen with a new guy who knows nothing about the project, but isn't going to happen if you hire Don Knuth and pay him $7500/hr.

So it sounds like you're just setting him up to fail and be the fall guy. Gotta wonder what the point is.

Also gotta wonder if you have much experience coding yourself. Surely you realize these numbers are not just unrealistic but delusional.

Dennis Atkins
Thursday, January 15, 2004

Oh, and don't forget to pen in to your calculator to massively change the requirements at the 1.5 and 2.25 months out point, while insisting that the original estimate must be maintained or you'll put him on teh street with a bad reference.

It goes without saying that the new guy will be put to work on a 6 year old computer sitting on a folding table in the center of the sales call center.

Dennis Atkins
Thursday, January 15, 2004

Looks like another graduate will soon realize he picked the wrong career.

goodbye cruel world
Friday, January 16, 2004

So if this was a web app, do you think it would be easier on the new grad, than math work?

Rodger
Friday, January 16, 2004

I find it ammusing that if someone suggested using lines of code as a performance metric, most people here would tell them how foolish the idea is. "You can't use lines of code to measure productivity!" they'd say.

Yet they're happy to proclaim how impossible it is for anyone to write that much code, based purely on a LOC estimate!

Surely people realise that sometimes you can write 12k lines of code in a few hours - if the problem is suitable for code generation. Other times when the problem is tracking down a particuarly tricky bug, you might write zero lines of (production) code in a month.

Without knowing exactly what those 12k lines of code actually are (other than some vague idea that they're major and mathematical), I think it's foolish to say that Knuth, or any other "legend" in our field would be unable to do it. I can certainly think of circumstances where a new graduate could do it.

Sum Dum Gai
Friday, January 16, 2004

Not going to happen, even with a veteran C++ programmer.

christopher baus (www.baus.net)
Friday, January 16, 2004

sounds like a job for Pair Programming

apw
Friday, January 16, 2004


1) Where did the 12K LOC estimate come from?

2) Every time I've even see a "new grad with little C++ experience" thrown in a c++ project, it has been a buggy mess that, 3 years later, the guy is explaining as "...you have to understand, that was the first thing I worked on when I was hired in here ... "

He might write it in the 3 months, but he'll spend at least that much additional time fixing it.

I'm afraid asking him to do write this is setting him up to fail.  JMHO ...

Matt H.
Friday, January 16, 2004

OK, he's got the smarts, but not the knowledge of the code base.  How's a higher-paid contractor going to change that part of the equation?

If you're planning to keep the new grad, give him this work.  If you're planning for the code to be good, and for it to blend nicely with your codebase, the senior developer will have to work closely with him for a big chunk of time up front... and that means that the 3 months is not reasonable.  At least, not without a lot of overtime.

van pelt
Friday, January 16, 2004

Ship in 3 months?! Plan on being done in one month. Another month for being late on the first month and the last month for testing/bugfixing/integration/installation, etc.

Maybe you have programmers that can write bugfree code at 200 lines per day, but they don't exist here. We have a hard enough time getting the requirements 100% right the first time, much less the final product.

pdq
Friday, January 16, 2004

We have a base of about 2 million lines of C++ Win32/MFC code.  We're lucky if someone coming in can do _anything_ productive for 2 months, with it taking about 8 months before they really know what's what.  And we're a boring accounting app without any integral calculus.

You can write a lot of code quickly if it only has to "kinda sorta work" and you have one developer on an isolated module.  Otherwise, good luck...

Bill Carlson
Friday, January 16, 2004

I've found that the rate at which a new developer gains competency is substantially limited by the current skill of the experienced developers he's working with; stay with me here, I've got a non-obvious point.

In the several years since I started at my current job the group of programmers I work with have collectively improved their C++ skill by leaps and bounds. Now, we understand RAII, good class design, physical structure (see the book by Lakos), refactoring and numerous other topics much better than before.

When a new programmer starts with us now, he/she can advance much more quickly, thanks to learning from more advanced instructors. So, one factor that will heavily influence the newbie's productivity is the active involvement of experienced developers in his learning; this requires (1) the existing code to be a good example; (2) senior developers being available to answer questions, and take the time to give good answers; and (3) having every line of code the newbie writes reviewed by one of the senior developers, before it is checked in to source control (of course, you should do that for all developers, not just new ones).

If you don't have all of these factors, there's no chance the newbie will be productive quickly; if you do, then maybe he will. Of course, you should ignore the 3-month deadline when deciding whether to contract or use your new hire, since you know it will slip anyway. I'm not kidding.

Exception guy
Friday, January 16, 2004

I have a sneaky suspicion that 300 KLOC is cut and paste code.  I can't say for certain cause I don't know you or how much experience you have.  But then again, I've met people I *thought* were good programmers until I actually looked at their code, and it was completely cut and paste and thousand-line functions.  I was actually doubly impressed that they could handicap themselves like that and actually put out a decent program!

You know that saying that the best programmers are 10x more productive than the worse ones?  I have a collorary that states that the worst programmers write 10x as much code as a good programmer.  In fact the reason they're unproductive is that they write too much code.

So yeah, hire the college kid, he'll probably solve the problem you've mentioned in 2KLOC, and you'll be shocked.

Alyosha`
Friday, January 16, 2004

"We have our own libraries for STL-like containers ..."

Eeeek.  Just noticed this.

You know what they say ... most attempts to reinvent the wheel end up with the moral equalivalent of a irregular quadrilateral with an offset axle.

Why don't you use the STL?

Alyosha`
Friday, January 16, 2004

We inherited a legacy code base from the 90's, that has some STL like containers like vectors.They seem to work well and are heavily tested, often we have to derive classes based on these containers, it's unsafe to derive from STL containers right?
We have a functioning code base for the last 7 years, and don't really need to use STL, but would if required.

Rodger
Friday, January 16, 2004

"I'm afraid asking him to do write this is setting him up to fail.  JMHO ... "

...and now we know why the poster's name is "Rodger"...

[g,d,r]

Philo

Philo
Saturday, January 17, 2004

A past employer was in phenominal growth and projects needed to be done.  I remember a situation where a recent college grad (I'll call him Bill), a great guy in both personality and intellect, was tasked with coding and unit testing a C++ application from scratch.

Bill finished the implementation on time and all functionality worked according to requirement and system engineering contraints.  However, the code was a bloody mess; even within an ISO environment.  Thus with a code review spelling out disaster, the rush-rush of immediate marketing need pushed it out the door.  Hence, an ongoing maintenace nightmare to say the least.  So I believe there is something to say about experience.  Or someone without experience needs to be mentored - not cut loose.

IMHO, a team of software developers should be put together like a football team.  Not everyone should be the quarterback.  You need a well rounded team in experience and skill set to pull off the whole enchilada.

jimmy
Friday, February 13, 2004

*  Recent Topics

*  Fog Creek Home