Newsletter: Best student credit card Top debt consolidation loan Bad best card credit credit California home loan online Credit card consolidation uk Florida bad credit mortgage 0 credit card offer No apr credit card Consolidated credit counseling services American express costco credit card 0 approval card credit instant Free phone no credit card Debt consolidation equity loan Credit card debt elimination Bad credit home loan mortgage services Credit counseling of america Bad credit loan mortgage ohio Consumer credit info Adjustable home loan mortgage rate Card credit interest low rate student Bad credit debt consolidation Christian consolidation debt services Second debt consolidation mortgage Corporate credit card uk Bad credit florida loan mortgage Shell oil credit card Best home loan mortgage rate refinance Excellent credit score Instant student credit card Bad credit need a credit card Card consolidation credit debt management Federal student loan repayment program Debt consolidation credit counseling Easy personal loan Trans union credit report dispute Georgia mortgage home loan Best free debt consolidation service Buyer california first home loan time Instant approval 0 credit card Loan program repayment student Trans union credit report Loan stafford student Free instant credit report Shell oil credit card Credit online report Home equity loan tax deduction Credit experian report Consolidation fannie loan mae student Card credit free no porn required video 200 loan no payday telecheck teletrak Accept credit card payment online No limit credit card Best equity home loan quote Accept credit card by phone First national merchant credit card Approval canada card credit instant Credit card services merchant account Cheap credit card rate Card consolidation credit debt Hsbc rs credit card Annual credit equifax free report Credit card instant credit Home loan mortgage rate Private alternative student loan Card credit interest low student Apply business card credit small College credit card Instant approval canadian credit card Commerce bank credit card No fee secured credit card uk Consolidation debt loan non profit Bank federal home loan seattle Credit card no checking account Home loan cleveland ohio Free credit score canada New millennium bank credit card Bad credit gas card Family credit counseling Bad consolidation credit debt Student loan consolidation rule Bank card credit credit one Bad credit student personal loan Credit experian report score Debt free with credit counseling Miami home equity loan Non profit debt consolidation service Card consolidation credit debt management Credit fico free report score Bank boston federal home loan Pennsylvania home equity loan rate Bad credit loan mortgage tennessee No down payment credit card Bankruptcy home loan Bad car credit loan used Bureau credit rating Bad credit loan private student Home loan low mortgage rate Christian debt consolidation loan Credit score explanation Apply for gas credit card Bad credit mortgage California home loan online Card credit mbna secured Debt management credit counseling College student credit card debt statistics Access card com credit mbna net Consolidation credit debt loan Advice blog consolidation debt Bad business credit en language loan Student loan finance corporation Credit repair consultant Credit card counseling service Bad credit indiana loan mortgage Credit card merchant account Credit card services for business Debt consolidation loan bank Credit and debt counseling Home loan mortgage rate va 1 hour payday loan Mobile home loan texas Answer card credit instant Credit card business travel Chase credit card customer service Credit report company Personal student loan Unsecured credit card offer Florida mortgage loan debt consolidation Bad credit personal loan company Chicago counseling credit Starting a credit repair business Bad card credit credit loan uk Reward 660 credit card Quick cash payday loan Application card credit instant response Secured personal loan bad credit Texas home equity loan refinancing Delaware home equity loan Credit card with no bank account Free sex no credit card Bad card credit credit unsecured California debt consolidation loan Consolidation counseling credit debt Chase business credit card American express prepaid credit card Refinancing mortgage loan debt consolidation New jersey debt consolidation loan Loan mae salli student Direct merchant credit card bank na Florida free debt consolidation loan Card credit online use Cheap.com link loan payday Free credit report online free Yearly credit score Debt consolidation help Credit card for international student Delaware debt consolidation loan Consolidation debt loan personal uk Card counseling credit service Credit card reward program American express credit card company Bank of scotland credit card Card college credit student visa Credit free pennsylvania report Approval card credit guaranteed instant Mortgage calculator home loan refinance Christian consolidation debt loan Bad credit start up business loan No credit card credit report Christian consolidation debt free Free music download no credit card needed Credit free missouri report Card credit discover payment Equifax credit score Cheap credit card processing Free debt consolidation help Home owner personal loan Free business credit report Consumer credit counseling service Guaranteed loan personal unsecured Bad card credit credit unsecured Debt consolidation loan online uk Compare credit card company Personal loan pay day loan Bad credit down loan mortgage no payment Credit card processing center Discover credit card application Acs loan payment student Personal loan for college student No credit card required porn Credit experian report Loan nelnet student Consumer credit union Direct merchant bank credit card application Uk credit card California home loan modesto Low interest rate visa credit card Guaranteed business credit card Bad auto loan credit lead Va home loan certificate Credit card machine sales Bad credit guaranteed loan unsecured Personal loan in the uk Card chase credit song Bad card credit secured Personal loan to consolidate debt Advance america payday loan Raleigh credit card processing company Business credit card online application Card college credit student By credit free law report Christian credit counseling san antonio Poor credit home loan Credit equifax from report Bad bill consolidation credit loan Small business credit card application 0 balance card credit life transfer Bad credit in loan mortgage wisconsin Chase.com credit card Application card credit interest low California equity home loan mortgage second Bank federal home loan Home interest loan rate Credit card company Consolidation loan service student Acs loan servicing student Fargo loan student well Master card credit card Free cell phone no credit card required Bad credit home loan va Sallie mae student loan Current home loan rate Debt consolidation loan without owning a home Illinois payday loan Advance cash loan payday software Student balance transfer credit card Instant personal loan guaranteed unsecured Cash advance payday loan Consolidation direct loan student Home interest loan rate va Non profit debt consolidation loan Best home loan mortgage rate Bad credit home homeequity1.us loan mortgage Business card credit small terminal Secured platinum credit card Bad credit home loan washington Student loan consolidation Secured credit card high limit Free mortgage quote bad credit Bad consolidation credit debt loan personal En language loan personal Credit free report Credit debt consolidation loan Car loan bad credit history Account card credit forum merchant Consolidation credit debt loan poor Florida mortgage home loan Do it yourself credit repair Va home loan Bad credit loan mortgage ohio Prepaid credit card canada Student one credit card Clean credit report Beacon credit report score Home equity loan comparison Texaco shell credit card Card com credit providian Direct merchant bank credit card Canadian credit rating Card chase credit manhattan services Bank of america home equity loan Bad credit mortgage loan lender Personal loan after bankruptcy Bad credit loan mortgage pennsylvania Good credit card rate Home loan uk 600 credit score Bad credit repair report Check credit report online Government home improvement loan Bad credit mortgage rating Stop credit card offer Providian credit card application Bad credit unsecured loan Equifax free online credit report Best business card credit small 2nd bad credit loan mortgage Auto loan for people with bad credit Credit free history report Florida free debt consolidation loan Bad credit payday loan Home improvement loan maine Rhode island bad credit mortgage Secured credit card company California company home loan 100 credit free report Card credit low processing rate Accept card credit line payment Bad credit mobile home loan Christian debt consolidation Best credit card online Car loan for college student Average debt loan student Consumer credit protection act Bad credit refinancing home loan Bad credit bank loan National credit repair Prepaid credit debit card Should i consolidate my student loan Bad credit bank account Best credit card deal Bad credit free repair En language loan personal Hawaii home loan Equity loan home improvement Check credit report identity theft Credit free new report york Countrywide home loan mortgage Bad credit mobile home refinance California credit repair Credit repair lead Alaska home loan Cheap find credit card Beacon credit free report score Credit card reward Consumer credit online report Credit free once report year Online home improvement loan Equifax business credit report Trans union personal credit report Countrywide customer home loan Bank of scotland credit card Debt consolidation loan for non home owner Delta airline credit card Chase credit card company Florida home loan mortgage Home loan owner personal secured uk 1000 loan no payday telecheck Bad credit home loan help Calculator card credit payment Cash fast loan payday Credit card debt fact Bad credit mortgage wisconsin Home owner loan Mortgage credit rating Union plus credit card Consolidate federal student loan Free cell phone no credit card needed Canada card consolidation credit Secured personal loan No credit card car rental Home improvement grants loan Instant decision credit card 600 credit mortgage score second Free credit report score trans union Application approval card credit instant Credit free get online report Consumer report best credit card Apply for american express credit card Payday loan store Card credit unsecured Instant credit card offer Card card com credit hsbc Compare equity home loan rate Chase manhattan credit card Annual credit free program report College loan parent student 0 apr credit card Best airline reward credit card Washington mutual home loan Free personal credit report online Card company credit find processing Federal home loan bank of new york Balance card credit low transfer 0 apr card credit transfer Bad credit auto loan financing Us bank credit card Secured credit card offer Home improvement income loan low Credit equifax report trw Free online credit report without credit card Bad credit home improvement loan Poor credit georgia home loan Home loan for home improvement Bad credit refinance Card credit increase minimum payment Consolidation debt loan personal uk Credit card merchant terminal Consolidation defaulted loan student Free credit report texas New jersey home mortgage loan Beneficial personal loan Card consolidation credit free Company credit card policy Free instant online credit report American express credit card Credit card debt consolidation service Countrywide equity home loan Ameriquest card card credit master platinum Consolidation debt uk Free bad credit personal loan National average credit score Bad consolidation credit debt mortgage Bank card credit secured us Mobile gas credit card Bad credit cell phone Bankruptcy bad credit personal loan Consolidation credit debt rating Check credit report Consumer cooperative credit union Colorado home equity loan Christian credit counseling American express black credit card 0 introduction rate credit card Card company credit dealing Compare consolidation loan student Va home loan Apple fast cash personal loan America card mbna credit bank Free credit card generator Buying a home with bad credit Free credit rating score Advance cash loan payday quick Mortgage vs home equity loan Credit card processing solution Home loan bad credit ok Credit free law report Va home loan rate Student loan consolidation incentive Fast private student loan Get mortgage bad credit Bad canadian card credit credit Texas construction home loan World savings home loan Gas credit card application Austin christian counseling credit Credit card debt settlement Bad credit mobile home loan Secured credit card fast Gas reward credit card Instant access credit card Circuit city credit card application Best deal prepaid credit card Disney chase credit card Non secured credit card Cheap credit report Consumer credit agency Home equity loan payment calculator Christian consolidation counselor debt Counseling credit debt management services Low interest personal loan Card college credit offer student Card credit credit poor unsecured Card credit depot home payment Home loan equity mortgage rate California bad credit car loan Bad credit debt consolidation 3 bureau online credit report Credit free michigan report Small personal loan bad credit Bad credit refinancing home loan Secured bank visa credit card Card chase credit online payment Repair credit with debt settlement Consolidation credit debt repair Credit debt consolidation Online credit card processing services California christian consolidation debt 3 credit free report Fha home loan Canada card company credit Bad card credit credit uk Online credit card fraud Bad credit mortgage uk Credit card rate Loan pay student Credit free it repair yourself Credit card debt advice Address credit equifax report Bureau credit free report Bad credit cash loan Card credit search uk Countrywide home loan payment Pay off credit card debt Georgia free credit report Texas home equity loan law Accept credit card online free Uk credit card apply Student loan consolidation Credit equifax report sample Bankruptcy credit repair Credit repair book Mobile home land loan Second mortgage and home equity loan Credit card debt management uk California home loan stockton Bad card credit credit student Bad credit loan online personal Bad credit home purchase loan Credit card embossing machine Card credit online payment shell Mortgage debt consolidation loan company 0 card credit interest uk 0 credit card application Credit repair agency Do it yourself credit repair kit Kansas city home equity loan Bad card credit credit guaranteed Lexington law credit repair Bad credit debt consolidation mortgage Good credit score number Free music download no credit card needed Bad card credit history visa Apply for low rate credit card Free music download no credit card Bad credit secured card Refinance home equity loan Home equity loan pro and cons Credit debt consolidation loan Washington mutual secured credit card Consolidation debt online service 0 balance card credit transfer Business communication credit guffey refusal Capital one credit card canada Cheap credit card deal Aspire visa credit card Best reward credit card Credit debt elimination Credit card numbers Find credit rating Whats a good credit score Consolidation credit debt help Consumer credit counseling of america Home equity loan No credit credit card Low cost payday loan Apply credit card bad credit Credit equifax identity report theft Card credit login mbna Consolidate loan private student Credit card terminal repair Bad credit home loan va High risk personal loan Credit counseling in arizona Bad credit school loan Payday cash loan Bad credit guarantee loan mortgage Short term personal loan Bad credit home loan mortgage 0 finance credit card Debt consolidation defaulted student loan Student loan refinancing Bad credit loan for non home owner Erase credit card debt Colorado home mortgage loan Missouri payday loan Bad credit business card Bankruptcy home loan Accepting credit card online Credit information report Credit card application on line Chase home equity loan Free prepaid credit card Countrywide home loan College hazlewood hinson loan student How to read an experian credit report Bad card credit credit need Auto bad credit loan military Bad credit home mortgage loan quote Equity home loan massachusetts rate Credit card rating Free credit score repair Home loan for people with bad credit Apply for a providian credit card Poor credit rating loan Consolidation loan debt loan Bad credit car loan Card credit payment Negotiate with credit card company Credit card counseling Bank federal home loan rate Bad business card credit credit 0 business card credit interest Construction florida home loan Colorado bad credit mortgage Credit free jersey new report Online visa credit card Federal student loan interest rate 610 credit mortgage score second Card college credit debt student Paying off credit card debt State bank of india credit card Consolidate consolidation counseling credit debt debt Great lake student loan consolidation Personal loan bad credit 5000 Bad contact credit loan mortgage officer Card credit goodyear payment 800 credit card debt Home equity loan lowest rate Credit union master card online Credit repair tip Absolutely credit free report Bad credit home loan mortgage refinance Eliminate credit card debt Bad credit home loan mortgage se Student loan for people with bad credit Free bad credit personal loan Secured corporate credit card California home loan services Card consolidation credit debt help California home loan refinancing Bad card credit credit rating Bank card credit ge money Credit card terminal Personal debt consolidation loan California home loan mortgage refinancing

