.NET Forum / Languages / C# / August 2007
Questions about hiring .NET developer
|
|
Thread rating:  |
egaskill@gmail.com - 24 Aug 2007 19:16 GMT So we have a fairly small internal company application written in PHP, it interacts with a MySQL DB and all it really does is create new orders, edit existing orders, and prints reports based on different variables in data. I don't know why this project has turned into such a huge ordeal, but every developer we've hired so far to take care of this project has come up short on the deadlines they themselves have put forth. The last guy we hired came in and started rewriting the PHP site in .NET and we have since had to let him go.
Now, we aren't a huge company, we have 35 employees total and maybe 10 of which use the company intranet simultaneously, so it's not really in need of any crazy layers yet. I've been interviewing new developers for this, and they all seem to say "Oh this is a really small project", but I'm just worried (mainly for the sake of my job) about hiring another guy that says that then wont be able to finish it. I need to know if there's anyway to get a good estimate of time on how long it should take to finish the almost complete new .NET intranet site and how to pick out a guy that isn't going to screw us over again (is all I have to go by references and qualifications?).
Also, any tips on managing a developer would be appreciated.
Peter Bromberg [C# MVP] - 24 Aug 2007 19:40 GMT If I were you, I'd consider spending less time listening to potential hires telling you all about what they can do, and instead, ask them to show you real examples of similar projects that they HAVE ALREADY DONE. -- Cheers, Peter Recursion: see Recursion site: http://www.eggheadcafe.com unBlog: http://petesbloggerama.blogspot.com BlogMetaFinder: http://www.blogmetafinder.com
> So we have a fairly small internal company application written in PHP, > it interacts with a MySQL DB and all it really does is create new [quoted text clipped - 17 lines] > > Also, any tips on managing a developer would be appreciated. Smithers - 24 Aug 2007 20:26 GMT RE: << I need to know if there's anyway to get a good estimate of time on how long it should take to finish the almost complete new .NET intranet site >>
You should not make any assumptions about the state of the new .NET intranet site. If you think that it is "almost complete" which is what you wrote, then you are likely setting yourself up to get screwed again. Here's why: chances are that you have been hiring incompetent developers. If you finally get someone in there who knows what he/she is doing, then he/she will almost certainly want to start over from scratch and get it right from the outset... rather than building on a bad foundation. Furthermore, if you hire someone who is very good, and he/she tells you that he/she should start over, then let that happen. Odds are that they will finish much more quickly than if they were required to "leverage" the crappy prior work, and you'll have a better product in the end.
Finally, about estimates: creating good estimates requires YOU [the customer/end user] to do a good job of communicating the requirements clearly and decidedly. Whenever you change the requirements (which happens all the time), then any prior estimates automaticaly become invalid. This is such a typical scenario: You ask me how long I'll take to accomplish X, Y, and Z. I tell you N hours. Then you later modify Z or add new requirement K. You then expect N hours to still hold true. Sounds stupid doesn't it? Happens all the time.
Sorry if all of the above sounds negative or even rediculous... but it's what I've seen for the past 14+ years as an independent consultant. I've made a TON of money over that period cleaning up after screw-ups. Here are a few lessons/rules, heck "Laws" of IS hiring that I believe to be totally true. You should pay attention.
You get what you pay for. It's actually worse than that: The cheaper-by-the-hour programmer is BY FAR the most expensive person you could hire. Get a screw-up in there at $20/hr and watch him fritter away 100 hours on a project and never quite gets it right (i.e. never *finishes* the job). Then hire someone truly competent at $80/hr and watch him/her *finish* the same project in 15 hours. Just with those numbers alone the competent developer is DONE at $1200 AND sooner than the screw-up who has cost you $2000 and STILL isn't done! Yes - those numbers are realistic. The costs of the screw-up go WAY UP beyond his/her immediate costs if their crappy product gets into production where it will likely perform slowly and suffer data integrity problems. You then have to add [to the total costs of the screw-up] the lost productivity of your employees. And, if your data is truly important, then you will eventually need to hire a competent developer to come in and redo everything from scratch. But you won't get away for that initial 15 hours because; rather than starting out at "ground zero", you are starting out the competent developer somewhere BELOW ground zero. That is, you would then have to pay your competent developer to [at least] clean up the problemmatic legacy data in addition to creating the replacement solution.
Let's review Option 1 - hire competent developer initially: Cost 15 hours - DONE (and with a good and reliable solution)
Option 2 - hire a "junior programmer" (i.e., *guaranteed* to be a screw-up) Costs: 100 hours (the point at which you stop the bleeding) project still not done + Lost productivity costs (if the crappy project made it into production) + Data cleanup effort (at least) on the part of the replacement competent programmer + New project from scratch (if done by a competent developer would be FAR cheaper than trying to "leverage" a pile of crap left behind by the screw-up (I mean junior programmer).
Again, this is what goes on ALL the time. Given your post here, I suspect you already know what I'm talking about.
About your hiring decision (to finally answer your specific question): There is no magic bullet for you. But you might consider doing a variation of a scenario I went into in 1999. I was interviewed for a contract position with a Big Bank. The group in the bank was nervous in a way like you apparently are. Same scenario. They had recently gotten rid of the 2nd person hired to extend an existing system in some very specific ways. They didn't want to get screwed again. So after I went through 4 separate interviews (from technical to "is this guy a good fit for the team" sorts), I was offered a TWO WEEK gig. Specifically, they told me that there were two known bugs in the production system. I had two weeks to (1) find both bugs, (2) satisfactorily remediate each, and in a way that would pass technical review (with flying colors) with other developers on staff. IF I was able to do that, then I was to get a 3-month contract to extend the system per the new requirements that the prior two developers had choked on.
You could do someting like that. Maybe not as intense, but make 'em perform before getting too far with them.
-HTH
BTW: Prior to getting my interview with Big Bank, I had one headhunter tell me I was too *unqualified* to work for Big Bank and that I would need more years on my resume. Another headhunter got met the interview. After the 2-week gig I nailed the 3-month contract and ultimately waltzed out of Big Bank nearly 6 years later... serving in the role as "technical lead" for the last 4+ years of my time there. Lesson for you: What's in a resume can be meaningless... whether it makes the candidate look overly qualified or overly green. The upshot: Make 'em perform - actually do something and evaluate that result.
-S
> So we have a fairly small internal company application written in PHP, > it interacts with a MySQL DB and all it really does is create new [quoted text clipped - 17 lines] > > Also, any tips on managing a developer would be appreciated. Larry Smith - 24 Aug 2007 22:01 GMT > << I need to know if there's anyway to get a good estimate of time on how > long it should take to finish the almost complete new .NET intranet site [quoted text clipped - 123 lines] > overly green. The upshot: Make 'em perform - actually do something and > evaluate that result. The sad reality is that most developers in the real world are lousy at what they do. The reasons run deep but that's another issue. While you improve your chances of finding a better developer if they have the title "senior" next to their name (and can back it up), the fact is that even most senior developers aren't very good (and frequently worse). Finding a developer who really has the breadth of knowledge and skills to write polished code is a crapshoot. There aren't many around and chances are you won't even know it until after you hire them (or in some organizations they may already be there but are never recognized). I completely agree with your point about their value however. If you do find one then they're well worth the money (assuming management truly understands much $ they can save over the course of a project's life - alas this too is rare however).
Smithers - 24 Aug 2007 22:23 GMT <snip>
> The sad reality is that most developers in the real world are lousy at > what they do. The reasons run deep but that's another issue. While you [quoted text clipped - 9 lines] > can save over the course of a project's life - alas this too is rare > however). RE: << There aren't many around and chances are you won't even know it until after you hire them >>
Yes - thus the brilliance, in retrospect, of Big Bank when they signed me for 2 weeks (with no guarantees for anything beyond that), then for 3 months before going for the longer-term renewals. Such an approach lets an employer limit exposure while granting the contractor the opportunity to prove him/herself.
RE: << the fact is that even most senior developers aren't very good >>
Spot on with that. I never let anyone call me "senior" even when I lead a team. The fact is the term "senior" is meaningless (or possibly accurate in only very limited scopes, and even then for limited duration). "Technical lead" is more reasonable because it describes a role and responsibilities - as opposed to some implication higher level of knowledge (which "senior" packs with it).
But we digress...
-S
AlexS - 24 Aug 2007 22:51 GMT I believe it doesn't matter much is the guy title "senior" or "lead". You can get heavy metal in both cases.
But I second opinion that if you're not sure, try to hire for short period (even part-time) and see what the guy can deliver. I saw many people who were pretty good for first 2 weeks and became pretty bad after they started to assume they will stay on the team
> <snip> > [quoted text clipped - 35 lines] > > -S Larry Smith - 24 Aug 2007 23:50 GMT >> The sad reality is that most developers in the real world are lousy at >> what they do. The reasons run deep but that's another issue. While you [quoted text clipped - 29 lines] > responsibilities - as opposed to some implication higher level of > knowledge (which "senior" packs with it). Yes, in fact, I'm even burned out from an entire career dealing with the (often gross) incompetency of others. Most "senior" developers probably think the same thing but it's usually part of the same mentality that compels most drivers to think that every other driver is an idiot. The irony is usually enough to choke on.
Smithers - 25 Aug 2007 00:20 GMT <snip>
> Yes, in fact, I'm even burned out from an entire career dealing with the > (often gross) incompetency of others. Most "senior" developers probably > think the same thing but it's usually part of the same mentality that > compels most drivers to think that every other driver is an idiot. The > irony is usually enough to choke on. RE: << most drivers to think that every other driver is an idiot >>
Except that according to [the great] George Carlin: "have you ever noticed that everyone who is driving slower than you is an idiot while everyone driving faster than you is a maniac....?
It's a wonder that we get anywhere with all those idiots and maniacs driving around."
-S
Larry Smith - 25 Aug 2007 00:35 GMT >> Yes, in fact, I'm even burned out from an entire career dealing with the >> (often gross) incompetency of others. Most "senior" developers probably [quoted text clipped - 10 lines] > while > everyone driving faster than you is a maniac....?
> It's a wonder that we get anywhere with all those idiots and maniacs > driving around." In particular because we're so busy muttering the seven words you can't say on television.
Peter Duniho - 24 Aug 2007 22:52 GMT > The sad reality is that most developers in the real world are lousy at what > they do. The reasons run deep but that's another issue. It is relevant, though.
A friend of my father's, long ago, proclaimed the opinion that "80% of everyone are incompetent". Sadly, while I can't vouch for the exact percentage, experience has shown the general sentiment behind the claim to be true.
It's hard to find good help. Whether you're hiring programmers or painters.
That said, I think there are a number of good points in what Smithers wrote. Paying an expensive, well-qualified professional is often cheaper in the long run, and I also agree that it would be wise to not be too attached to any system partially implemented (even if nearly completed) by someone who eventually needed to be fired.
And of course, don't forget that if it's hard to find someone qualified to write the code, it is doubly difficult to find someone who can produce an accurate estimate of what it will cost to do so. You're dealing with two completely independent competencies here, and there's no guarantee that someone competent at one is competent at the other (though, I admit it's hard for someone to be competent at estimating if they aren't competent at design and coding :) ).
Pete
Larry Smith - 24 Aug 2007 23:38 GMT >> The sad reality is that most developers in the real world are lousy at >> what they do. The reasons run deep but that's another issue. [quoted text clipped - 5 lines] > percentage, experience has shown the general sentiment behind the claim to > be true. Maybe I know your dad then because I've expressed the same exact sentiment many times (seen using that figure). I'm not sure what the actual figure really is but IMO the world's majority depends on the minority to actually make things run. It reminds of a situation back in the early 90s when I was developing (contracting) for a large government run power utility. With tens of thousands of employees, the average fulltime salary at this utility actually exceeded 50K - and we're talking 17 years ago. This was unsustainable as well as ridiculous so the gov't eventually forced mass layoffs and early retirement packages onto an angry workforce. After thousands left however, the lights still came on every night which begged the question, what were all those people actually doing.
> It's hard to find good help. Whether you're hiring programmers or > painters. [quoted text clipped - 12 lines] > hard for someone to be competent at estimating if they aren't competent at > design and coding :) ). I basically agree with what you're saying. The whole business of writing software is a very complicated one. Estimating the cost is also extremely unreliable for various reasons not the least of which is that you can't get a grip on the application itself until you're actually writing it. So how can anyone provide a reasonable estimate ahead of time. In most cases you can't and those who think otherwise are usually naive. The best you can usually do is try to figure out the worse-case scenario and base it on that. By far the most important thing a company should do however (which seems to be the theme of this thread now) is to find skilled developers from the outset. This is very difficult but it's absolutely critical for the long-term success of any project. Otherwise your company will bleed large sums of money for years and possibly die from hemmorhaging.
fugitiveguy@excite.com - 26 Aug 2007 13:58 GMT >Also, any tips on managing a developer would be appreciated. It could be bad luck and a series of bad developers, but I think that this is the root of your problem with the project.
There is no magic formula for managing developers, but if you think of them as skilled craftspeople who are being paid to do a job you'll go far.
Developers are not management and will not share in the huge bonuses that management gives themselves. A developer will get paid the same if the product is a moderate success or a huge success. A side effect of this is that a developer is not loyal to you or the company and will leave for more money at the first opportunity.
There is nothing wrong with this situation, I'm sure your company has many workers in other areas who are exactly the same and nobody loses sleep over it. As a manager, you have to protect the company from employees who leave before a project is finished.
The way that you do this is with requirements and schedules.
I'm not advocating micro management, but you should have a detailed spec showing the developer what the final product is supposed to look like and what functionality it should have. If you give a developer a 1 line spec, then you should not be surprised that the developer's vision and your vision don't match.
You need to schedule deliverables. The schedule should be set up with the input of the developer. Break the project up into its components. Things like database schema, screens, areas of functionality. That way if the developer leaves in mid project you don't have half of a project that doesn't work, you have the basis of a whole project and the next developer can come in and add to it.
I saw that one replier advised you, "if the new developer wants to rewrite the program from scratch, let them". I hope that raised huge red flags with you. This is the classic developer response to any existing project. It is the most fun for the devleoper, but it is also the most expensive for the company.
You need to look at the state of the project, break it up into components, and determine what works and what needs to be redone. And then let the developer go from there.
pedrito - 26 Aug 2007 14:54 GMT [snip]
> I saw that one replier advised you, "if the new developer wants to > rewrite the program from scratch, let them". I hope that raised huge [quoted text clipped - 5 lines] > components, and determine what works and what needs to be redone. And > then let the developer go from there. Sorry, but I disagree. A "professional" developer isn't going to think of it in terms of being fun or not fun. He's going to think of it in terms of what's the best way to get to the end. If the starting point is a bunch of messy code, then the end point may be reached quicker by rewriting from scratch.
Having inherited some really bad code in the past, I know for a fact that sometimes rewriting from scratch is the best ("best" being defined as, gets me to a working product the fastest) solution. Without seeing what's already there, this is all speculation, but a good developer will know which way is the best and the hiring company ought to respect that. But they can only do that if they trust the developer, and it's hard to trust someone who just walked in the door, so it's a bit of a catch 22 where they are right now.
Even stuff I've written for my own uses, if my requirements change significantly, sometimes it requires a complete rewrite, or virtually complete rewrite. I don't think of it in terms of what's more fun, though. I think of it in terms of what's going to get me to the product I need the fastest. Fun for me is getting it done so I can move on to the next thing.
What definitely isn't fun is spending weeks on end trying to adapt a mess of code to do some simple little thing that ends up breaking the whole thing because there's no adaptability in the code or the logic is just so fouled up and hard to follow that small changes break things.
You can waste a great deal of time trying to patch this code together with band-aids, but sometimes it's a lot faster just to write it over from scratch.
ajk - 26 Aug 2007 16:04 GMT >[snip] >> I saw that one replier advised you, "if the new developer wants to [quoted text clipped - 12 lines] >messy code, then the end point may be reached quicker by rewriting from >scratch. actually fun *is* a factor - the reason for me saying that is that IMHO there are different types of programmers out there - the ones who love programming because it is great fun (above average programmers) and the ones who do it just to earn a living because they heard it pays good money to be a developer. In order to keep a developer motivated it is important with a fun factor.
>Having inherited some really bad code in the past, I know for a fact that >sometimes rewriting from scratch is the best ("best" being defined as, gets [quoted text clipped - 3 lines] >that if they trust the developer, and it's hard to trust someone who just >walked in the door, so it's a bit of a catch 22 where they are right now. it depends a bit on code size but overall it is a bad idea to rewrite code from scratch. the reason for this is that a project that has probably been run over many years and as such has been tested that many years. when you rewrite something from scratch you are basically throwing all that effort away creating untested code again - in addition it is *very* difficult to assure that all the functionality is retained in the new "version". in my experience it is better to change little by little by refactoring small parts at a time, not by doing "File/New Project".
>Even stuff I've written for my own uses, if my requirements change >significantly, sometimes it requires a complete rewrite, or virtually >complete rewrite. I don't think of it in terms of what's more fun, though. I >think of it in terms of what's going to get me to the product I need the >fastest. Fun for me is getting it done so I can move on to the next thing. an employer / customer don't give much about how programs look inside, they don't care if code is elegant or very object oriented, what they care about is new features. if you tell a customer that you need to wait an extra couple of months just because you wanna do it from scratch since the code is so messy he probably will not be very pleased.
>What definitely isn't fun is spending weeks on end trying to adapt a mess of >code to do some simple little thing that ends up breaking the whole thing >because there's no adaptability in the code or the logic is just so fouled >up and hard to follow that small changes break things. i hear you, but that is life as a programmer, we don't often choose what are supposed to program. we often get a lump of shitty code and gotta do something about it.
>You can waste a great deal of time trying to patch this code together with >band-aids, but sometimes it's a lot faster just to write it over from >scratch. gut feeling yes, but in practice no. a customer doesn't pay extra for this, he pays for new features. rewriting emulating the same functionality is never possible - or maybe in some open source projects where money and time don't matter.
/ajk
Smithers - 26 Aug 2007 16:37 GMT >>Also, any tips on managing a developer would be appreciated. > [quoted text clipped - 40 lines] > components, and determine what works and what needs to be redone. And > then let the developer go from there. Hi Fugutiveguy,
I thought about letting this go - but ...
RE: << A side effect of this is that a developer is not loyal to you or the company and will leave for more money at the first opportunity. >>
This is very cynical about human nature. While such cynicism is frequenly warrented, at least give people a chance. If you treat someone with respect and with fairness (including and beyond $ compensation), then you will likely gain their loyalty. If you under pay them as compared to their market rate (given region, experience, skillset, and market demand), then you can expect that they would leave sooner rather than later - but that's your fault for being cheap and not necessarily greed on the part of the developer.
RE: << I saw that one replier advised you, "if the new developer wants to rewrite the program from scratch, let them". I hope that raised huge red flags with you. This is the classic developer response to any existing project. It is the most fun for the devleoper, but it is also the most expensive for the company >>
It's not about FUN; instead it's the path to (1) the fastest project completion; and (2) a better final product. Granted, it's NOT a knee-jerk recommendation [to start over]. A new-to-the-project developer should look at the existing system to see if there is anything that can reasonably be leveraged - including db schema, code, docs, etc.
One thing your advice gives zero credence to is the *enormous* gap between the quality of work of a competent developer and a screw-up ("junior programmer."). There are huge implications for meeting deadlines and expected due dates if given a poor body of code to build on. Given a complete "rats nest"of code, it becomes impossible to predict timelines with reasonable accuracy. Ever heard of "jello code"? - it's code where you touch it here and it wiggles over there. It's that "wiggling over there" that can be disastrous for predicting timelines, runtime stability, date integrity, etc. Junior programmers are likely to introduce race conditions and other such bad things - and do so ALL over the place. So rather than starting out with a blank page and getting it right the first time, your advice would have the OP here believe that it's actually faster to start with a mess that must be cleaned up (which can be time consuming) before moving the project forward.
RE: << The way that you do this is with requirements and schedules. >> and << You need to schedule deliverables >>>
So what happens when schedule are based on faulty assumptions, incomplete requirements, or misunderstood data? Placing the responsibility (and ultimately "blame") on the developer is unreasonable given that developers get their requirements from end-users (including business management at the highest levels) who frequently don't clearly understand what they need or want or what the correct meaning of their own data is. It is common for a client to learn more about their own data and business processes than they ever knew prior to the initiation of a major software development effort. With this increased knowledge comes changes to requirements. And with those changes, schedules go out the window unless revised. This evolution in requirements and associated invalidation of prior estimates isn't anybody's "fault" - but rather an expected course of events that comes out of a business becoming more knowledgeable about (1) what they are actually doing; and (2) what technology can do for them.
RE: << You need to schedule deliverables. The schedule should be set up with the input of the developer. Break the project up into its components. Things like database schema, screens, areas of functionality. That way if the developer leaves in mid project you don't have half of a project that doesn't work, you have the basis of a whole project and the next developer can come in and add to it. >>
Again, that advice is based extensively on the assumption that the existing work is of acceptable quality and *can be* leveraged, neglecting the reality that that is is a rare thing to have happen.
Covering oneself in case a developer leaves is a great idea, but there are effective ways to go about it that don't rely on illusions created by arbitrary timelines.
This idea of "break the project up into its components" -- with the implication that they can be thought of as independent sub-projects and therefore assigned independent schedules and due-dates -- is completely naive. Major components of a system cannot be designed and built without impacting other areas. It's a rare and tiny change to one part of a system that doesn't somehow impact another part of the system. Yes, we should be able to change db schemas, for example, but then the DAL would need to get modified - even if the upper-level UI layers aren't broken (which they shouldn't be if proper layering is going on) the UI would likely need to get modified in some way to allow acces to new tables, stored procedures, etc... new screens, modified screens, additional reports, modified reports all come into play.
Finally, consider this quote in the forward to the book: Database Design for Mere Mortals (by Hernandez): The forward is by Ken Gets - a well-known industry expert:
By Ken Gets: "I knew this was the book for me when I turned to the beginning of chapter 6 and saw this suggestion: Do not adopt the current database structure as the basis for the new database structure."
Of all the things Mr. Gets could have written about the book, he picked that one.
Turning to chapter 6 ... "This is a particularly bad idea [in reference to leveraging prior database structure], because imported errors are the most difficult to identify." ... "The danger posed by this line of thinking is that any "hidden" problems within the current database will be transferred into the new database."
He goes on and on, then... "After all, if the old database didn't have any problems, you wouldn't be building a new one."
Apparently I'm not the only industry expert who disagrees with your suggestion that existing work should be leveraged.
The decision about starting over (or not) has everything to do with economics. Again, it's not a knee-jerk reaction to start over. But it's typically the most economical way to get a good and reliable system with trustworthy data.
-S
Freddy Potargent - 27 Aug 2007 12:22 GMT Maybe my story at my current employer shows a few points Smithers and others are making.
I'm now a little over 2 years at my current firm. We develop fully automated machines for sorting and packing hard fruits (eg apples). A lot of PLC control of course but also Windows software running on a stock PC for the machine vision, control of camera's and the image processing.
When I started there was already a PC application (written in C# during the year before I started) with a rudimentary UI, using a single camera and very basic features. This was written by a programmer who had no experience in Windows programming, multithreading, ... not even OO and modern software design. He's more a PLC guy then anything else (not to downgrade him, he's very good at what he does but the machine vision stuff on PC is outside his area of expertise).
That version was able to scan an apple and calculate the minimal data required for the PLC to continue. It took however about 20s for the scan and another 30s for the calculations. There were attempts to use multithreading to speed up the process, analyze images while scanning the next product, but there was a lot of trouble with it.
Basically, the code had serious trouble with dead-locks and races, lots of program logic was intermixed with the UI code (sluggish UI response for starters but the program logic was not stable, ie changed when the UI was changed). The application even slowed down when they introduced multithreading simply because they had no idea what they were doing with the locks. There were different threads in the code but they were mostly waiting for results of a previous one so it was essentially still a single threaded execution. Some (consistent) deadlocks were solved by timeouts and recovery, ... Also quite some problems with memory usage, some serious leaks where a lot of data was being held on that wasn't used anymore.
Of course requirements were changing because the machine was still in development and we didn't know exactly how we would solve some functionality (mechanical<->software interaction). Schedules were always shifting.
When I started I was, as the new guy, not allowed to start from scratch (explicitly told so in my first week). My first assignment was to solve some specific bugs (wrong results) and after that was finished to look into speeding up everything. After the first assignment and when I was a bit familiar with the code base I discussed with my boss the problems I saw with the code and made suggestions how to solve them. This essentially boiled down to restructing the whole code base, rewriting 80-90% of the code.
Not allowed to do this rewrite I was still able to slowly refactor the code bit by bit while implementing changing and new requirements. Refactoring not because it was fun but because it was necessary!
Right now we have a mean and lean application, it runs fast (handles 4 camera's simultaneous, capturing 250 images per camera per second and does a lot more processing in less then 1.5 sec). The code is very clearly split in IO-bound and CPU-bound threads (no need to make more CPU-bound threads then you have cores) and a fully configurable UI seperate from the program logic. The software is ready for out-the-box expansion, ie add more PC's to handle more camera's simultaneous.
Nearly nothing of the original code is left over and we recently looked into the changes that happened over the last 2 years (I luckily kept detailed version control logs although VC was also not deemed necessary). We agree now that we lost about 6 months (working days, so that's about 8.5 calendar months of the 2 years!) by slowly refactoring instead of starting from scratch with a clean structure.
No real problem with the current development because the software was not on the critical path but it's a lot of lost time in which other things could have been done. Functionality we now start working on as an upgrade for instance could have been in the first version.
My experience: electrical engineering and CS degrees, research in software methodologies, math hobbyist and functional programming fan (do most of my SW prototyping in Haskell). So a more or less heavy CV but still needed to prove I can get things done. :-)
In retrospect: overall it's been a fun 2 years but also with the necessary frustation, seeing what was wrong and how it could be solved cleanly but not allowed to do so. Having to code around problems, knowing it will eventually need to be recoded anyway, is indeed no fun but was sometimes necessary for quick testing and proof of concept. Occassionally heavy discussions but it all turned out fine. :-) Important is that we kept talking about progress, impact on software and schedule of certain decisions/changes, ...
Looking forward to the coming years with new developments and we now all have a better understanding how to tackle software projects like the ones we do. :-)
Sorry for the long post, hope somebody gets something useful from it!
-- Freddy
Smithers schreef: [...snip...]
> RE: > << I saw that one replier advised you, "if the new developer wants to [quoted text clipped - 8 lines] > at the existing system to see if there is anything that can reasonably be > leveraged - including db schema, code, docs, etc. [...snip...]
> The decision about starting over (or not) has everything to do with > economics. Again, it's not a knee-jerk reaction to start over. But it's > typically the most economical way to get a good and reliable system with > trustworthy data. Larry Smith - 27 Aug 2007 13:02 GMT > The way that you do this is with requirements and schedules. > > I'm not advocating micro management, but you should have a detailed > spec showing the developer what the final product is supposed to look > like and what functionality it should have. A "detailed spec" is theoretical nonsense that exists almost nowhere in the real world. Software development is an iterative process where the *real* details don't become clear until coding is underway. The volume of information is also so overwhelming in most cases that properly documenting it ahead of time is a near impossibility even if you had this information from the outset. Moreover, screen mock-ups and/or many pages of high-level documentation does *not* constitute the program's actual design at the coding level. Nor does it address the thounsands of details that programmers must ultimately deal with. Most such documentation is also (usually) very poorly written by both the inexperienced and experienced alike, is extremely superficial (usually), is in a constant state of flux, and simply becomes indigestible for most human beings beyond a certain point. I have yet to see a "detailed spec" after 25 years and more than a dozen companies (from the very small to the very large)
> You need to schedule deliverables. The schedule should be set up with > the input of the developer. Break the project up into its components. > Things like database schema, screens, areas of functionality. See previous point.
> I saw that one replier advised you, "if the new developer wants to > rewrite the program from scratch, let them". I hope that raised huge > red flags with you. This is the classic developer response to any > existing project. It is the most fun for the devleoper, but it is > also the most expensive for the company A re-write should be avoided at all costs but it may become necessary if your first group of developers botched the job beyond repair. If so then you're either forced to face this grim prospect of a complete or partial re-write or otherwise proceed with the existing mess at the cost of unstable software (and by extension many years of very expensive maintenance)
fugitiveguy@excite.com - 27 Aug 2007 16:32 GMT >> The way that you do this is with requirements and schedules. >> [quoted text clipped - 3 lines] > >A "detailed spec" is theoretical nonsense that exists almost nowhere I apologize if I gave you the wrong impression in my previous post. I used the expression "final product" and that may have given you the impression that I meant that the spec was set in stone before the project started. That was not my intention. My intention was to say that a specification should show the devleoper what work was expected of them. The specification should evolve, just as the project evolves.
I stand by my statement that a specification is necessary to show the developer what is expected of them, and that the weaker the specification the more likely the developer is to diverge from what the company expects from the product. The more the developer diverges the less likely the product is to be successful, and the more difficult it will be to get the product back on track.
Larry Smith - 27 Aug 2007 18:35 GMT >>> The way that you do this is with requirements and schedules. >>> [quoted text clipped - 11 lines] > of them. The specification should evolve, just as the project > evolves. What will most of these specs actually show. Do they describe the actual design in sufficient detail that you can simply translate it into code. Do they help you design and organize your classes. Do they explain the locking and multithreading issues you need to work out. Do they address the real work that you as a programmer have to deal with on a day-to-day basis. It's a rhetotical question with an obvious answer. Here's the way things work in the real wold:
Inexperienced manager at start of project (talking to programmer): "Figure out how long it will take to complete all your tasks and get back to me so I can complete the project schedule" Nervous programmer knowing virtually nothing about the details at this stage but now pressured to answer: "Um, ok."
6 months later (and countless other conversations just like this) ...
Inexperienced manager after deeply pondering an issue for 10 seconds: "Well, if we do it this way instead, how long will it take to complete and then update the DB." Nervous programmer knowing virtually nothing about the details at this stage but now pressured to answer: "Um, I don't know, maybe 3 days"
This is how schedules work and projects "evolve" in just just about every software house on the planet..
> I stand by my statement that a specification is necessary to show the > developer what is expected of them, and that the weaker the > specification the more likely the developer is to diverge from what > the company expects from the product. The more the developer diverges > the less likely the product is to be successful, and the more > difficult it will be to get the product back on track. The "company" (senior management) usually knows very little themselves. They have a high-level vision of what they want but the devil is in the details. Those details are almost never (properly) worked out ahead of time even after being "documented" by other managers and architects (who frequently have little or no programming experience). The documentation that does exist is typically so superficial and poorly written that it borders on being worthless. The real details only emerge once programmers start the actual work and decisions are then made on-the-fly. IOW, being derailed in the way you're suggesting can't happen when you were never on track to begin with.
egaskill@gmail.com - 27 Aug 2007 21:28 GMT Wow...it really looks like I struck a nerve with this topic haha...
Thanks for all the input everyone, it has been very helpful.
~Dex
Smithers - 28 Aug 2007 06:27 GMT <snip>
RE: << ... a specification should show the devleoper what work was expected of them. >>
LOL!
<< The specification should evolve, just as the project evolves. >>
ROTFLMAO!
So this is how you are supposed to "manage a developer"?
I'm actualy laughing out loud. Maybe I should take some time off....
Okay... I'll try to make one final contribution here - in all seriousness.
Oh... nevermind. I think the OP got his money's worth already.
dave Beseke - 29 Aug 2007 14:36 GMT Rather than hiring an inhouse developer, why not outsource the development effort to a firm that specializes in .Net application development? The firm I work for would be willing to evaluate your project and give you a fixed bid quote for the effort. We would also be willing to give you a fixed quote for a software maintenance contract. If you're interested in this, email me and I'll set it up with the owner of the company.
Free MagazinesGet these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...
|
|
|