From: ccc31807 on
Peter J. Holzer wrote:
> The tricky part here is to make everybody happy. That not only means
> that the users get what they want in the end, you must also avoid
> frustration during the process. I think some points which help are:
>
> 1) Make clear from the start that the process is iterative. If both
> sides are aware that the spec isn't carved in stone but can and will
> be amended then it is much easier to do this.

Good. I like to iterate very quickly, sometimes several a day, The
people I work with frequently expect that I'll have version A ready by
noon and version B ready by the end of the day. I can do this because
my jobs are usually very simple and short.

> 2) Try to avoid passing blame. It isn't important whether the customer
> forgot to tell something or changed their mind or whether the
> programmer didn't ask the right questions or misunderstood the specs.
> The important thing is that a flaw has been detected and must be
> fixed. So write it in the specs and move on. (yes, some people always
> want a scapegoat for every problem, preferrably before they even know
> that there is a problem - but if they don't have to fear they they
> will be blamed they are also less likely to blame you)

Good. My approach to this is to accept all the blame, whether or not
it's my fault. I don't have a problem with accepting the blame, and
many times that blame is deserved. ;-)

> 3) Keep the iterations short. Firstly, that will enable everybody to
> remember what was discussed the last time and secondly, it avoids
> wasting much time by going far into the wrong direction.

Good. See above. When the software only takes several hours to write,
this is easy to do. I have a project that requires more than a day (or
two) about once a month.

> 4) Fix the most important problems first. That way you will quickly
> converge on a version which is usable, although it may not be
> perfect.

Sometimes this is difficult because you don't know what the 'most
important' problem is before you start. Sometimes it's obvious, but
sometimes it's that little regex that turns out to be the pivot point.
Also, in my situation, requirements sometimes change radically. The
project I did last month was totally different from the written
specification (and yes, for this one I did have a written
specification.)

> 5) As soon as the product is usable, use it! Avoid the temptation to
> make it perfect. It never will be.

Good. In my case, this isn't a problem because the focus is on the end
product, the report or document set. My users care nothing about the
scripting, all they are looking at is the result, which makes it easy
to focus on the major goal.

To these points, I would add:

6) Expect the requirements to be wrong. There are more bugs in the
specification than in the code, typically.
7) Expect the data to be bad. Something the in the input will always
break the script.
8) Expect the job to change. Often the user doesn't know what he wants
until you produce what he thinks he wants.
9) Be on your toes and be aware of your environment. Bullets fly! It
doesn't matter if the one that hits you is deliberately aimed or is a
ricochet.
10) Have fun -- this is probably the most important.

Thanks, CC.
From: Charlton Wilbur on
>>>>> "cc" == ccc31807 <cartercc(a)gmail.com> writes:

cc> Good. I like to iterate very quickly, sometimes several a day,
cc> The people I work with frequently expect that I'll have version
cc> A ready by noon and version B ready by the end of the day. I can
cc> do this because my jobs are usually very simple and short.

Do your iterations include clear statements from the business process
owners of what the expectations are for that iteration? If what you
mean is that they complain and you fix it quickly, that's not an
iteration, that's training them that you are a puppet that dances on the
strings they pull.

cc> Good. My approach to this is to accept all the blame, whether or
cc> not it's my fault. I don't have a problem with accepting the
cc> blame, and many times that blame is deserved. ;-)

That is NOT HELPFUL, and is a large contributor to your problem.

cc> Good. See above. When the software only takes several hours to
cc> write, this is easy to do. I have a project that requires more
cc> than a day (or two) about once a month.

How long do the *requirements* take to write? How long does it take to
get approval of them? What process do you follow to make sure the
requirements are corret? You're thinking like a code monkey, not a
software engineer.

cc> Sometimes this is difficult because you don't know what the
cc> 'most important' problem is before you start. Sometimes it's
cc> obvious, but sometimes it's that little regex that turns out to
cc> be the pivot point. Also, in my situation, requirements
cc> sometimes change radically. The project I did last month was
cc> totally different from the written specification (and yes, for
cc> this one I did have a written specification.)

You don't know what the most important technical problem is, but that's
completely irrelevant. What problem is most important to the business
process owner? I can guarantee you that he doesn't care about that
little regex.

And if requirements change radically, schedules should change radically
too. I see it even in good organizations: the developer provides an
estimate based on the requirements, the requirements change drastically,
and then the business process owner attempts to hold the developer to
the original estimate. It's the developer's responsibility to stand up
and say, "No, that's crazy talk. You changed the requirements, so the
schedule will change."