Software != Construction (II - The Differences)

January 4th, 2007 | Leaderware | SDLC | Software | Technology

This is the second article in the Software != Construction series. The first article focuses on why it matters:

  • With construction metaphor, we assume software has properties of constructions that it does not have, namely
    1. Construction building effort can be fully parallelized - so can software (this is the mythical man month myth)
    2. Construction can be done by many cheap labors - so can software (this fuels the offshore movement)
  • These thinking lead to the focus on reduction of software development cost, rather than focusing on adding value through software, focusing on the cost will cause outflow of technical skills in the company
  • Business in the long run need to compete with technology as enabler, and outflow of technology skills will have drastic impacts in the long run

While the construction metaphor has enabled us to realize effective planning and management increases the likelihood of successfully delivering a complex software project, the problem with using a metaphor is that it draws your attention on the similarities, and conveniently hides away the differences. We can easily see where the similarities between software and building constructions, but many cannot articulate the differences.

The trouble is - these differences matter (shown in the first article). In this article we will focus on seeing the differences. As previously stated, the focus on this series is to provide the non-technical folks (a.k.a. business folks) with an appreciation of what software really is. If you are a techie, while you might already know this, you can benefit by letting the business folks you work with read this article. Because such knowledge only resides in technical folks, we must take the burden to education the business folks to help them understand software so everyone can benefit.

