From: "Phlip said:
about setting yourself up for impossible expectations...
I have 22+ years experience writing computer software. I expect that
should be sufficient to qualify me for *some* job by now.
If you _really_ believed in this new idea, you would write it up,
give it away for free on the Java communities, and generate some buzz.
I am not Bill Gates. I don't have the power to decide upon my pet idea,
without consulting other leaders in industry, order my staff to install
my pet idea exactly as I conceived it, without any improvements that
might be obtained by consulting with other leaders in industry, make it
a bundled part of my operating system, and thereby force my albatross
across the neck of half the computer users in the world, as a de facto
standard everyone else must follow or die.
I'm just one bright guy among many. I get new ideas, which might be
really good, but require consultation with others to get a wider idea
of how to make it a best standard that really ought to be adopted
widely. So I'm looking to find a community of developers who get
feedback from many customers, to brainstorm with me to work out the
kinks in my idea before we start trying to standardize it.
Some of my ideas don't require standardization. I'm just providing an
end-user service, and I can just write the code my own particular way,
get it working, and install it as a CGI service for others to use. But
my proposal for a portable interval-arithmetic standard, that is
essentially the same in Java, Common Lisp, Scheme, Emacs Lisp, and any
other suitable languages, requires more than just one person saying how
it'll be.
Please let me know if you were thinking of some other idea of mine, not
interval arithmetic.
If you ever get near the negotiating step again, offer to pay per
"story point". (Look it up.)
What do you "again"? When, to your knowledge, do you allege that I was
ever in a situation where I could negotiate about anything in any way
related to employment?
I tried to look up "story point" in both Google Web and Google Groups.
Virtually all references were to literature (writing fiction). The only
useful references for what you might be talking about were in "extreme
programming", that IMO ridiculous programming system where all code has
to be duplicated by two different people on a team, and where the teams
are shuffled every day or even more often, and then I presume some sort
of regression is used to determine the individual output of each
employee:
I've been looking into using a use-case driven progress-tracking
appoach based on Robert Martin's 12/2003 SD article called The Bottom
Line. The idea is that you use weighted groups of requirements (e.g.,
stories or cohesive groups of use case steps) called story points to
find out just how many story points your team can complete within a
set amount of time.
Story points is an
interesting idea, I've started tagging stories/use cases as Easy,
Medium or Hard. Is this a similar thing? Or do story points translate
to some arbitrary time/effort expense?
Is that what you're talking about there?
Then you charge to the estimate, not the actual. Demand the _smallest_
possible line items - 2 to 9 hours each - to make them easy to estimate.
I can't demand anything. I'm lucky if they pay me any money at all for
the work I do for them. The most I can do is suggest that line
micro-items might be a good way to do the billing. Then I'll give them
exactly what they say they most want instead of a whole package of
stuff that is half what they wanted and half extra stuff I thought
they'd like but I was mistaken (or they really did need it and like it
but it was "invisible" so I never got credit for it because then never
looked at my code enough to see it in there). Then later when they
realize they need more, such as the stuff I would have just thrown in
as part of the bundle using the old system, they pay me more to do
more, and it ends up the same as the old system (same total software,
same total money) except they appreciate every little thing I did,
nothing "invisible".
The reticence at the "now I need funds to put you on this job" step
is because so many of your peers have destroyed your potential
customers' faith in programmers. Yes, they would rather hire an idiot
freshly graduated to use the latest buzzword-compliant crap, rather
than a senior who knows how to prevent bugs and stabilize development.
I can't prevent *all* bugs by my all-levels unit testing, occasionally
a design oversight leaks through and I have to track down which module
is misbehaving and fix it. But one bug per month of programming, and
one day to track it down and fix it and re-test everything programmed
to date, IMO isn't a bad bug-rate for a one-person project with not
even one other person to give feedback about design or to help
unit-test large modules. Agree?
Anyway, in general I like your suggestion of charging per estimate
(standard for all contract work AFAIK) but making that charging based
on micro-features written&debugged rather than just a bulk price for a
poorly-specified overall system. It seems more likely that I can get
the customer pinned down on exactly what use cases are to be installed
if each is priced separately. (There would be two kinds of use cases in
this kind of micro-billing system: Middle-level capability, which is
apparent only in test rigs, and top-level user-application cases, which
show up in actual product. I'd make it clear which middle-level
capability is being programmed, and how it might enable a more general
class of user-application cases in the future, in addition to its need
as a foundation for the current user-application case. That should
avoid the client telling me to write totally unstructured code where
everything is inline at the topmost level with not a single reusable
mid-level utility, to reduce the number of items I bill for by a
cheapskate customer.)
Example (I'm talking to my client): You said you wanted a way for users
to log in and log out. I propose a mid-level utility which keeps track
of logged-in users in a table in a relational database. This will
support all of the following use cases easily:
- User logs in the normal way via the Web.
- User logs out the normal way via the Web.
- User loses his/her net connection, and tries to log in again while
already logged in. Option of killing old login first, or attaching to
old login and simply continuing where left off.
- User forgets to log out and leaves login hanging. Sysadmin needs to
bring down system to do backup, and therefore needs to log out all such
hanging logins first.
- User is misbehaving. Sysadmin needs to lock that user out.
At this time, I'd bill for the mid-level utility, and the first two use
cases, leaving the rest as easy options if you ever need them, OK?
That's correct. I have no access to any Windows system whatsoever,
except at the public library which allows only IE, no other program
whatsoever, not even Note Pad.
You really need to work on the positive thinking angle!!!
Lying to myself to convince myself things are better than they really
are, has never been my strong suit.
I have, however, been tricked many times, when things seemed like they
were getting better, and I actually believed they were getting better,
until I realized I had been mistaken. For example, a few times I
thought a woman loved me, only to find out that wasn't true. One time I
got a permanent job, only to be fired five months later because my
employer discovered I was disabled. Several more such examples.
No. It's to get them hooked and then charge for the upgrades. Nobody said
you couldn't start charging if someone starts using your code, then needs a
new feature. Do you think the GNU license prevents you from charging for
that?
Except the people who don't have money for software in the first place,
who therefore are forced to use free software (freeware, and open
source), are unlikely to be willing to pay for upgrades. It would be a
very small market for those tiny fraction of people not willing to pay
for the software in the first place but then willing to pay for
upgrades, like probably less than one percent of the total free users,
and even so they wouldn't be willing to pay for a new feature that cost
thirty hours of my time (a thousand dollars) unless there are at least
ten others who want exactly the same feature to share the cost.
Something general like Linux, I can see a million customers, with one
thousand of them willing to pay for an extra feature, but only ten of
them agree on exactly which new feature, and that's right at the
threshold for sharing cost $100 per customer. But I don't expect to
have a million users for some specialized tool I write. The main tools
used by millions (Linux, RDBMS, spreadsheet, WebBrowser,
mail&newsgroups, wordProcessor, incomeTaxFiling, etc.) have already
been written so there's no way I could get into those markets. I doubt
there'd be a million customers for an XML/RSS-based utility for
consolidating and prioritizing watches on various sources (newsgroup
threads, Yahoo! Groups, e-mail accounts, news wire topics, blogs,
etc.), but I might be able to attract a hundred users, in which case a
centralized server-side consolidator/prioritizer with freeware
client-side alerter would support charging for CGI directly after an
introductory free period.
So how can I find anyone in the local area (Sunnyvale, CA) willing to
purchase my services on a line-item basis, or anyone anywhere on the
net willing to brainstorm with me on a new interval-arithmetic
standard, or willing to try my various specialized utilities and give
me feedback?
(Missing word "mean", exercise for reader where it belongs.)