{"id":458,"date":"2013-01-20T20:09:25","date_gmt":"2013-01-21T04:09:25","guid":{"rendered":"http:\/\/zuill.us\/WoodyZuill\/?p=458"},"modified":"2015-06-09T14:49:34","modified_gmt":"2015-06-09T22:49:34","slug":"can-we-code-without-estimates","status":"publish","type":"post","link":"https:\/\/zuill.us\/WoodyZuill\/2013\/01\/20\/can-we-code-without-estimates\/","title":{"rendered":"Can We Code Without Estimates?"},"content":{"rendered":"<p>Can we write code, create software applications,\u00a0without doing estimates*?\u00a0 I think there are at least some cases where estimates are not needed.<\/p>\n<h4>In The Beginning<\/h4>\n<p>I bought\u00a0a computer in 1982 or 83 for the purpose of managing aspects of a business I had.\u00a0 My business was essentially a small custom manufacturing business of sorts, and I had very little money.\u00a0 No capital, just cash flow. I would\u00a0sell some work, get a deposit, buy the materials and supplies for the work, do the work, get the balance on delivery, pay some bills, pay the rent,\u00a0and go on to the next job.\u00a0\u00a0Every\u00a0hour I had was needed\u00a0to earn money,\u00a0 or support the overhead of doing business. \u00a0Additionally, I would spend some time improving my capability to more effectively make money, reduce costs, or &#8220;take care of business&#8221;. Payback for that time needed to be quick, not in two weeks, but in two days, or two hours.\u00a0 Every penny counted.<\/p>\n<p>So I now had a computer, but none of the software I bought\u00a0worked well enough to help me.\u00a0\u00a0I wanted to do\u00a0simple stuff &#8211; like mailing lists, simple bookkeeping, making estimates for manufacturing jobs, writing invoices &#8211; \u00a0stuff like that.\u00a0 I also wanted to do some very specialized things, like controlling devices:\u00a0material cutting plotters, measurement devices, and imaging equipment.\u00a0 But software was expensive, and it was mostly useless in those days.<\/p>\n<h4>Computers can help us do bookkeeping, right?<\/h4>\n<p>One important reason I wanted a computer was to keep my books. I wanted to spend less time doing my bookkeeping.\u00a0 I had bought an application that was supposed to do simple bookkeeping: Keep track of money spent, allocate it to varioius accounts, keep track of the checkbook, reconcile the checkbook, do income and expense reports,\u00a0 profit and loss reports, year end stuff, and so on.\u00a0 Trouble was &#8211; it didn&#8217;t work well at all.\u00a0 It was difficult to use, made mistakes, and the data got corrupted after a couple months of using the application.\u00a0 It was truly useless and worse: it wasted a lot of my time.\u00a0 I tried several other applications that friends of mine were using &#8211; but none of them made things easier than doing the work by hand.\u00a0 I wanted my computer and software to save time, and make it easier for me to focus on getting and doing work.\u00a0 It wasn&#8217;t able to do that.<\/p>\n<h4>Earn as you Learn &#8211; Or At Least Try<\/h4>\n<p>So I decided to try writing my own &#8220;bookkeeping application&#8221;.\u00a0 It&#8217;s just numbers, right?\u00a0 Computers work with numbers, right?\u00a0 Shouldn&#8217;t be too hard.\u00a0 Before we go any further, I&#8217;ll &#8220;skip to the end&#8221; and let you know: It was not hard at all.\u00a0 It turns out that computers ARE good at working with numbers, and you just have to find a reasonable way to let users interface with the computer, and some way to show stuff on a screen, and some way to send stuff to a printer, and some way to save data to a disk so you can use it the next time you want to work with it, and some way to do the calculations and other work actions.\u00a0 These are all easy things.<\/p>\n<p>I had no experience writing applications at that time beyond some games and little text editing apps and similar things that came from books I was learning from.\u00a0\u00a0For my first project I needed\u00a0something that would return back the time I spent right away.\u00a0 Seemed the checkbook part of the bookkeeping app\u00a0would be the place to start &#8211; you need to put expenses and income into the system before you can do much else, and it would save me some of the time it took to do that work by hand.<\/p>\n<h4>A Simple Checkbook Application &#8211; Find A Small Bit Of Potential Value<\/h4>\n<p>Balancing a checkbook is\u00a0easy\u00a0enough, it took me about 2 hours a week to do the hand entry of\u00a0checks and deposits\u00a0into the paper system my accountant had\u00a0set up for me, and to update the balance.\u00a0 It also took about 3 or 4 hours once a month to reconcile the checkbook.\u00a0 I had always made mistakes in entry or calculation, so sometimes it would take longer.\u00a0 I was spending about 11 to 14 hours (or more)\u00a0each month doing the paperwork for my checkbook.\u00a0 There was no Quicken in those days.<\/p>\n<p>If I could write something that would allow me to enter a check into the system, enter a deposit into the system, reconcile the registry, catch mistakes, correct mistakes, and print out the details &#8211; that would save me 11 to 14 hours every month.\u00a0 Well&#8230; not really: It would take some of my time to do the entry of checks and deposits, and to\u00a0review the output, and correct mistakes.\u00a0 So there is the value: A time savings of perhaps 8 hours a month.<\/p>\n<p>I had NO IDEA how much time it would take to write that software.\u00a0 I had nothing to base it on.\u00a0It seemed worth a shot, but I had no way of knowing that.\u00a0 The only sure things was that I&#8217;d\u00a0learn a bit more about programming.\u00a0 The key is: I had identified a small chunk of work with POTENTIAL value.<\/p>\n<h4>Learn By Doing, Decide Based on Real Time, Real Value<\/h4>\n<p>So, I had a vague idea about value.\u00a0\u00a0I figured\u00a0I could put in about an hour each night and\u00a0I would soon learn if it was worth trying to write this code.\u00a0 In doing the work I would learn the things I needed to learn to do the work, and I could make decisions about the value being delivered.\u00a0\u00a0At any point I could decide to cancel the project or keep going.\u00a0 The decision\u00a0would be\u00a0based on value delivered for time invested.\u00a0 NOT value that MIGHT be delivered for time that MIGHT be needed.\u00a0 That seems like a bad way to make decisions to me,\u00a0at least in some cases.\u00a0Real value, real time.\u00a0 Take action, make decision, take action, make decision.\u00a0 A small amount of real work delivers enough value upon which to make a decision.\u00a0 Deliver early, then decide: Should we do more, or try again, or change directions, or expand or reduce&#8230; whatever.\u00a0 Baby steps every step of the way.<\/p>\n<h4>The First Bit Of Functionality: Data Entry<\/h4>\n<p>The first value I could see: Ability\u00a0to enter in checks (number, payee, date,\u00a0amount, etc.),\u00a0save as a file,\u00a0and print it out on paper.\u00a0 This would be exactly what I was currently doing with pen and paper, and I could do the totals by hand with a calculator just like I had been doing.\u00a0 So that is where I started. Not much value, but provided a way to &#8220;amplify learning&#8221;.<\/p>\n<p>Now, it seemed that this &#8220;functionality&#8221; could be &#8220;written&#8221; without writing any code.\u00a0 The user (me) could just use the existing\u00a0text editor to type in the data in a specific format.\u00a0 How long did\u00a0it\u00a0take to code that?\u00a0 No code,\u00a0no time.\u00a0 I just needed to define a format.\u00a0 How robust was that?\u00a0 Not very!\u00a0It would be easy to make mistakes in data entry\u00a0&#8211; but I needed to get real functionality\u00a0quickly.\u00a0\u00a0Same old same old.\u00a0 That&#8217;s software development, so I&#8217;ve learned.\u00a0 Once the code is in use the most painful stuff will be revealed, and we can\u00a0fix that first.\u00a0 Might never need to do anything more than the minimum.\u00a0 Try to keep it that way.<\/p>\n<h4>Writing to a file was easy enough.\u00a0 What to do next?<\/h4>\n<p>I wanted to calculate\u00a0the balance of the checkbook.\u00a0I would be very close to having something truly useful if I could do that. That would require that I take into consideration deposits as well. That was easy to do, of course. Deposits are positive, checks and withdrawals were negative.\u00a0 Or something like that.<\/p>\n<p>Again, I had only an hour a night or so to spend on this &#8211; so everything was very &#8220;bare bones&#8221;, but reading the file, reading the records, and accumulating a total was easy enough.\u00a0\u00a0And essentially, the\u00a0application was ready for production.\u00a0\u00a0It was useful. Lame, but useful.\u00a0 Value was delivered, and it showed the project was viable.\u00a0 There were a number of features to add before it would be &#8220;easy to use&#8221;.\u00a0I still often made data entry mistakes, but I could fix those by simply opening the file with the text editor and making the needed change to the data. Over time, I added much of that functionality, and eventually it became my bookkeeping application.\u00a0 The development was paid for by the time I saved every month.<\/p>\n<h4>So, that was the start &#8211; No Estimates<\/h4>\n<p>I don&#8217;t think I did any estimates in this work.\u00a0 If you think I did, please let me know and I&#8217;ll clarify the process.\u00a0 Or maybe I was wrong!<\/p>\n<p>The process for me:\u00a0Choose something of potential value, find the simplest thing I can think of, and try to do it.\u00a0 If it works, I go on to the next bit that seems to have value, if it\u00a0doesn&#8217;t work I try something else. Repeat until the payback doesn&#8217;t seem worth it anymore &#8211; at which point I can move to another &#8220;project&#8221;.<\/p>\n<p>This is a very minimal example. It&#8217;s real, and it is where I started.\u00a0 I used this same basic pattern to write a lot of software for myself over the next 15 years.\u00a0 I never had a need to estimate anything.\u00a0 I didn&#8217;t even think of making estimates.\u00a0\u00a0 Someone once told me that necessity is the mother of invention.\u00a0\u00a0I&#8217;m not sure about that, but I just haven&#8217;t had enough time to waste on inventing things that I don&#8217;t need.<\/p>\n<p>I&#8217;ve used this same apporach on much larger projects, in various situations, and with\u00a0a number of different projects types.\u00a0 I think some form of this approach can work for just about any project.<\/p>\n<h4>Please don&#8217;t yell at me<\/h4>\n<p>Before you start yelling, and before the veins start popping out on your head, please understand: in this post\u00a0I AM NOT SAYING THAT ESTIMATES ARE NOT NECESSARY FOR MANAGING SOFTWARE \u00a0DEVELOPMENT in your situation.\u00a0\u00a0I am simply saying that estimates are not needed for designing, coding, testing, and delivering software into use.<\/p>\n<p>The process you implement for managing the business of making software might require that you do estimates.\u00a0\u00a0 But that necessity has nothing to do with writing software &#8211; that necessity is imposed by people who haven&#8217;t yet invented a better way to manage their software development, their customer interactions, their collaborative abilities, etc.\u00a0 Maybe you can find a better way.\u00a0 Maybe there isn&#8217;t a better way.\u00a0 Regardless, if there IS a better way, maybe you can take a tiny step every day that moves you to a better process that does not require that you do estimates.\u00a0 That&#8217;s up to you.<\/p>\n<h4>Can We Code Without Estimates?<\/h4>\n<p>Still, I hope you can agree that we can write code without estimates.\u00a0 If you don&#8217;t think we can, I&#8217;d like to hear about it &#8211; especially if I am wrong or am missing something.<\/p>\n<h4>Some other posts I&#8217;ve written on the topic of estimating:<\/h4>\n<ul>\n<li><a title=\"Estimation is Easy and Useful: Estimate a game of Chess\" href=\"http:\/\/zuill.us\/WoodyZuill\/2011\/11\/07\/estimation-is-easy-and-useful-estimate-a-game-of-chess\/\">Estimation is Easy and Useful: Estimate a game of Chess<\/a><\/li>\n<li><a title=\"Do Estimates Do What We Want Them To Do?\" href=\"http:\/\/zuill.us\/WoodyZuill\/2012\/12\/06\/do-estimates-do-what-we-want-them-to-do\/\">Do Estimates Do What We Want Them To Do?<\/a><\/li>\n<li><a title=\"No Estimate Programming Series \u2013 Intro Post\" href=\"http:\/\/zuill.us\/WoodyZuill\/2012\/12\/10\/no-estimate-programming-series-intro-post\/\">No Estimate Programming Series \u2013 Intro Post<\/a><\/li>\n<li><a title=\"No Estimate Approach For End-Of-Life Legacy Support\" href=\"http:\/\/zuill.us\/WoodyZuill\/2013\/01\/09\/no-estimate-approach-for-end-of-life-legacy-support\/\">No Estimate Approach For End-Of-Life Legacy Support<\/a><\/li>\n<li><a title=\"Notes From A Conference Session On No Estimates in Software Development\" href=\"http:\/\/zuill.us\/WoodyZuill\/2013\/01\/10\/notes-from-a-conference-session-on-no-estimates-in-software-development\/\">Notes From A Conference Session On No Estimates in Software Development<\/a><\/li>\n<li><a title=\"A Comment And Response from Estimate Chess Post\" href=\"http:\/\/zuill.us\/WoodyZuill\/2013\/01\/10\/a-comment-and-response-from-estimate-chess-post\/\">A Comment And Response from Estimate Chess Post<\/a><\/li>\n<\/ul>\n<p>NOTES:<\/p>\n<p>* For the purpose of this article, the sort of estimates I am discussing are the estimates typically asked for on many software development projects where a project, a feature, or a function, or a bug fix (or where a list of features or functions) are described and people are asked to come up with an approximate cost in time, money, or effort to do the work that will be required to provide the feature(s)\/function(s)\/capability(ies)\/bug fix(es) being requested.<\/p>\n<p>Disclaimer: There are many situations where estimates can be meaningful and useful. \u00a0This article is about situations where I don&#8217;t think they are typically meaningful or useful, and only in the realm of software development.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Can we write code, create software applications,\u00a0without doing estimates*?\u00a0 I think there are at least some cases where estimates are not needed. In The Beginning I bought\u00a0a computer in 1982 or 83 for the purpose of managing aspects of a business I had.\u00a0 My business was essentially a small custom manufacturing business of sorts, and [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,21,22,24],"tags":[],"class_list":["post-458","post","type-post","status-publish","format-standard","hentry","category-boring-story","category-estimating","category-no-estimating","category-noestimates"],"_links":{"self":[{"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/posts\/458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/comments?post=458"}],"version-history":[{"count":25,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":1033,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/posts\/458\/revisions\/1033"}],"wp:attachment":[{"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/media?parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/categories?post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zuill.us\/WoodyZuill\/wp-json\/wp\/v2\/tags?post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}