I work for a very small custom software shop. We currently consist me and my boss. My boss is an old FoxPro DOS developer and OOP makes him uncomfortable. He is planning on taking a back seat in the next few years to hopefully enjoy a “partial retirement”. I will be taking over the day to day operations and we are now desperately looking for more help.
We tried Monster.com, Dice.com, and others a few years ago when we started our search. We had no success. We have tried outsourcing overseas (total disaster), hiring kids right out of college (mostly a disaster but that’s where I came from), interns (good for them, not so good for us) and hiring laid off “experienced” developers (there was a reason they were laid off).
I have heard hiring practices discussed on podcasts, blogs, etc... and have tried a few. The “Fizz Buzz” test was a good one. One kid looked physically ill before he finally gave up.
I think my problem is that I have grown so much as a developer since I started here that I now have a high standard. I hear/read very intelligent people podcasts and blogs and I know that there are lots of people out there that can do the job. I don’t want to settle for less than a “good” developer.
Perhaps my expectations are unreasonable. I expect any good developer (entry level or experienced) to be billable (at least paying their own wage) in under one month. I expect any good developer to be able to be productive (at least dangerous) in any language or technology with only a few days of research/training. I expect any good developer to be able to take a project from initial customer request to completion with little or no help from others. Am I being unreasonable?
What constitutes a valuable developer?
What should be expected of an entry level developer?
What should be expected of an experienced developer?
I realize that everyone is different but there has to be some sort of expectations standard, right?
I have been giving the test project below to potential canidates to weed them out. Good idea? Too much? Too little?
Please let me know what you think. Thanks.
Project ID: T00001
Description: Order Entry System
Deadline: 1 Week
Scope
The scope of this project is to develop a fully function order entry system. Screen/Form design must be user friendly and
promote efficient data entry and modification. User experience (Navigation, Screen/Form layouts, Look and Feel…) is at
the developer’s discretion. System may be developed using any technologies that conform to the technical and system
requirements.
Deliverables
Complete source code
Database setup instructions (Scripts or restorable backup)
Application installation instructions (Installer or installation procedure)
Any necessary documentation
Technical Requirements
Server Platform – Windows XP / Windows Server 2003 / SBS
Client Platform – Windows XP
Web Browser (If applicable) – IE 8
Database – At developer’s discretion (Must be a relational SQL database.)
Language – At developer’s discretion
All data must be normalized. (+)
All data must maintain referential integrity. (++)
All data must be indexed for optimal performance.
System must handle concurrency.
System Requirements
Customer Maintenance
Customer records must have unique ID.
Customer data will include Name, Address, Phone, etc.
User must be able to perform all CRUD (Create, Read, Update, and Delete) operations on the Customer table.
User must be able to enter a specific Customer ID to edit.
User must be able to pull up a sortable/queryable search grid/utility to find a customer to edit.
Validation must be performed prior to database commit.
Customer record cannot be deleted if the customer has an order in the system. (++)
Inventory Maintenance
Part records must have unique ID.
Part data will include Description, Price, UOM (Unit of Measure), etc.
User must be able to perform all CRUD operations on the part table.
User must be able to enter a specific Part ID to edit.
User must be able to pull up a sortable/queryable search grid/utility to find a part to edit.
Validation must be performed prior to database commit.
Part record cannot be deleted if the part has been used in an order. (++)
Order Entry
Order records must have a unique auto-incrementing key (Order Number).
Order data must be split into a header/detail structure. (+)
Order can contain an infinite number of detail records.
Order header data will include Order Number, Customer ID (++), Order Date, Order Status (Open/Closed), etc.
Order detail data will include Part Number (++), Quantity, Price, etc.
User must be able to perform all CRUD operations on the order tables.
User must be able to enter a specific Order Number to edit.
User must be able to pull up a sortable/queryable search grid/utility to find an order to edit.
User must be able to print an order form from within the order entry form.
Validation must be performed prior to database commit.
Reports
Customer Listing – All Customers in the system.
Inventory Listing – All parts in the system.
Open Order Listing – All open orders in system.
Customer Order Listing – All orders for specific customer.
All reports must include sorts and filter functions where applicable. Ex. Customer Listing by range of Customer IDs. Open Order Listing by date range.