First Difference

First - let’s examine the physical characteristics of buildings and software. This should be obvious, software and buildings have very different physical characteristics - one is tangible and the other is not.

Buildings are tangible. Their physical forms are, of course, buildings. One can see, touch, and live in a building. For us, we have a very good understanding what buildings are, and what they should do (provide us a space to live, work, play, and doing other things).

Software, on the other hand, is intangible. We might see software if it has an user interface, and we also might not. We cannot touch it, except touching through keyboard or mouse, and we cannot easily articulate what software can do, because it can do too many different things. For us, software is amorphous. What is the physical form of software?

If you know anything about computers you know that computer only understand 1’s and 0’s, and software are instructions to the computers. And this means that the physical form of software is 1’s and 0’s.

Separation of Design and Build

Now - let’s review the building construction process - the first stage is design, and the second stage is build (this process can be generalized to AFAIK all manufacturing processes - but that will be the focus of another article).

As previously mentioned, because buildings have substantial material (and labor) costs, it is prohibitive to fix the design once the build phase starts, and hence the best practice is to partition the design and build phase, i.e. design stops, and then build starts, and design provides only one set of input to build. Builders can just take the output from the design phase, a.k.a. blueprints, as INPUT to execute with practically no more input from the designers. And the build phase, no matter how complex, basically can be summed up as "transformation of the full design into its physical form" (we will use TRANFORMATION to mean the build phase going forward to reduce overloading on the word "build").

