From: ccc31807 on
We have an institutionally critical process that consists of a back
end (getting data from various sources and creating input files to
generate the documents) and a front end (preparing and sending the
documents from the input files.) We do this multiple times a year, and
it's task based, with single individuals performing multiple tasks
(from one to about six), and it generates hundreds of task documents
institution wide. Several years ago, I wrote the back end, and it's
worked perfectly.

A month or so ago, I was given the front end process as well. The due
date was Tuesday a week ago, nine days as I write. It was a week late,
I finished it last Tuesday, a week late. (I had to wait on input from
other people to finish the job, and they were tardy getting back to
me.) About 3:00 p.m., I got a call from the manager in charge who told
me that the software wasn't doing some of the documents correctly,
some weren't prepared at all and some were prepared wrong. Four
documents were affected out of 489.

After looking at it, I saw that the problem was the some tasks could
also be performed by multiple individuals, and my scripts only allowed
for tasks to be performed by one person. (The main database we use
contains a 'task' table, with one row per task and the individual
responsible for the task. It doesn't not contain information about
multiple individuals per task.) To correct the problem, I literally
had to start from the very beginning -- the first problem is that the
data now has to come from two tables that do not share a common key --
and revise the database queries, data formats, data structures, etc.

I griped (to anyone who would listen) that this requirement to
generate task documents accounting for tasks to be performed by
multiple individuals was a critical functional requirement, and I
DIDN'T FIND OUT ABOUT IT UNTIL THE SOFTWARE WAS A WEEK LATE!
It wasn't that this requirement wasn't known, these documents have
been generated for years, the manager wasn't aware of the details, it
just worked, and assumed that I knew the details. The guy who did the
front end had his methods for accounting for this requirement, but he
wasn't available. I'm guessing that he made the corrections manually,
but he had access to sources of data that I do not have.

It mystifies me that a critical requirement of this nature wouldn't be
specified until after the software had been written, and when the
software was already late. Apparently there's some universal law that
states this, but I don't know what the law is, or why the law is.

I know what some on c.l.p.m. will say -- don't correct the software
but comply with the wrong requirements, or get another job, but these
aren't realistic.

I'm just blowing off steam, decompressing. I've been pretty beat up
over the last three weeks, I'm about to take the rest of the week off,
and I just wanted to relate my experience. Thanks for listening.

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

cc> It mystifies me that a critical requirement of this nature
cc> wouldn't be specified until after the software had been written,
cc> and when the software was already late. Apparently there's some
cc> universal law that states this, but I don't know what the law
cc> is, or why the law is.

This is not mystifying. It has to do with the people who do the job
every day not thinking about the details, because they're internalized.

The problem is that this lack of communication has somehow become *your*
problem, and you seem to have accepted that. Doing that just sets
yourself up for more frustration and more failure.

Charlton


--
Charlton Wilbur
cwilbur(a)chromatico.net
From: J�rgen Exner on
ccc31807 <cartercc(a)gmail.com> wrote:
[Story of long suffereing snipped]
>DIDN'T FIND OUT ABOUT IT UNTIL THE SOFTWARE WAS A WEEK LATE!
>It wasn't that this requirement wasn't known, these documents have
>been generated for years, the manager wasn't aware of the details, it
>just worked, and assumed that I knew the details. The guy who did the
>front end had his methods for accounting for this requirement, but he
>wasn't available. I'm guessing that he made the corrections manually,
>but he had access to sources of data that I do not have.
>
>It mystifies me that a critical requirement of this nature wouldn't be
>specified until after the software had been written, and when the
>software was already late. Apparently there's some universal law that
>states this, but I don't know what the law is, or why the law is.

So, what was the feedback from those people when you presented your
spec? Did they miss the flaw, too, and signed off on the misguided
concept?
And what about during the testing phase? Yes, testing should primarily
check if the code complies with the written specification, but at least
in the later parts when actual users check out if the progam meets their
needs, then they should have noticed that critical functionality is
missing.


Honestly, looking at your long history here in this NG you are in this
way over your head and while you are trying to make up with a lot of
enthusiasm and determination it is hard to overlook that you are missing
basic skills for the job you are supposed to do.

It's like you know how to use a hammer and a saw and you are actually
rather skillful with those. So you are building garden sheds and the
occasional deck or gazebo and you turn them out on demand, in decend
quality and functional. But that doesn't automatically qualify you to
build a house or like in this case an add-on garage with mother-in-law.

Those projects simply require planning, organization, and preparation
skills (aka project management) which you don't have. And, if you excuse
me for saying so, which you have shown little interest to learn or to
adapt.
It's really the same story over and over again: you need to get your
nose out of the editor and stop worrying about those pesky syntax
errors. The actual coding part is only one small portion of the whole
development process and you have to start looking at the bigger picture
and understand development processes in context or things like this here
will keep happening again and again and every single time you will get
more and more frustrated.

Now, I do understand that there are people who couldn't care less about
project management and love spending all their day coding from dawn to
dusk instead. Fair enough, there's nothing wrong with that.
But based on your stories your position is not a position where you have
the luxury to do that. There is nobody else who would provide this
service for you, nobody you would talk with the users, gather and
organize their requirements, organize your coding work, organize the
schedule, testing, feedback gathering, and and and.
Therefore you either have to grow into that role or find someone else to
cover that role. Because as long as you keep applying the same
non-functioning process you cannot expect the outcome to change for the
better.

jue
From: ccc31807 on
On Apr 1, 2:19 pm, Charlton Wilbur <cwil...(a)chromatico.net> wrote:
> The problem is that this lack of communication has somehow become *your*
> problem, and you seem to have accepted that.  Doing that just sets
> yourself up for more frustration and more failure.

I agree that the problem is lack of communication. As to the back end,
my main database query used a table that had EXACTLY one person per
task. As I mentioned, I have been doing this for years, and had ALWAYS
submitted a data file with one person per task.

The intermediate person, the one who is not available to talk to,
apparently manually adjusted the data files, because the ultimate
file, when delivered to the manager, was correct. In this case, the
requirement that on a few occasions a multiple number of individuals
could be assigned one task was 'unknown' in the sense that I didn't
know it, and the managing executive didn't know it.

I agree that the software had a bug, and the bug was my
responsibility, but how do you protect yourself from 'unknown'
requirements, in the absence of the person who actually KNOWS the
requirements?

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

cc> I agree that the software had a bug, and the bug was my
cc> responsibility, but how do you protect yourself from 'unknown'
cc> requirements, in the absence of the person who actually KNOWS
cc> the requirements?

There are dozens of books written on this, and understanding their
contents is what separates a software engineer from a code monkey.

The fundamental rule, however, is that before you type a single
character of Perl you should have a clear, unambiguous statement, agreed
to by the business owner of the process you're automating or
facilitating, of what the requirements are for the phase of development
that you're in. When you have that statement, then you can estimate how
long it will take and what it depends on. Everything else is details.

Your problem, professionally, is that you don't get that unambiguous
statement, and if you do, and it turns out to be wrong, you accept
the blame and vent here. So long as you accept the blame and fix it,
the people in your organization have no incentive to change. If they
get the requirements wrong, they just pass the blame on to you. As long
as you keep on accepting it, nothing will change.

Your responsibility is to make sure you understand as well as possible
what the business process owner is asking for, and to give him what he
asks for. His responsibility is to ask for what he really wants. There
is no reasonable way for you to take on his responsibility, and your
biggest problem is that you allow him to foist it off on you.

Charlton





--
Charlton Wilbur
cwilbur(a)chromatico.net