This is the moment the developers have been waiting for. After having thrown both the developer and his application under the bus, we are going to make room under there for the customer. Now if you are customer reading this, take heart. While I'm going to say some things that will hurt, in the end I'm going to rub salve on the wound and we will all sing Kumbaya together. Here we go.
The Muse finally has a number - a project that we've estimated at 350 hours. Of course, this estimate is not correct. Why? Because no estimate is ever correct. Please refer back to the first post in this series. The majority of estimates are wild guesses. We've done our best to find out all we can about the system, requirements, priorities and every little nitpicky detail we can imagine. Our estimate is based on that discovery. If all of our dozens of assumptions are correct then our estimate is rock solid. But of course, there are still things we don't know and many of our assumptions are simply off. Much of what we need to know we simply can't know until we dig in and start doing the work. For that reason we will give Bob a range of hours - say 275 to 375 hours - and dozens of caveats that he will epically fail to hear and absorb. What he will hear is the number 275 and that will be the basis of his expectations.
Let's check in with the Muse and Bob as they finalize the project.
Most clients are not quite as bad as Bob. Still, every contractor or development shop owner has a story remarkably similar to the one above. I know most Muse readers are developers. I can see you now in my mind's eye with righteous indignation and clenched fist saying, "You tell them muse, clients are the worst!" But actually, this is not their fault. Your customer has his or her own domain of knowledge. I have a customer who is a commodity trader. I expect him to know the difference between a bull call and a butterfly spread, but I do not expect him to know the difference between MySQL and MS SQL, how the cloud works, or why it takes 10 hours to program something. The basic issue is threefold:
When last we checked in with Bob and the Muse (part 1 - applications) they were trying to come to grips with Bob's complex... I mean his application's complexity. We are now at the stage called "developer involvement" where he and the Muse are speaking with Sugar Sweet - the Muse's crack developer (and the name of a girl I dated in college). Let's go live to the conference call (be careful not to spook them).
Developers come in all stripes and their views will greatly impact your estimate. Some of them have a religious devotion to certain technologies, libraries and approaches to development. To be a developer (at least on my staff) requires high aptitude, intelligence, breadth of knowledge and confidence. Those traits generate towering personalities like the Muse (whose lack of modesty is his only real flaw), and of course egos. They have opinions and they are usually not afraid to use them. Their defensive ferocity increases exponentially the closer you get to their favorite technology. If you don't believe me try yelling "Windows rules" at an IOS conference (and hope it's not an open carry state). For this reason, it's always a good idea to have non-developers involved in your estimates. Around here we call them project managers. They use their knowledge of the developer and the customer to "find the sweet spot" that meets the needs of the application and its stakeholders.
Of course, not every estimate needs the once over by a project manager, but larger projects or enhancements should always be a collaboration. Developers need to be able to justify the estimates they provide to someone who knows them well enough to understand how they might get tripped up. Here are a few "types" of developer estimators.
Sugar is in this camp. She will like over-estimate every task on older code because she sees any legacy code as debt that needs to be paid. To her this isn't optional, it's essential. In the real world it's definitely optional. Is script better than tags - in most cases yes (don't email me). Is using jQuery better than custom JS libraries? I believe it is. Are stored procs better than queries? Usually they are (though I've seen some god-awful stored procs). Best practices, frameworks, indentation, file naming conventions - these are all important parts of competent development. But when approaching legacy code there is a lot to consider. For example, has the customer managed to get a return on his initial investment? If he has, he may be ready for a rewrite. If not, we may need to work with what is there and not break the bank rewriting huge swaths of code. The business decisions rule the day. It's important for developers to understand the economics in play.
Estimating is about imagining what could happen. What if the user doesn't check the box - what happens then? What happens when a user doesn't follow your pattern and puts in letters where numbers are indicated? Most developers react to these conditions with frustration. Who would do that? Why would a user use the application in that way when it's clearly designed to be used this way. A good estimator considers all these what-ifs. Estimating is also about accounting for what you still don't know. It's about challenging your assumptions. The underestimator concentrates on what he sees in front of him. His estimate comes with the caveat "if all my broad assumptions are correct". A good project manager will know the developer well enough to A) challenge him on his assumptions and B) add hours to the final estimate to insure it's adequate.
Some developers are the opposite of the blithe underestimator. Instead of broad assumptions they build a huge list of unknowns and caveats. How do you know if you are an overcomplicator? Here's a little test for you. Let's say uou pull up Google and the page fails to load. Order the following list by probability.
Some time ago I was helping a Muse reader with an error via screen share. On the screen the error debug information had query code and indicated a malformed query. I asked what he had tried. "I tried a new DB driver, checked the network connection and I've been googling how cached execution plans work." I took a closer look at the debug output on the screen, highlighted a portion and said "You are missing a comma after this column." A good manager will know his devs well enough to spot an over estimator and adjust estimates accordingly.
Finally, there is the developer for whom everything is about tech. The saying goes that when your only tool is a hammer everything looks like a nail. Developers need to be reminded that what they are solving are behavior problems, not (typically) technical problems. When we build a new search engine for a company selling nuts and bolts, the problem we are solving is not faster indexing, better sorting, or more granular pattern matching. nope. It's the basic problem of folks rummaging through bins trying to figure out thread and length. We are trying to make that task easier.
The tech hammerer will turn to the technical aspects of a project over and over because that is her comfort zone. She will suggest products, approaches and solutions that may or may not solve the basic problem underlying the project.
Tech hammerers usually need to learn that it is highly beneficial to gather domain knowledge about your customer. What does the company do? How do they make money? (that's the most important question for a dev company like ours) What sort of problems do they solve with their application? These questions inform our decisions in ways that mere technical questions cannot. Moreover, they tend to make us better partners - better at suggesting changes that save or make money for the customer. "What if we chose to do it this way Bob, would that save your users a step? Do you really need this field, it seems like we have this covered with earlier data. Explain how this will help your user - I want to understand."
The main takeaway here is that developers and their personalities have an impact on your estimates. Estimating is a team effort and requires give and take from several sectors. In our next post we are going to throw customers under the bus - gently of course.
Consider this typical interaction with a prospective customer:
Now it's not the Muse's fault that he's having a hard time communicating. After all, if it was easy I'd be flipping burgers and still driving my '72 delta 88 from College. And before you get all up in Bob's grill, it's not his fault either. We IT natives tend to use lingo as if everyone has been exposed to the concept of an "API" or "java integration" or a "mouse".
So I'm going to let you in on a little secret. The bald truth is that development companies usually have no idea what something will cost even after you describe it to them thoroughly. The most accurate estimate for enhancements will always come from the original developer, and even then, they are often guessing wildly.
Chances are if someone is throwing numbers around without asking a lot of questions and without being nervous about "guaranteeing" the cost, you are about to enter a relationship you will regret. Think Vegas chapel and too much bourbon and you'll get the idea. To help further the conversation about estimates I offer this 3-part blog series on "The hard task of estimating". My hope is that in the end, readers who are customers and readers who are developers will both come to understand a little more about this maddeningly ticklish task that we all must do.
Estimating is hard and estimates are often unreliable because of three main areas where issues arise:
Read More
Yes it is that time again. The Muse wants to add another talented developer to his aggregate brain. If you think you might qualify send your resume (yes, we would like a resume) to jobs@cfwebtools.com Please note: All of our developer jobs are remote. That does mean you need to be stand offish. It means you work from home. We prefer you take a shower and get dressed each day, but honestly we have a don't-ask-don't-tell policy on that. In addition all our positions are US based (sorry Indian friends, we love you but we are sticking stateside for now) and all of our jobs are W2 with benefits. Here's the "hard skill" list.
I'm glad you asked. CF Webtools has four core values.
CF Webtools is looking to add ColdFusion developers to our expert team. We provide an engaging community, good salary, full benefits and the opportunity to work on interesting code of infinite variety. You have to be proficient in ColdFusion of course (we will test you). You have to have more than just ColdFusion however. Every advanced developer has additional skills sets. We look for expertise in these as they add to our ginormous aggregate brain. Here is an incomplete list of the kinds of things we look for.
I'm glad you asked. CF Webtools has four core values.
Yes these come first for us.
We pay a competitive salary and benefits. CF Webtools maintains sites on virtually all ColdFusion and Database platforms with dev and QA servers and full SDLC. Our work is challenging, invigorating, sometimes frustrating, but rarely boring. Our development group is full of witty, interesting, overcommunicating and extremely talented developers. It's a true mentoring community. If that sounds like a place you would like to work (and you meet our high skill-set standards) send your resume to jobs@cfwebtools.com - or contact the Muse directly if you like. Tweet me @cfwebtools or use the "Ask a Muse" link on this blog (I'm easy to find). You can also call 402 408 3733 and ask for Mark or Jason - we'll be thrilled to speak with you about our opportunity. The official job posting may be found on our corporate site at the Job Openings page.
Be prepared to talk about your overall work habits, life experiences and approach to people. Don't fall into the trap of riffing on this tech or that tech or putting something down. Tell us about new things you are doing - complex and interesting problems you have solved and new tech you are excited about.
CF Webtools is expanding (again) and looking for high quality ColdFusion developers. If you have some mobile skills you might end up at the front of the line.
Here are the soft skills we are looking for.
We pay a competitive salary and benefits. CF Webtools maintains sites on virtually all ColdFusion and Database platforms with dev and QA servers and full SDLC. Our work is challenging, invigorating, sometimes frustrating, but rarely boring. Our development group is full of witty, interesting, overcommunicating and extremely talented developers. It's a true mentoring community. If that sounds like a place you would like to work (and you meet our high skill-set standards) send your resume to jobs@cfwebtools.com - or contact the Muse directly if you like. Tweet me @cfwebtools or use the "Ask a Muse" link on this blog (I'm easy to find). You can also call 402 408 3733 and ask for Mark or Jason - we'll be thrilled to speak with you about our opportunity. The official job posting may be found on our corporate site at the Job Openings page.
Not everyone is a good interviewee. That doesn't mean we discard you out of hand. We don't have a checklist of items that immediately cause us to strike you off the list. We expect you to be human. However... you should be an "advanced" developer capable of working with our team in a way that adds value. That means there are certain things that leave a bad taste in our mouth. Because the muse wants everyone to do well, I'm going to give you the keys to the kingdom in the following advice :
What does "Advanced" remote CF developer mean to the Muse and his team at CF Webtools? It means we won't have to hold your hand to:
My brother Bill tells the following story. His oldest son at the age of 6 or 7 was harassing him about something the way children do. It might be a toy or a snack or an instance that you switch off of PBS and go back to Nickelodeon. Whatever the case he was going on an on - persisting in his request until finally, having had enough, Bill said, "Wriley, be quiet! You sound like a broken record."
This stopped my nephew who looked thoughtful for a moment and then asked, "Dad, what's a broken record?" He had never heard the skippity scratchy sound of a defective vinyl disk except perhaps on the radio as DJ flippity flunk manipulated a turn table.
Well at the risk of sounding like a broken record (not to mention using a deprecated metaphor), it's time to hire again. That's right - the Muse is recruiting high quality developers to add to his superior staff. You get to work with me every day (even if you don't want to) and put up with puns and groaners - as well as hyperbolic praise from time to time. At this time we are looking for straight up senior ColdFusion developers with the usual spate of ancillary skills (DB, jQuery, bootstrap, ajax, angular etc). If you think you fit the bill and are ready for the challenge send your resume to jobs@cfwebtools.com. We will be thrilled to speak with you and to get to know you whether we hire you or not. :) This is full time telecommuting (U.S. States only). Because I lack the energy to once again list all the benefits and nuances of working with CFWT I will refer you back to my previous post from a couple months ago (when we hired 4 new folks). I look forward to hearing from you ColdFusion folks and making new friends and colleagues.