Also, if you start work on a project without written requirements,
you're contributing to the problem. You need to get in the habit, even
when things seem crystal clear, of writing the expectations down in an
email and sending them to the business process owner, saying, "This is
my understanding of what you need. Please correct me if I'm wrong, or
let me know if you think I've captured your requirements correctly."

Charlton



--
Charlton Wilbur
cwilbur(a)chromatico.net
From: Charlton Wilbur on
>>>>> "JG" == Jim Gibson <jimsgibson(a)gmail.com> writes:

JG> You get a set of written requirements and implement your program
JG> to comply with them. You will probably have to write the
JG> requirements yourself, since nobody else will think it is a
JG> worthwhile exercise. So you do it, then get sign off from your
JG> boss and the customer (end-user).

JG> Then, when the program fails to meet the end-user's
JG> expectations, you point out how the program actually complies
JG> with the written requirements to which they agreed. Then, you
JG> revise the requirements to match the user's expectations, modify
JG> the program to match the new requirements, and move on to the
JG> next problem, iterating until everybody is happy.

The trick here is to make it not about blame but about improved
communication. The business owner needs to understand that you do not
know all the details of the job he needs the software to do. So you
have to frame the whole thing not as "It complies with the written
requirements, so it's YOUR FAULT it's not what you want," but as "I
don't know your job as well as you do, which is why it's really
important that I understand what you need the software to do."

So if you write the requirements, the business process owner approves of
them, and the software matches the requirements, the bug is not your
fault, and you should push back HARD when the business process owner
tries to make it your fault. If you do this well, you can start
teaching the business process owner how to communicate better with you,
and get across to him the importance of accurately communicating
requirements.

Charlton


--
Charlton Wilbur
cwilbur(a)chromatico.net
From: Peter J. Holzer on
On 2010-04-02 12:03, ccc31807 <cartercc(a)gmail.com> wrote:
> Peter J. Holzer wrote:
>> The tricky part here is to make everybody happy. That not only means
>> that the users get what they want in the end, you must also avoid
>> frustration during the process. I think some points which help are:
>>
>> 1) Make clear from the start that the process is iterative. If both
>> sides are aware that the spec isn't carved in stone but can and will
>> be amended then it is much easier to do this.
>
> Good. I like to iterate very quickly, sometimes several a day, The
> people I work with frequently expect that I'll have version A ready by
> noon and version B ready by the end of the day. I can do this because
> my jobs are usually very simple and short.

I was thinking of longer projects. For something that can be done in
half a day, revising the specs (if there even is one) isn't a problem.
But if you have spent half a year writing the specs and six different
people have signed it, it becomes damn hard to change it, even if parts
of it were obviously wrong.


>> 2) Try to avoid passing blame. It isn't important whether the customer
>> forgot to tell something or changed their mind or whether the
>> programmer didn't ask the right questions or misunderstood the specs.
>> The important thing is that a flaw has been detected and must be
>> fixed. So write it in the specs and move on. (yes, some people always
>> want a scapegoat for every problem, preferrably before they even know
>> that there is a problem - but if they don't have to fear they they
>> will be blamed they are also less likely to blame you)
>
> Good. My approach to this is to accept all the blame, whether or not
> it's my fault. I don't have a problem with accepting the blame, and
> many times that blame is deserved. ;-)

That's not good and definitely not what I meant. You should not accept
all the blame (that's frustrating for you (and boy, you do sound
frustrated at times) and it undermines your reputation in the company
("that Carter guy never gets anything right")). Instead you should try
to create a working environment where blame isn't an issue. If something
like your one-task-several-workers problem pops up, whoever notices the
problem should just be able to say "hey, the program doesn't handle
tasks assigned to multiple persons right now, but it needs to. Can we
change that?" and not have to think about who they can blame and why
they didn't notice this 3 weeks ago.


>> 3) Keep the iterations short. Firstly, that will enable everybody to
>> remember what was discussed the last time and secondly, it avoids
>> wasting much time by going far into the wrong direction.
>
> Good. See above. When the software only takes several hours to write,
> this is easy to do. I have a project that requires more than a day (or
> two) about once a month.

That point (and in fact most of the others) was aimed at larger
projects. I have unfortunately been involved in projects with iteration
times of several months, where from one meeting to the next nobody could
remember what was meant by that cryptic paragraph in the specs, or a lot
of work had to be scrapped because either the spec was wrong or too
vague (and nobody noticed until the part had been implemented).


