Tempering Client Expectations (OT)
Tim Chase
python.list at tim.thechases.com
Sat Apr 10 15:14:44 EDT 2010
On 04/10/2010 11:10 AM, Victor Subervi wrote:
> Hi; I'm working with my first client where I've developed a
> custom script. I way underbid the project and I ate that as
> part of my learning experience. We outlined as precisely as I
> knew how what functionality was needed. Then he went to input
> data and lo and behold he needed more functionality. I told
> him that would require more investment. This went on a few
> times and now he's hopping mad about being nickeled and dimed
> to death.
hahahaha...shocked, I say, shocked!
</schadenfreude>
okay...with that out of the way...
> Any good articles out there (or other advice) on how to deal
> with a situation like this?
Given your track record, I'm not sure that even if folks here
offer advice, you'll heed it. But here goes:
1) Preeminently, address second-order ignorance. Learn about the
involved technologies before you consider proposing a solution.
Had you taken the time up-front to ask any competent web
developer "I'd like to make a web-application from scratch, what
do I need to know?" they'd tell you to learn HTTP, HTML, CSS,
Javascript, a server-side scripting language such as
Python/PHP/Perl/Ruby, database/SQL technologies, and security
best-practices (or they might question why you don't reuse an
existing framework that already does what you want). There are
plenty of books & websites to facilitate learning *all* of these
topics. GIYF. That list alone might have given you pause enough
to say "woah, that's a lot, and all I know is a little HTML.
Maybe the task of being a web programmer isn't as easy as I
thought." But, in the face of the daunting mountain of requisite
skills, you opt to proceed...
2) Next, address first-order ignorance: learn the requisite
technologies involved in such a project. Learn HTML, CSS,
Javascript, how an HTTP transaction works, how to program well in
your chosen scripting language, how to write SQL, and how to
identify common security issues (OWASP puts out a good list).
This doesn't preclude you from doing paid projects for friends as
you learn, but keep the funding down in the "buy me lunch and
I'll tinker with your idea" range, not in the "pay me real money
for a real application" range. Make sure that the friend knows
your level of experience (or lack thereof) doing what they want.
And don't fudge it with "I wrote this other web application"
eliding the fact that said-web-app blew up in your face. Be
honest. All artists need to master their tools, whether words,
pigments, clay, or technologies.
3) When multiple professional-programmers on comp.lang.python
face-palm and suggest you're doing something wrong or you lack an
understanding, try listening and spending time to wrap your head
around what they're saying. Instead of dismissing with "I'm an
artist, I can't understand that", STOP. Let you client know you
just stepped off the deep end, and suspend the project. Hire
somebody who does understand or take a class (this may cost real
money). But don't try and proceed in the face as your own
non-understanding without first coming to terms with the issue.
4) Don't be afraid to reuse existing technologies: could
installing osCommerce on a $3/month web-server and tweaking the
PHP code have sufficed for what you need? Could you have used
Django+Satchmo to get yourself up and running with proven code,
tweaking what you need? I remember you dismissing the suggestion
to use existing web-frameworks.
5) Regarding scope-creep, it's a problem most developers &
analysts face, but there are several mitigating methods you can
use. Experience from past projects helps gauge time for future
projects and only your own experience will suffice. If you don't
have any past projects (personal deployments or school projects)
you're not yet remotely ready to give estimates. Even after
you've done multiple projects, estimation is still as much an art
as a science.
Also, get the client to sign off on basic features in very small
bite-sized increments, addressing highest-priority needs first.
If at any time the client sees a failure to progress at the rate
they expect, they can pull the plug losing far less of their
investment keeping the most important features developed
thus-far. Part of a developer/analyst's job is to get a good
idea of a project's scope. Examining all edge cases, looking for
infrequently-used processes, probing exceptions, building a
mental-model that corresponds to the client's mental-model...
6) As for "Tempering Client Expectations" (the subject line of
this OT post), it seems the biggest gap involved not
communicating to your client/friend "I'm using your project as a
learning experience for multiple complicated technologies and I
have minimal idea what is involved so there's no possible way I
could give you an accurate estimate of scope or cost"
-tkc
More information about the Python-list
mailing list