To sum up, in building constructions,

  • Separation of design and TRANSOFORMATION is critical
    • No back and forth between two stages
  • OUTPUT (i.e. the physical form) is the building
  • TRANSFORMATION is the regular build phase
  • INPUT is the blueprint

What is the equivalent in software?

INPUT and TRANFORMATION in Software

The output, i.e. the physical form, is of course, 1’s and 0’s. What qualifies as TRANSFORMATION and INPUT?

Remember, as defined above, TRANSFORMATION phase has no back and forth with the previous stages, and that means the regular development and test phase is very shaky as a TRANSFORMATION candidate. We all know that no matter how detailed specs are, there are always questions.

Also, spec is very shaky as the INPUT, because even we implement processes to lock specs, they still change, and for good and important reasons.

Now - some will argue that the reason for needing to ask questions and unable to lock specs are poor practices and processes, but they are overlooking a very fundamental alternative reason because they continue to think in construction metaphor:

Asking questions, going back and forth, and continue to change spec are all characteristics of the design process, not build process.

In other words, what we witness as problems are actually characteristics of a design process. If development and testing naturally fit into the TRANSFORMATION phase, we will not have these problems.

The only process in software development that meets the criteria as defined for TRASNFORMATION is the time when developers compile (and link) their source code into the binary physical form, which coincidentally often colloquially referred to as the "build process"

When one is compiling their source code, source code is the INPUT, and the compilers can take the source code and transform into the corresponding 1’s and 0’s without further input from anyone.

Quick summary for software:

  1. TRANSFORMATION is the build process, i.e. compiling and linking
  2. OUTPUT is 1’s and 0’s
  3. INPUT is the source code

The Implication of Software Build Process

This process is very fast - often seconds or minutes. Sometimes it might take hours, which seem forever, but compared against months in building constructions, all software builds are nearly instantaneous. In other words, it is extremely cheap to build software - it is so cheap that it is almost free. During the course of a project, the source code can be compiled hundreds or thousands of times. Try to do that with building constructions - one have hard time to create even hundreds or thousands of building models, and these software builds are real, i.e. they are not models, although they might not fully work.

