Subj : Expect/standards/lineItemBilling (was: How much should I charge...) To : comp.programming,comp.lang.java.programmer,comp.lang.lisp From : rem642b Date : Fri Aug 26 2005 10:45 pm > From: "Phlip" > 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? > You have no Win32? 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. > > The whole point of open source is that nobody is getting paid one dime > > for all their work, and the work will be given to the world at large > > absolutely for free, right? > 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.) .