>> 4) Fix the most important problems first. That way you will quickly
>> converge on a version which is usable, although it may not be
>> perfect.
>
> Sometimes this is difficult because you don't know what the 'most
> important' problem is before you start. Sometimes it's obvious, but
> sometimes it's that little regex that turns out to be the pivot point.

The "little regex" is never the most important problem. The most
important problem is that a task can be assigned only to a single
person, or that the report cannot be imported into the accounting
program or that the distance between the logo and the first line is 2mm
too small.

Solving the problem may involve changing that little regex, but the
customer doesn't care about how you solve the problem, but only that you
do it and how long it takes (and how much it costs). So after
identifying the problems you determine a priority and solve the problems
in order of decreasing priority. And yes, it is quite possible that the
customer cares more about the placement of the logo than about about a
substantial problem that only affects only 4 out of 500 reports.


> Also, in my situation, requirements sometimes change radically. The
> project I did last month was totally different from the written
> specification (and yes, for this one I did have a written
> specification.)

See point 1) above.


>> 5) As soon as the product is usable, use it! Avoid the temptation to
>> make it perfect. It never will be.
>
> Good. In my case, this isn't a problem because the focus is on the end
> product, the report or document set. My users care nothing about the
> scripting, all they are looking at is the result, which makes it easy
> to focus on the major goal.
>
> To these points, I would add:
>
> 6) Expect the requirements to be wrong. There are more bugs in the
> specification than in the code, typically.
> 7) Expect the data to be bad. Something the in the input will always
> break the script.
> 8) Expect the job to change. Often the user doesn't know what he wants
> until you produce what he thinks he wants.

These are already covered by 1).


> 9) Be on your toes and be aware of your environment. Bullets fly! It
> doesn't matter if the one that hits you is deliberately aimed or is a
> ricochet.

This is related to 2). Try to keep people firing the bullets in the
first place. At least in your vicinity.


> 10) Have fun -- this is probably the most important.

That I can agree with.

hp

From: ccc31807 on
On Apr 2, 9:31 am, Charlton Wilbur <cwil...(a)chromatico.net> wrote:
> So if you write the requirements, the business process owner approves of
> them, and the software matches the requirements, the bug is not your
> fault, and you should push back HARD when the business process owner
> tries to make it your fault.  If you do this well, you can start
> teaching the business process owner how to communicate better with you,
> and get across to him the importance of accurately communicating
> requirements.

Charlton, yesterday (Friday) when I came to work, I found a new
project on my desk. It was a log file from our corporate call center.
The manager wanted to know the locations of the callers. He had
attempted to do some of it by hand, but that is an arduous task, and
he soon gave up.

It was pretty simple to do, and I did it, from scratch, in less than
four hours, including finding and parsing the telephone exchange data
(which was a little difficult). When I finished, I called the manager
in charge and asked what format he wanted the report in. The answer?
"I don't know."

Think about this -- a manager assigns a project without thinking it
through to the extent that he knew the format of the output. Here I
was, with nice work and a ton of data, and no way to return it.

This is a communication problem. It's not a failure to communicate,
but a failure to have something to communicate. It's difficult to say
something if you don't have anything to say.

We'll get this sorted out on Monday so I'm not worried about it. The
point is that the technical person can't work without knowing what the
requirements are, and at least in my situation, I am often assigned
work with unclear, ambiguous, or absent requirements.

Finally, maybe I should add that the whole process is iterative, and
that the client doesn't know how he wants the data until he sees the
data. In this case, the client and the developer work together through
a number of iterations until the client sees how he uses the data, and
the developer helps him my writing output in a number of formats.

(Quick story -- We had a big push for graphical formatting and
visualization, the bosses wanted to 'see' the data. I spent several
days and developed an application that took data and spat out gifs,
literally hundreds of gifs, bar charts, line graphs, etc. The final
result was a 40+ page PDF with eight charts on each page. Guess what?
After I submitted this, I never heard from it again. The theory about
visualizing data is good, but it has it's drawbacks as well, and you
might not realize that you really don't want to 'see' the data until
after you see it.)

CC
First  |  Prev  |  Next  |  Last
Pages: 1 2 3 4 5 6 7 8 9
Prev: perl.libwww?
Next: How to convert "=?ISO-8895-1?Q?..." stuff?