But software projects of course, can be very expensive, and if TRANSFORMATION is very cheap, where do all the rest of the cost go? Of course it goes to design ;) That means software is very expensive to design.

The above is actually very easy to understand, but difficult to explain and grasp when we continue to live in the construction metaphor, even if one is a developer.

As Jack Reeve’s seminal article What Is Software Design points out: [1]

The overwhelming problem with software development is that everything is part of the design process. Coding is design, testing and debugging are part of design, and what we typically call software design is still part of design. Software may be cheap to build, but it is incredibly expensive to design.

If we think from this perspective, many "problems" can easily be explained:

  • Why developers and testers will continue to ask questions even with a very detailed spec - as detailed as specs are, they are not the complete design document and will contain holes. And as the coding phase continues, developers and testers are likely to uncover problems with the spec
  • Why we cannot lock spec during the "design" phase - because the design is not done until coding and testing is done. As the code is being written, it is likely to uncover problems with the earlier design that need to be revisited
  • Why people do testing and debugging cycle rather than upfront validation - because it often is cheaper to just create a build and test, and also because testing is validation, although not the only validation (Jack’s article has more detailed treatment of this particular topic)
  • Why developers cannot create perfect code in first try - because coding is also designing, which is never perfect in the first shot
  • Why we cannot do away with testing - because testing is part of the design process - its role is to validate

What Is The Takeaway?

Software is expensive because of design, not build. If you optimize to reduce the cost of the "build phase" as we understand in the construction paradigm, you are reducing the quality of your software (You might believe Offshore will give you advantage on cost without reducing in quality… you are right, under certain circumstances. And if you do not know what the circumstances are, then you are very likely to be proven wrong. We will talk about offshore in a different article).

This means that when you spend software money, you need to think thoroughly on what you get out of it, because it can be a very expensive endeavor. If your focus is on cost saving, there is not a lot of room for that in the world of software to optimize the build, and if you save on design, then you likely get crappy software. Instead, it is better to buy in this case. Let someone else carry the cost of designing the software, and you just pay for a license. You might think it’s expensive to buy, but trust me, it is cheaper than you do it yourself unless you do it for a living.

And if you are focusing on creating value through software, well, I trust you already know what this article is about ;)

[1] Jack’s article basically started the whole agile programming phenomenon, where the mantra is "source code is the documentation". I had once sent that article to my manager, who is "business" and great in taking inputs. He does not understand it. I have other business folks reading Jack’s article too but it just does not seem to jive with them. This article tries to explain some of the semi-assumed point in that article. I hope this article works better with business folks because they really decide the fate of IT projects, but only time will tell.

24 responses so far ↓

  • My number one reason why Software != Construction:

    When you’ve completed 20 stories of a building, you don’t have someone come over to you and ask “we’d like to move the building to the left by five feet. Is that a lot of work?”

    ;-)

    Warren Stevens
    Jan 4, 2007 at 8:30 pm
  • Good point. Anyone asking those questions would also ask “can you insert another floor between the 10th and the 11th floor” ;)

    yinso
    Jan 4, 2007 at 9:55 pm
  • If the code can be generated from a certain specification then do you still consider coding a design activity? I know it may sound futuristic, but MDA is a step toward that (though I do not know if it will be a success or not). IMHO, design has nothing to do with code, or UML, or anything, instead any effort which requires creativity should be included as part of the design process. Today, coding requires creativity, since our tools/methods are not mature enough to eliminate this step (from the whole process of building software solution to a specific problem) - and thus we consider it design activity. Tomorrow, it may not be.

    The first bridge builders may have built plain simple bridges without any specs/tools, and as they learnt and innovated in building those first bridges, they could consider it as design activity.

    Having said that, I think any effort to separate between design and coding is subject while not necessary. At the end of the day, you must acknowledge the difficulties of the tasks required to create your product, regardless of whether they are part of designing or building. I maybe wrong and would love to hear reasons why this separation is beneficial for developing better software.

    Nguyen
    Jan 5, 2007 at 11:44 am
  • Nguyen -

    Thanks for the comment - you’ve made some great points, and below are my thoughts:

    While I understand what you mean by “design has nothing to do with code or UML or anything”, they are the deliverables of our design effort, same as blueprints, i.e. code is NOT the deliverable of a construction effort. The software is. IMHO the distinction is important.

    If spec can generate code, then the spec IS the code. We used to “code” in machine language, then assembly comes along to generate machine language, and then 3rd-gen languages to generate assembly languages and machine languages. If MDA can generate a full rep of 3rd-gen language then we would just “write” in MDA, so MDA would just be THE new language.

    30 years ago Fred Brooks already predicts that in the foreseeable future there are no silver bullets for software engineering, and there will not be an order of magnitude of improvements, because most of what’s left are the essence - designs. He’s pretty accurate so far. But of course no one can predict distant future so maybe we will cross a day that we can have true artificial intelligence to do design for us…

    Why is the separation essential? Bottom line - People. Great software requires great people in all functions (process & tools only enable). Construction metaphor has the opposite effect - treating technical skills as commodity. IMHO, companies competing in the future need to heavily leverage technology, and that means they need right technical people. Realizing technical skills are not commodities is the first step to create a more hospitable culture to grow necessary technical talents for the future. Many people can speak to why they want to leave places that have no clue about how to grow technical people ;)

    Of course - many technical people create their own pigeonholes too. That will be the topic for future articles ;)

    yinso
    Jan 5, 2007 at 1:48 pm
  • Actually, software is like construction. A software engineer is like an architect; he creates the blueprint. The compiler is like the construction worker, turning the plan into an actual product - a house or a program.

    Obviously, compilers aren’t people, but if they were, parallelization and cheap labor would be a given. As it is, compilers already are parallized, and they’re the cheapest labor there is.

    Architects, like software engineers, can’t be paralleized, and can’t be outsourced.

    LKM
    Jan 8, 2007 at 2:36 am
  • Yinso, the part about “the spec is the code” really makes sense. I also agree with you that if the construction metaphor makes engineering managers (incorrectly) think that coding is cheap and coders are “replaceable components” then they are making the wrong use of the metaphor, although I think it’s rather hard to convince them s/t like “the code is the design”.

    Brooks’ idea is great and should be read by all engineering managers. I can recall one of my earlier boss once told me that “You guys are very fortunate, Java is damn easy to code with compared with those languages of my time”. He just completely missed the essence in Brooks’ “No Silver Bullet”.

    Nguyen
    Jan 8, 2007 at 2:39 pm
  • …and should this be added to your list of “problems”:

    - Why does software estimation suck? Because people usually estimate the specs, not the code :-)

    Nguyen
    Jan 8, 2007 at 3:25 pm
  • LKM -

    Bravo - you are right. Hope more people see it exactly the way you describe it, instead of the current belief that programming is a construction activity.

    Nguyen -

    interesting concept. Can you elaborate a bit more? Are you saying that if we are able to estimate from code we would be A LOT more accurate?

    yinso
    Jan 8, 2007 at 4:50 pm
  • Yinso, I did not really mean that - if we have the code then no estimation is needed, because the compiler can “construct” the software in a matter of seconds or minutes.

    In software, we do not estimate construction (while necessary in building construction), we estimate the design - and since software design is hard and takes so much time (we only finish design when we finish coding) while there is usually a pressure on quoting an estimate (e.g. outsourced projects etc.), software estimation will always be a black art.

    Nguyen
    Jan 8, 2007 at 7:18 pm
  • Yup - agreed. Estimation is hard if we are meant to come up with an accurate number in early stage of the project, which is when the # is most useful. This certainly makes an interesting conversation - Steve McConnell has published a whole book on the topic. A very good read.

    http://www.amazon.com/Software-Estimation-Demystifying-Practices-Microsoft/dp/0735605351

    yinso
    Jan 8, 2007 at 11:36 pm
  • I think another aspect that people seem to overlook when discussing the ‘build’ process, is that whilst a compiler is in many ways analogous to the construction workers, there are a number of substantial differences.

    Probably most fundamentally, the construction workers have an idea of what is going on, and there are people whose sole job it is to wander around the building site, watching the construction workers and ensuring that what is realised is the intent of the engineers, architects and designers - effectively the design is being refined / tweaked / tested and fixed DURING the build. My compiler doesnt do that :( It just dumbly builds whatever I ask, no matter how stupid it may be.

    Contrived Example time:

    A standard door specified to a basement utility room (marked “utility room” on the plans) that wont let any large equipment in? In an office block that is picked up, admittedly usually about the time the workers have finished installing the door and gone for smoke break, but it is almost always picked up DURING the build - rather than say, the day after the building opens. The design was not obviously flawed - the room has a door, it is just not big enough. In hindsight it is obvious, and experienced engineers will look for these things. But it still happens - that is the point of foremans and engineer inspections during construction. “Bill, this is the A/C room right? How are we going to get A/C units in that door? Lets make these doors double.”. Problem solved.

    In software, something like:

    /* overflow.c - demonstrates a buffer overflow */

    #include

    #include

    int main(int argc, char *argv[])

    {

    char buffer[10];

    if (argc

    is an example of something that should be picked up at design time, but often isnt. The compiler should see the buffer might overflow, and ask you politely if you want to change it, or use some of it’s own smarts to fix the problem with it’s own initiative. Admittedly these days many compilers warn of this sort of thing, code optimisers can find these, and so on, but many developers ignore these problems, and there are many more subtle issues that may pass through undetected by today’s cleverest compiler. Especially problems with logic.

    Pie in the sky dreaming time: Perhaps, if the code were being compiled by intelligent agents, or at least with intelligence overseeing the process, anytime a potential flaw was found, the compiler could notify the software engineer, modifications be made during the build, and so on… Higher level languages presumably would give the compiler ‘more’ initiative, etc.

    Unfortunately this to me sounds so unfeasable as to be practically impossible with today’s technology, and it would probably have dramatic effects on the time of production of software, and still not prevent poor software from being written, as the poor compiler would presumably have to submit to the will of the developer. And that is ofcourse another issue altogether - anyone can write code and compile it, and while anyone can design a building only a select few people can pursuade construction companies to use their designs - usually these are people with architecture or civil engineering degrees. And even then we still get ugly buildings!

    Andy K
    Jan 10, 2007 at 8:12 pm
  • my code got busted :( Here it is without a check for number of arguments

    /* overflow.c - demonstrates a buffer overflow */

    #include

    #include

    int main(int argc, char *argv[])

    {

    char buffer[10];

    if (argc != 2)

    {

    fprintf(stderr, “USAGE: %s string\n”, argv[0]);

    return 1;

    }

    strcpy(buffer, argv[1]);

    return 0;

    }

    ripped off from:

    http://en.wikipedia.org/wiki/Buffer_overflow

    Andy K
    Jan 10, 2007 at 8:14 pm
  • Andy -

    Good point. Yes construction workers are not robots and still uses their intelligences on the job, because there are many construction jobs out there doing something “unique” in the sense that the same building or bridge will not be built twice. In that case - it makes no sense to automate the tasks, because you reap no benefit from the investment.

    On the other hand, there are houses built by automation - for example, mobile homes, or manufactured homes. Because the goal is to mass produce, automation makes sense.

    What it comes down to is - if it makes economic sense, build CAN be automated for mass production, but not design. And in that case, most if not all human intelligence will be removed from the build effort, and we will have a factory.  Yes, the dumb compilers are actually little factories ;)

    But as you said, compilers ARE getting smarter. People are definitely motivated to make it happen, so we just have to sit back and relax ;)

    Yin-So Chen
    Jan 11, 2007 at 1:02 pm
  • […] Software != Construction (II - The Differences) » Continuous Learning A take on why programming and construction are different (tags: programming) […]

    IndianGeek » links for 2007-01-05
    Jan 17, 2007 at 6:45 am
  • […] This is when the business derive revenue direct from selling copies (generally called licenses) of the software. Because software can be cheaply manufactured (duplicated), one can sell many copies of the software easily, and the upper bound on the number of licenses is only limited by the market size. The best thing about software product businesses is that once the cost of R&D is recouped, any additional copies sold are pretty much 100% profits! This is how companies like Microsoft, Oracle, and Google make their billions and become the most powerful technology overlords in the world. […]

  • Most of the code that programmers are busy writing right now, has been written many times over and over again by many different groups. The bulk of code gets data from the database, formats it, splats it to the screen, gets the user’s response, validates it, and then dumps it back to the database. Programmers hate to admit it, but once the blueprints have been created, coding is mostly routine engineering. The creativity should go into the design, not the code. Not doing the completed design up front, pushes a lot of the design work into the coding phase, making the two seem indistinguishable, but they can be separated. On the other hand a full specification of all of the functionality of a medium to large system is a massive undertaking, and quite possibly the real problem that needs to be solved (making smaller and more readable blueprints).

    Paul W. Homer
    Feb 2, 2007 at 2:45 pm
  • Paul -

    thanks for the great comment ;) The view you voice definitely matches what the MAJORITY of the world think, so I want to treat it very seriously and carefully:

    1) It is true that a lot of what most engineers have done are routine and has been done before (not necessarily by the same dev before, but I digress)

    2) It is true that these works can be considered routine - I have certainly considered them so in the past

    3) but that does not mean software is construction work and not design work

    Let’s continue to use the same building construction metaphor. Most of the houses/buildings differ from each other in small ways and have a lot in common, even skyscrapers. Building architects employ the same same “design patterns” day-in and day-out and doing a lot of routine stuffs. By the same logic they MUST be construction workers right? Of course NOT, and they will be the first to tell you so ;)

    People are forever trying to look for similarities between construction and software engineering that they can no longer see the differences, and it is not surprising the conclusion is that software developers are construction workers because they do a lot of similar stuffs day-in and day-out.

    Well, it is true that there are a lot of routine work in software engineering, but so are the other engineering disciplines. Engineers must build on building blocks, but engineering/design is the effort putting into arranging the building blocks to make it work. And that is the case with software developers.

    I would agree with you that there are developers out there who are little more than construction workers - they need others to give them the pseudocode in order to do any work, and you will notice you might be better without them.

    If we have to use “whether the work is routine” as a measuring stick, then this argument will not get anywhere. 90% of ANY work in this world IS routine. But it is the other 10% that makes the difference.

    A better measuring stick is - if you HAVE TO AUTOMATE the effort, CAN you? YES if you are talking about construction work, but not engineering work. That is the difference.

    Lastly you are correct that doing the whole analysis/design upfront is a massive undertaking. That is why it makes no sense to treat developers as construction workers. It would be far more economical to have developers participate in designs, than to have the whole effort separated and hire code monkeys who can do no more than trasnliteration of pseudocode - they will get it wrong and you would have to redo the work anyways ;)

    yinso
    Feb 2, 2007 at 5:51 pm
  • No analogy is perfect, but there are enough strong similarities between software and construction that it is useful. Both software and construction require a creative architectural phase, and a more routine building phase. For the implementation, there are as many problems for an electrician or plumber to sort out when wiring a hire-rise as there are for most coders when building an average system or application. During construction both need scaffolding and other infrastructure work to help with maintaining the organization of the project. Both need to be checked to insure they meet the proper standards (tested). Both are hard to change once they get going, particularly software; thats why so much old code gets wrapped and recycled instead of rewritten or refactored (programmers hate to touch old code). Like development, there are many disciplines needed to build a building, including various engineers, machine operators, plumbers and electricians. For software, graphic designers, writers, support staff and testers are often forgotten about, but are absolute necessary to produce a good quality product. Bulldozers and other big machines automate construction tasks in the same way developers write scripts. Both produce tangible output (the monitor may help you see the system, but you do in fact “see” the system) and parts that are unseen (like an elevator shaft). When completed, in both cases people (users) move into the structure and start modifying it to suit their needs. Both fall into maintainence and possibly renovation phases.

    For differences, construction is much older, more precise and better organized. Because it is more visible and mistakes are more obvious the state of construction is far better than software development. Software is usually a massive undertaking, but it can be built in smaller phases (iteratively) than construction (but you can build the different wings of a building at different times). Using an iterative design in software, you can start development without knowing how it will end or what you are doing, but you’ll need to accept that you’ll have to toss lots of code, when the direction changes. You can do that in construction, build part of the structure, tear it down, then rebuild it, but your financiers will think you are crazy. Finally, the different professions that work on a construction site probably complain a lot less about their jobs than do the people working on software development. :-) Also, I have more faith that my house will continue standing up than I do that my computer will not crash :-)

    Paul W Homer
    Feb 3, 2007 at 10:17 am
  • Thanks again for the great comment, Paul. I appreciate you taking the time to think about the topic ;) Below are some of my additional 2 cents:

    You said: Both software and construction require a creative architectural phase, and a more routine building phase.

    Very few designs in any discipline is world shaking, and most are routine. But just because work is routine, that does not mean it’s construction and not design. Developers have a lot of routine design work, not routine building work. The construction in software is “compilation”, not writing code - that is something most people, even many developers, do not realize, because they are STUCK in the construction metaphor.

    Your analogy is well thought out.

    I understand the need for analogy, but this analogy IMHO has already stopped being useful. The fact is, there are *more* differences between software and buildings than there are similarities. You can duplicate software as often as you want - try that with buildings. You can morph the software any way you wish - try that with buildings. You can compile ten thousand builds (all real software, not models), try that with buildings. Or for that matter, anything physical. The financiers is smart in this case - you HAVE to separate design from construction for buildings.

    The reason you can do so with digital medium is because the construction phase is so short that it is almost *instantaneous*, and the rest is design (even routine). That is a software property many do not appreciate or take advantage, because they are stuck in the construction metaphor. Now that I think of it, most people (especially the biz folks) probably think coding is construction, because compilation is invisible to them.

    It used to be one can take years to release software, but that pace has shortened. The more one emphasize on creating the artificial separation between the phases, the more one would lengthen the cycle and/or reduce the functionality delivered, and they are just not taking advantage of the brain power they hired, but they would not know that because they still think in construction metaphor ;)

    yinso
    Feb 3, 2007 at 11:53 am
  • Building design has evolved slowly over many centuries, the differences between office towers beyond appearance is less than you might think. It took a long time and a lot of testing to validate the designs, the Eiffel tower is an example of that (built to prove that steel could be used as a framework). In a real sense, they duplicate buildings frequently, to save time, energy and insure that the underlying design will work.

    I think that sense that software can be morphed and that development is speeding up is misleading. Its hard to change the course of development once it gets going, much like the titanic, big projects steer slowly. You can write a small piece of code quickly, but that’s only 10% of getting it out there to be used by people. It must be tested, packaged and distributed. A