Slashdot Mirror


Too Much Focus on the Beginning of Software Lifecycle?

rfreedman asks: "Most of the buzz on the web about software development tools, languages, and practices seems to concentrate on getting software developed as quickly as possible. Take, for example, the current huge hype about Ruby on Rails, and how it allows the creation of a CRUD web-database application x-times more quickly than every other environment. It seems to me that this concentration on initial construction of software ignores the issue of total cost of ownership. Most people who develop software also have to maintain it, and have to support changes to it over long periods of time. As has been discussed many times over the years, maintenance is the most expensive part of the software development life-cycle. I think that the software development community would be better served by discussions of how to build more robust, flexible, and maintainable software (thereby driving down TCO), than by the endless discussions that we currently see about how to build it quickly. What do you think?"

295 comments

  1. Good point by Duhavid · · Score: 5, Insightful

    Now, how to convince the PHB's and the bean counters?

    --
    emt 377 emt 4
    1. Re:Good point by Spectra72 · · Score: 5, Informative

      It's not like programmers just love to dive into maintaining code either you know. They're usually the ones just chomping at the bit to chuck everything and start something new and exciting to put on their resume (or blog about these days).

    2. Re:Good point by Duhavid · · Score: 2, Insightful

      I've known more than a few programmers like that,
      unfortunately. I dont consider them the ideal,
      just the ones that management hires because they
      dont know what to value. The better programmers
      of my acquaintance know the value in the existing
      code, and are not hot to continually reinvent
      the wheel.

      --
      emt 377 emt 4
    3. Re:Good point by try_anything · · Score: 2, Interesting

      Specifically, how do you convince them that you're cutting corners like they want when you're actually doing good work? All these new languages/frameworks/methodologies promise that all unnecessary cruft has been taken out, which leaves me the choice of skipping something important (and plunging the project into chaos) or taking a lot of abuse from management for "not understanding the urgency of the situation."

      I need a language/framework/methodology with built-in timewasting, so I always have something expendable to sacrifice when management starts screaming, "Days matter! Days matter! Everyone has to pull out all the stops or they're not team players!"

    4. Re:Good point by nbehary · · Score: 1

      I agree....99% of what we work is existing. Me, I don't usually care, but when that new thing that doesn't exist comes along I jump on it. Not cause it helps me. I can see how the new thing helps what's there already. (and "new" is cool). Screw resume's. I Love Programming. I love giving our customer what they need. That's one of the signs of a good/great programmer. I think. (granted I'm biased in that opinion)

    5. Re:Good point by Duhavid · · Score: 1

      That's funny, I *just* happen to have a framework
      using a language with built in time wasting.
      Lots of it, more even than the fabled internet.
      ( Hard to believe, I know, but stick with it ).

      The cost is fairly minimal, and there is a methodology
      that I have worked out with it.

      My consulting team can get yours trained up and
      ready in a very short time (tm).

      --
      emt 377 emt 4
    6. Re:Good point by shotgunsaint · · Score: 1

      My Player's Handbook is properly broken in and obedient, thank you :)

      --
      The future isn't here until I can type "car keys" into Google and have it say "You left them in your pants last night."
    7. Re:Good point by jtyost2 · · Score: 1

      I have to competely agree with you, buisness today want things done today, they don't want to wait a long time to have something even if that sometimes means that product isn't going to be as good. The thoery is that it is better to have something half or 3/4ths of the way done and have it on the market than have a competior have your product on the market while you are still developing your product.

      --
      Computers are like bikinis. They save people a lot of guesswork. - Sam Ewing
    8. Re:Good point by Anonymous Coward · · Score: 0

      It's not like programmers just love to dive into maintaining code either you know.

      That's why we offshore our maintenance {*ducks*}

    9. Re:Good point by Anonymous Coward · · Score: 0

      What's with the free verse?

    10. Re:Good point by TapeCutter · · Score: 2, Insightful

      Just nitpicking the point, but the begining of the SDLC is requirements gathering not development. If you nail the requirements acuurately (eg: write the user manual first and make sure the PHB's agree in writing) your maintenance and testing battles will be half over before you write any code.

      In other words: If both the sponsoring PHB's and the developers fail to communicate to others "what the software is supposed to do" every user/tester complaint becomes a bug and the software rapidly deteriorates into a costly white elephant.

      --
      And did you exchange a walk on part in the war for a lead role in a cage? - Pink Floyd.
    11. Re:Good point by Duhavid · · Score: 1

      Absolutely right...

      While there are developers that dive right into the
      code, more often than not, the PBH's are the ones who
      dont want to allow the time to nail requirements.

      The current project I am on started well, with an
      attempt to nail requirements, then the customer got
      into "why isnt this stuff working" mode ( before my
      time, actually ), so, I have been working hard on
      getting the project out of firefighting mode ( close
      to done with that, I think, too.. ). And in many
      cases, the customer simply did not know what they
      wanted until they had something in front of them to
      work with, then the bug fest started, and we eventually
      made them happy on that front. Course, the customer
      is paying for that, many parts of this system have
      been redone several times. I count myself luck that
      I have access to several subject matter experts that I
      can talk to, pretty much any time.

      --
      emt 377 emt 4
    12. Re:Good point by acidrain69 · · Score: 1

      That would be nice, but this is not always feasible. Sometimes you are just under deadline. Example: my company is rolling out an IVR. They came to me a week before the release and said "we need a system that we can have our employees search who was in the IVR and verify their payments with our bank system, and log what those employees did in the IVR, so we can meet PCI compliance" (Paymant Card Industry, you have to log who has access to payment information, among other reasonable but annoying requirements). Site is done, it's missing a lot of functionality (you have to add users and change passwords directly in the back end DB, there is no admin page yet), but it gets the job done and it meets the requirements of logging and allowing access to certain information based on access level. I would have liked to have more time, but I didn't. I will continue to work on it after it is released, but there will be future projects that will take time away from this.

      It would be nice to spend all the time you need to get something done right the first time, but that comes at a certain expense. Look at Duke Nukem Forever. While I applaud them for wanting to get it done right, they are now a punchline/joke. There has to be a middle ground where you force a release otherwise the risk you take in continually extending deadlines is higher.

      That being said, I am not using Rails. I glanced at it and was instantly confused; I don't quite understand the whole purpose of it. I'd rather get "closer to the metal" so to speak. I'll stick with LAMP for now, until I have more time to investigate the rapid software.

      --
      -- Having a Creationist Museum is like having an Atheist place of worship
    13. Re:Good point by Duhavid · · Score: 1

      Believe me when I tell you that things like
      you relate inspired my comment. As a developer,
      I would love to do things right, give them all
      they want and then some, on or before the
      release date, but the bean counters and PBH's
      will not listen, they just keep shooting themselves
      in the foot, then blaming it on dev. ( No, dev
      is not perfect ).

      In my case, my current project is an example
      of not doing it right the first time costing them.
      Several parts of this app have been redone
      several times ( at the last minute, and great
      expense ). They got what they wanted in the end,
      but it was more expensive than it should have
      been.

      --
      emt 377 emt 4
    14. Re:Good point by usidoesit · · Score: 0

      The better programmers I know won't hesitate to chuck it if it's crap.

    15. Re:Good point by patio11 · · Score: 1

      Next time, please
      don't post from your
      cellphone.

    16. Re:Good point by Duhavid · · Score: 1

      O.
      K.

      --
      emt 377 emt 4
    17. Re:Good point by Bush+Pig · · Score: 1

      Nah, don't need the training. I already know KOBOLD.

      --
      What a long, strange trip it's been.
    18. Re:Good point by Duhavid · · Score: 1

      No, this is better than KOBOLD.
      Better than slashdot, even.

      Send me 39.95, and you will have
      it, along with a paint job for your
      car.

      --
      emt 377 emt 4
    19. Re:Good point by kinzillah · · Score: 1

      What are the shipping costs on the paint job? Will the UPS driver assist me in applying it?

      --
      Douglas P. Price
    20. Re:Good point by Duhavid · · Score: 1

      Well, we would first have to know how the kapastanr
      fits on the dumarquan, and whether the hammerstatis
      will work with the particulate structure in your
      individual automobile.

      Notationally speaking, the general range is usually
      in the 100 to 200 units, depending.

      We ship only via FooEx yesterday space transit
      company, and they have all the time in the world,
      so yes, for a small fee* they will be happy to
      do so.

      *they ship your kind donation back in time and
      invest it in the past.

      --
      emt 377 emt 4
    21. Re:Good point by kinzillah · · Score: 1

      holy shit, dude. there's got to be an incredible market for whatever you're smoking.

      --
      Douglas P. Price
    22. Re:Good point by Duhavid · · Score: 1

      You aint half right! :-)

      --
      emt 377 emt 4
  2. Justified by Umbral+Blot · · Score: 4, Insightful

    The emphasis on fast devlopment is justified, at least from a business perspective, because first to market gives a huge advantage in software, not to mention the network effect. Sure the ability to maintain and upgrade software is somewhat important, but it doesn't matter so much if it takes a long time if you are already dominating the market. Similiarily start-ups don't care about these issues since they plan on being bought out before they matter. Yes these attitudes create serious problems and lead to poorly made software, but what can you do about it? (besides using open source)

    1. Re:Justified by jt2377 · · Score: 1, Informative

      shouldn't it depend on the type of project. i'm pretty sure you don't want a banking system based on network effect

    2. Re:Justified by Anonymous Coward · · Score: 0

      I'm working with a company now doing start-up type work.

      The answer to this question is, as the parent says, they are justified.

      The answer is fairly simple: The beginning is the hard part.

      Take a start up company. It's going to have zero revenue and likely very small investment before it can demonstrate a product. Whereas, presumably, once it has a useful, valued product with a revenue stream, it can AFFORD the higher later maintenance costs of a refactor or complete rewrite.

      But at the beginning, every dollar is like sweating blood. So you need to get from point A to point B quickly, then there will be the funding to deal with the problems of the rapid journey.

    3. Re:Justified by kfg · · Score: 1

      . . .first to market gives a huge advantage in software. . .

      Business software never sees the market.

      KFG

    4. Re:Justified by swell · · Score: 2

      "first to market gives a huge advantage in software"

      This is correct only for software that is an incremental improvement over existing software; a few new wiz-bang features are added. Other companies are feverishly trying to add those same features and first-to-market may make a significant difference to the bottom line. Code maintenance is of no concern to the runners-up who have no sales.

      However, if the software in question has something new to offer, something not obvious to competitors, then there is no rush. Something new comes to the market perhaps 3 times in a year. If you can remember Pong, Asteroids and Visicalc, you know what something new is. Often they are coded thoughtfully.

      Mr. T says "I pity the fool who has to bang out version 7.5 of some boring code with a deadline 3 weeks away." Mr. T wants to see something new and exciting, something to blow his socks off.

      --
      ...omphaloskepsis often...
    5. Re:Justified by humblecoder · · Score: 5, Insightful

      Actually, being first to market really isn't that big of a deal. There are tons of products which were first to market which have slided away into oblivion because they were rushed out the door. Because they were rushed, they ended up sucking the big one. Then, another company comes out with a better, more polished version of the same product and everyone forgets about the first, sucky product.

      The dotcom bust is littered with companies whose business model was, "be first or else", and nobody seems to remember them.

    6. Re:Justified by msezell · · Score: 5, Interesting

      If you take a closer look at many of the platforms that are hot right now you will notice that the concepts that give them the ability to quickly create well designed websites also make much easier to maintain these sites. With standardization and the use of modular construction, or what some call tiered programming, you have separated the logical processes and are able to change any one part without having to reinvent the entire website. When you need to rewrite the script calls to the backend, you don't have to worry about what the output of the data will look like in the front end because they are two separate processes that hand off data to their suspected components. Think of it like Cascading Style Sheets, one change to the file and all pages using that definition are changed in on fell swoop. This has a major impact on TCO when changes can be address in a single place that will impact across the whole site.

    7. Re:Justified by DaveAtFraud · · Score: 1

      Probably absolutely correct but you'll NEVER convince a sales droid or marketing weenie of this. Further, all they have to do is say, "Lost sale becuase we didn't have feature Y and brand X does," and management will be in a tizzy. The fact that the potential customer just wanted to get the sales droid out of their office so they could get some real work done never seem to occur to anyone except the poor SOB who gets to spend nights and weekend coding feature Y.

      Cheers,
      Dave

      --
      They that can give up essential liberty to obtain a little temporary safety deserve neither safety nor liberty.
      Ben
    8. Re:Justified by rgarvage · · Score: 2, Interesting

      I would also like to add that many of these tools give you the ability to develop an idea quickly without cornering you into bad decisions. In the worst case you just redo a bad design decision. The average case I have seen is you say crap and then realize that you only need to change 3 lines of code and a filename. This has been my experience with rightcart.com and we've been out for about 30 days and had 3 releases with new features in each. That doesn't indicate perfect code level planning, but the ability to rapidly adjust (the ruby people like to call this being agile). This has given our developers (myself included) a lot of confidence in exploring new ideas and features without the fear of breaking the current system. A common line is that it makes programming fun again. Well, my experience is that a happy programmer is a better programmer.

    9. Re:Justified by cyber-vandal · · Score: 2, Insightful

      No but getting the new project out of the door as fast as possible to score political points with the board is equally as important to senior management. They don't care that the crappy code will cost the company a fortune once it's in they just want to be able to say that they managed to get a system in in X amount of time.

    10. Re:Justified by Anonymous Coward · · Score: 0

      It is a big deal... not as important as a solid business plan (after all, that's the most important thing), but given two similar products, the first one to launch can be worse, but not much of course, otherwise it will give a bad impression on costumers, and still be more successful, if it receive improvements.

    11. Re:Justified by archeopterix · · Score: 1
      Actually, being first to market really isn't that big of a deal. There are tons of products which were first to market which have slided away into oblivion because they were rushed out the door. Because they were rushed, they ended up sucking the big one. Then, another company comes out with a better, more polished version of the same product and everyone forgets about the first, sucky product.

      The dotcom bust is littered with companies whose business model was, "be first or else", and nobody seems to remember them.

      True, but they are the visible ones. The other side of the "perfect release date" are the products (and companies) that have been killed because they were too late - the silent victims that you seldom get to see.

      It seems that it's best to be the first on the market with the perfect product (2 -profit, har, har, har), hence the importance of the "fast" development methods.

    12. Re:Justified by mspohr · · Score: 1

      You really need to consider that most software (upwards of 80%) is not developed for sale but is used internally. In these cases, maintainability is much more important the time to first release since these software applications are more likely to undergo continuous feedback and enhancement.

      --
      I don't read your sig. Why are you reading mine?
    13. Re:Justified by jbertling1960 · · Score: 3, Interesting

      These attitudes are perhaps justified in a commercial software environment, but I have seen the same trends in corporate IT departments at previous employers. I have found that the progression runs like this: 1. The IT effort becomes increasingly politicized. 2. Old guard IT managers are replaced by political appointees who have no real IT experience. 3. These new managers lack the experience and insight (and often the maturity) to measure the real level of progress in software development and, because they feel that they must have something to measure, schedule becomes the only measurement. When I began writing software professionally in 1985 (Yes, I am ancient), it was pretty well recognized that a schedule was a tool by which you measured your progress toward a predefined goal. Now days, the schedule is the goal. So because people tend to perform toward there goals, we get schedule. What we don't get is quality, sustainability, customer satisfaction, etc. Also, as an added bonus, we get developer burn-out, high turnover rates, and an us-versus-them mentality between corporate IT and their customers in the business groups that have to use the steaming pile systems produced by these attitudes.

    14. Re:Justified by Anonymous Coward · · Score: 0

      First to market advantage? That statement is completely at odds with reality.

      - Amazon was not the first e-commerce site. Advatage: scale, ease of use
      - Google was not the first search engine. Advatage: quality, ease of use, scale
      - Microsoft was not the first in anything. Advantage: quickly execution of agressive business tactics.
      - Ebay was not the first on-line auction site. Advantage: ease of use, scale
      - iPod was not the first portable music player. Advantage: ease of use, scale (initially)
      - iTunes was not first music store. Advantage: ease of use, scale

      Looks to me like second to market with higher quality, easier to use, and larger scale (or more content) wins (except MS which will remain the singular anomoloy). First to market is usually dusted.

      I'd say ability to scale, test, maintain, and extend code are the best things you can have.

    15. Re:Justified by Tablizer · · Score: 1

      Actually, being first to market really isn't that big of a deal. There are tons of products which were first to market which have slided away into oblivion because they were rushed out the door.

      Most of the big dot-coms were established by early 1996. If you came in 97+, statistically you were hosed. The by-96'ers were good-enough and early. Bad and early will get you hosed, and so will late and good-enough. Maybe late-and-great would work, but those didn't happen very often. Being early-and-good-enough seemed to be the right dot-com formula.

    16. Re:Justified by stonecypher · · Score: 1

      The emphasis on fast devlopment is justified, at least from a business perspective, because first to market gives a huge advantage in software, not to mention the network effect.

      Tell that to Yahoo! Groups and Friendster. When the quality of your service suffers, a competitor will take your userbase away. Things like RoR may be great for getting to market first (and that's in fact fairly arguable when you get past trivially simple example code,) but they quickly turn into a ball-and-chain when you start having to face extensibility and performance concerns. People drastically overvalue arbitrary equations like Metcalfe's law, and turn away from the actual statistical data sitting right in front of them. Yahoo's got something like 350m users, and you still almost never see anyone who complains about their 255 user friend list limit. Squaring the user count is just stupid; so is taking its logarithm. Neither of those are based on real world data.

      Real world data suggests that almost nobody keeps track of fewer than 10 people or more than 150 people. If you're treating the value of the userbase as growing at anything other than the linear arithmetic mean of 98 users per user (and even then that's arguably much too high,) then you're in for a nasty shock.

      If you want a web tool which gets you to market fast and keeps you there, you need to look at PHP or Erlang. No two ways about it. It just isn't worth the ten extra percent speed in development to have to gut it and start over a second time. Besides, unless your whole staff is already deeply familiar with the tools, there's a pretty good chance you'll lose that entire advantage in training time and new-language bugs.

      If you're more comfortable in RoR than other tools, and if you're going to pull a Fred Brooks and "plan to throw one away, because you will anyway," then RoR is admittedly a pretty useful prototyping tool. That said, in that arena, in my opinion, LISP just completely owns RoR, as do Erlang, Python and PHP. Erlang and PHP have the advantages of being legitimate places to build a production-level tool.

      But, I'll tell you up-front: you do not want a RoR application when you're planning to scale into a large-userbase product. It just falls apart. Flame-suit on, as I'm sure there are a lot of fanboys who are about to tell me I'm full of it and that their game has almost a thousand users or some nonsense like that. I've built services that deal with more than a thousand people simultaneously. I'm not talking out of my ass. I know what hurts when you get into that area, and I know that RoR is just not where I'd want to be.

      If you ever get into that kind of place, do yourself a favor and fake the service. Benchmark it. You'll thank me later.

      Similiarily start-ups don't care about these issues since they plan on being bought out before they matter.

      That kind of startup doesn't get bought out. Surprisingly, the people who can afford to put up eight digits for a product will send in their own engineers to find out if the product is going to be a problem in the long run. If it is, the investor just fights you, instead of buying you; it's cheaper, it's faster, and if your product is a shoddy, thrown-together mess, it'll keep the audience better in the long run.

      Besides, these days it's almost impossible to find a startup without ten competitors in the same market space. Odds are damned good that at least one of those competitors did a good job.

      Yes these attitudes create serious problems and lead to poorly made software, but what can you do about it?

      Compete in the open marketplace, and win. It happens every day. Either make software which isn't of poor quality, or expect to go nowhere. Arguably the best thing about the internet marketplace is that you have access to tens of thousands of vendors. You just don't have to work with someone who cuts corners,

      --
      StoneCypher is Full of BS
    17. Re:Justified by willCode4Beer.com · · Score: 1

      absolutely correct. Even during the so called "boom", it was usually the 2nd or 3rd product to market that ended up dominating. Of course, a big factor in this was that they could learn from the mistakes of the leader. The leader's poor code quality made changes and fixes slow.
      Everybody likes to use MS as the classic example of this.

      --
      ----- If communism is a system where the government owns business, what do you call a system where business owns govern
    18. Re:Justified by stonecypher · · Score: 1

      I know what you're saying is true; I've worked for people like that. Nonetheless, I feel it important to point out that companies like that are generally out of business quickly, and that if you're working somewhere like that, you might want to consider looking around. Not all companies are so naïve, and places with better behavior are usually much more satisfying places to work.

      --
      StoneCypher is Full of BS
    19. Re:Justified by stonecypher · · Score: 2, Interesting

      Well sure, except it's not as if Ruby on Rails enables that in any way. That's the fundamental basis of both object-oriented and interface-oriented programming, and has been around since the mid 1980s. (If you're really old, you might say "bah, you can do that with function pointers, and it's been common since BCPL.) Those of us who write CGIs in C++ are still amazed that the web is only just now discovering modularization. Granted almost no PHP you see in the real world is written this way; still, that's not a reflection of PHP, but rather the quality of the people writing the code.

      You're quite right to observe that careful differentiation of interface and implementation has a major effect on the long term maintainability of a system. However, I openly take issue with the supposition that that has anything whatsoever to do with RoR, and in fact it's my contention that RoR tries to showhorn you into a combined model where, though there is modularization, the modules are frequently not ideally selected. It is my belief that a programmer can do a better job at modularizing than what RoR forces you into.

      Try writing a large-scale web application in C++ sometime. Sure, it takes a while to nail down some simple text parsing stuff, but the long term maintainability makes most other languages look positively silly by comparison. Really, these days I just can't imagine doing web work in anything other than C++, PHP or Erlang, and I write code in more than 60 languages. Yes, you have to put down a lot of groundwork to get underway with C++, but it's my belief that in a large application, the benefits more than outweigh the up-front work.

      It's remarkable how many bugs disappear with real, strictly compiled languages.

      --
      StoneCypher is Full of BS
    20. Re:Justified by stonecypher · · Score: 1

      Hear here. You're exactly right, and it's both disappointing and scary to realize how few people understand what you just said.

      If you're ever looking for a game development job in Southern California, you let me know, and I'll get you an interview.

      --
      StoneCypher is Full of BS
    21. Re:Justified by stonecypher · · Score: 2, Insightful

      The saddest thing about this is how correct you are, and how it hinders you. If you and another team developed Product X, and both went 33% over schedule, the other team would hit early milestones, declare progressive success, change the schedule to fit the new needs, allow bloat, hammer in new features to justify the lag, and end up coming in 200% over budget. You would come in 33% over budget, but since you didn't dance around acting like the schedule was the only important thing, your lean and nearly on-time product would be seen as disasterously over-budget, and you wouldn't be allowed to manage again.

      It's a pity that what you said is correct, because it encourages a kind of myopic and nearly religious devotion to what is really just a measuring tool, and the results are a massive drop in actual quality in exchange for the feeling of success. What you said is right, but remarkably counterintuitive, and it is my belief that what you're correct about is the primary basis for most of the problems in this industry today.

      I wish more people were like you, and were willing to take the up-front hit instead of playing self-deception games to feel better about slippage. You plus a real estimating tool like the PSP/TSP (see propoganda video) are exactly what this industry needs, but facing the problem is so difficult and fixing it so superficially expensive-looking (despite the remarkable cost benefits in the long run) that I think your kind of actual observant development is a long time in coming.

      Pat yourself on the back. You've made all the old people proud today.

      --
      StoneCypher is Full of BS
    22. Re:Justified by enjo13 · · Score: 1

      Being first doesn't guarantee success, but it sure gives you a better shot at it. A highly comptent company that is first AND has the technical ability to maintain its lead has a great shot of really capturing a market.

      However, being fast isn't always about being first. It makes great business sense because the most expensive part of the development lifecycle is not maintenence (in many cases), its development. Developing software comes with a HUGE up front cost, and generally that cost is being bore by the company developing it. While engineers are crafting highly maintainable code, the company itself is bleeding money. While the TOTAL cost may be higher for maintenence, most companies can't sustain lots of upfront development with no return on that investment. This why a product like Ruby on Rails is so valuable.. It gives businesses something they can monetize, which provides the funding needed to bridge the gap between the initial project and a more maintainable second generation.

      Its not greed that drives this..its economics.

      --
      Turn s60 photos into awesome videos with mScrapbook for all S60 3rd edition phones!
    23. Re:Justified by alfarid · · Score: 1

      I think the problem is not the language, but programmers. so it really does not matter if it is lisp or c++ or whatever, although since you have so much c++ material on your blog, you have to promote it(i guess). i have seen some really bad php code and some really good php code, same goes for perl and python.. i'm sure as c++ coder rails would not work for you the same as c++ does seem sort of odd to me , especially to write webapps. instead of complaining about particular language implementation try to find out if code that you are looking at is compliant to language desirable maintainability practices. i've been looking at particular bad c++ code that had a lot of bugs that "would just go away" if it was NOT written in compiled language.
      so, no i dont think proper modularity that exists by default in a number of webapp building frameworks, particularly rails, catalyst, turbogears,and number of others "tries to showhorn you into a combined model where modules are not particularly well selected", because if you really know how your stuff works(tm) in any of these frameworks you can pick and choose what and how you want it to work. And yes, for large applications, after you've changed some stuff, you dont have to recompile everything to see if it works, which gets tedious really fast. in fact, if i would want my stff to work in c++, i would first write it in some other language, like perl or ruby or php, and then rewrite it in c++, just so i dont have to babysit my compiler. but of course, YMMV here.. peace

    24. Re:Justified by stonecypher · · Score: 1

      so it really does not matter if it is lisp or c++ or whatever, although since you have so much c++ material on your blog, you have to promote it(i guess).

      The blog is relatively new. Try looking at the base site, http://sc.tri-bit.com/. You'll find I have material up there for PHP, C, C++, Delphi, Erlang, FormulaONE, Lua, and occasional smatterings of various other languages. I'm not promoting C++ for large-scale web applications because I'm a C++ zealot. I'm doing it because I genuinely believe the strictness of C++ is more valuable than the convenience of Rails. In fact, I believe the difference is dramatically one-sided.

      i'm sure as c++ coder rails would not work for you

      Actually, my native languages are Pascal and LISP. Please do not attempt to dismiss my opinions by guessing at what my languages of preference are. I use more than a dozen languages on a regular basis, and my arguments are well-founded regardless of my personal practices.

      instead of complaining about particular language implementation try to find out if code that you are looking at is compliant to language desirable maintainability practices.

      I'm sorry, but I don't believe that I did any such thing. I made specific comparisons of specific advantages of each methodology, and came to a concrete conclusion based on my beliefs. I've made no random complaints, and the things I said are not in fact related to code quality.

      in fact, if i would want my stff to work in c++, i would first write it in some other language, like perl or ruby or php, and then rewrite it in c++, just so i dont have to babysit my compiler.

      If you make your tool selection based on a fifteen second compile and link pass, then it's no wonder we disagree so strongly. You don't appear to have actually read what I said, and you seem to be arguing by the attempt to incorrectly pigeonhole me into a stereotype based on guesses. I believe this conversation ends here; I do not enjoy being told that I'm wrong because you're guessing what language I use most often.

      The reason my blog and wiki have a bunch of C and C++ on them is because they're written for Nintendo programmers, and because C and C++ are almost the only languages available to them. It's got nothing to do with my personal preferences; I use several languages more often than I use C++. Enough with the stereotyping. It's ugly and offensive. If you can't discuss what someone said on the merits of what was said, but rather feel the need to treat them like one-trick ponies, I'd appreciate it if you didn't speak with me anymore.

      --
      StoneCypher is Full of BS
    25. Re:Justified by arevos · · Score: 1
      Try writing a large-scale web application in C++ sometime. Sure, it takes a while to nail down some simple text parsing stuff, but the long term maintainability makes most other languages look positively silly by comparison.

      What advantage does C++ have over, say, Java for programming web applications in? The only benefits I can think of is improved efficiency (which isn't necessary for the vast majority of websites), and some additional language constructs such as operator overloading. Neither of these would be sufficient enough to entice me to use C++ for such a use, so I was wondering why you find it so attractive.

      The other difficulty I have with C++ is that it's not particularly powerful, in terms of syntax and control structures, as some other languages, such as Python or Ruby. When you don't particularly need the efficiency that C++ offers, why favour a more syntaxically restrictive language?

      It's remarkable how many bugs disappear with real, strictly compiled languages.

      In my experience, very few bugs disappear. However, if you find that this is the case, why use dynamically typed languages such as PHP and Erlang? And there are surely languages that have stricter rulesets than C++; Eiffel, for instance, which is compiled, and strongly and statically typed, with design-by-contract built in. Or the JVM-based Nice, which again is strongly and statically typed, with optional preconditions and postconditions. C++'s weak static typing looks somewhat ineffectual by comparison.

    26. Re:Justified by stonecypher · · Score: 2, Interesting

      What advantage does C++ have over, say, Java for programming web applications in?

      Well, the comparison was between C++ and RoR. The advantages I was citing are equally well held by Java. The advantages I believe in as regards C++ versus Java are typical holy war nonsense (I dislike Java.) There is a minor but not significant advantage for C++ in terms of the number of available libraries. That said, Java fills out my statements to the grandparent post in the same way that C++ does. Actually, there's a good argument that Java is better suited to the web than C++, because of its deep integration of sockets and things like Tomcat and Beans. I would tend to argue what I just said, but it is a viable argument and is contextually appropriate.

      The issue I was citing was compiled languages versus quick-assembly toolkits, on terms that large applications would benefit far more from strict static analysis than they would from a quick grammar and extant boilerplate. In this way, C++, Java, Delphi, C#, ASP.Net and quite a few other languages offer the same set of referred-to advantages.

      The other difficulty I have with C++ is that it's not particularly powerful, in terms of syntax and control structures, as some other languages, such as Python or Ruby.

      I just don't agree. C++'s syntax is so powerful that many major language features have been implemented directly in native syntax, something I've never seen in any other language except Lisp and Lisp descendants, including aspects, properties, the lambda calculus, closures, compile-time metaprogramming, coroutines, inline lexing, message-based concurrency and so on.

      I recommend highly that you familiarize yourself with modern C++ methods. It's quite a bit more powerful language than most people realize. A good book to start with is Modern C++ Design.

      When you don't particularly need the efficiency that C++ offers, why favour a more syntaxically restrictive language?

      Well, for one I don't believe it's syntactically restricted. However, syntax is a comparatively minor component of a language; more important in this case is the specific advantage I cited, that of very strict static analysis. On these terms, very few languages can compete with C++; it is one of the strictest languages on Earth, when used skillfully.

      In my experience, very few bugs disappear.

      Er. How many times have you actually replaced a rapid-development web toolkit with a fully statically compiled application? I don't mean to seem rude, but this is experience that almost nobody has in the first place.

      However, if you find that this is the case, why use dynamically typed languages such as PHP and Erlang?

      Because different tools are appropriate for different jobs. I wouldn't use PHP for a large web application. Erlang is a very special case, and has such a weird benefit/detriment pattern that I don't honestly want to get into it. Suffice it to say that I'd use Erlang where pattern analysis, list comprehensions, or linear scaling across a huge number of users were my primary concerns.

      And there are surely languages that have stricter rulesets than C++; Eiffel, for instance, which is compiled, and strongly and statically typed, with design-by-contract built in

      Contracts are easily implemented in C/C++, and actually, no, Eiffel is nowhere near as strict as C++ is. Yes, there are a few languages stricter than C++ is, such as Clean, Mozart/OZ and Forth; however, what I was trying to do was to make an example, and given that most people are at least passingly familiar with C++, it just makes a better example.

      To be plain, I'm Joseph Conrad. It doesn't matter if my native language is Polish; I'm in America, so I write in English. Sure, there are better examples than C++, but they're too little known (in my opinion) to make good examples.

      C++'s weak static

      --
      StoneCypher is Full of BS
    27. Re:Justified by arevos · · Score: 1
      I just don't agree. C++'s syntax is so powerful that many major language features have been implemented directly in native syntax, something I've never seen in any other language except Lisp and Lisp descendants, including aspects, properties, the lambda calculus, closures, compile-time metaprogramming, coroutines, inline lexing, message-based concurrency and so on.

      I assume you're including the functionality of specialist preprocessors in that list, but even so you have listed a few items of which I was previously unaware. A quick Google search for lambda expressions in C++ brings up preprocessors such as Clamp, which seem rather interesting indeed.

      That said, I have to be careful here. A while ago, I pointed out that one of the advantages of Python over Java was its mutable classes (which could also potentially be a disadvantage as well, but I digress). The person I was discussing this pointed out this wasn't the case, informing me that one could dynamically alter a class at runtime by altering the JVM bytecode. Whilst this was technically true, there's a large difference in practicality between a single line of "Foobar.new_method = method_impl", and a page of Java code manipulating the bytecode of a class.

      I'm interested in the compile-time metaprogramming you mention. Perhaps you could point me toward some resources? I'm aware of the capabilities of templates, but like Java bytecode manipulation, more complex stunts tend to get complicated. Do you know of many more preprocessors like Clamp? I'm something of a language nut, and learning something new about a language I thought I was reasonably familiar with is always very interesting.

      That all said, I still disagree with your assertion. Runtime metaprogramming can be very useful, especially with higher level functions (or partial functions, as some people apparently refer to them). Brevity is another advantage; languages such as Python and Ruby tend to be very concise and informatically compact. C++, in my experience, is verbose and frequently deals with information that is beyond the scope of the problem. Or, to put it another way, if I were to translate a function from Python to C++, I'd have more things to worry about.

      I also don't see anything on your list which Ruby cannot handle (or indeed Python, with the exception of anonymous closures and coroutines, the latter of which will only appear in Python 2.5).

      Er. How many times have you actually replaced a rapid-development web toolkit with a fully statically compiled application? I don't mean to seem rude, but this is experience that almost nobody has in the first place.

      No times, I'm afraid. I thought you were speaking more generally. I have translated C++-based programs into equivalent Python-based programs.

      C++ wielded properly is stricter than any language you've yet named.

      How so?

      C++ is a remarkably strict language; that's why we have things like explicit constructors.

      That's reminded me of another thing I prefer about Python. The concepts of class constructors and object initializers are seperate, whilst in languages like Java, and I believe C++, the concepts are (to my mind) messily intertwined.

      Nonetheless, at no point in the parent message did I say "C++ is the only language that would give these benefits." I just used it as an example of possible benefits above and beyond Rails, because C++ is the lingua franca of programming, so it's a good language to make explanations that reach a lot of people at once. I'm not sure why you're trying to turn this into a Java argument.

      You did avocate writing a web application in C++, though. Java's the usual choice for such things, so I was merely wondering why you chose C++ over Java. However, this was adequately answered in your third sentence:

      I dislike Java.
    28. Re:Justified by stonecypher · · Score: 1

      I assume you're including the functionality of specialist preprocessors in that list, but even so you have listed a few items of which I was previously unaware. A quick Google search for lambda expressions in C++ brings up preprocessors such as Clamp, which seem rather interesting indeed.

      Clamp notwithstanding, actually no: I don't consider preprocessors other than the one that's part of the language as a fair candidate for talking about what a language can do. For pure-C++ lambda, the best (though not the only) example is Boost Lambda.

      That said, I have to be careful here. A while ago, I pointed out that one of the advantages of Python over Java was its mutable classes (which could also potentially be a disadvantage as well, but I digress). The person I was discussing this pointed out this wasn't the case, informing me that one could dynamically alter a class at runtime by altering the JVM bytecode. Whilst this was technically true, there's a large difference in practicality between a single line of "Foobar.new_method = method_impl", and a page of Java code manipulating the bytecode of a class.

      I agree with you: whoever was discussing with you is taking what I believe to be an unreasonable stance, namely that of suggesting the alteration of the binary as a candidate for a language feature. That said, in C++ what you want to do is relatively easy to replicate, provided that if it's a function you know the signature you're calling (it's possible, but harder, if you don't;) just keep a map or a hash to Boost::Any (or if you need to be stabbed in the stomach, void pointers,) fill it with members and function pointers, and then overload operator-> .

      This is why I think C++'s flexibility is vastly underrated: things like that are easy to hack, if you're comfortable with the language.

      I'm interested in the compile-time metaprogramming you mention. Perhaps you could point me toward some resources?

      I don't actually know of any good ones online, though I've not looked for them. By far the best example I'm aware of is the book Modern C++ Design, which is both an excellent book and which covers quite a few other tremendously powerful techniques, such as template-based policy modules, typelists and type traits, and a whole bunch of other stuff.

      I'm aware of the capabilities of templates

      With all due respect, I used to say the same thing, and I was just dead wrong. For example, compile-time metaprogramming is accomplished using templates. What most people don't realize - what I didn't realize until I read that book - is that templates are when carefully used in fact a fully distinct third language within C++ (the first two being c++ itself and the macro preprocessor,) and that they create a radically different environment than traditional C++ does.

      Do you know of many more preprocessors like Clamp? I'm something of a language nut, and learning something new about a language I thought I was reasonably familiar with is always very interesting.

      I refuse to use tools like Clamp. Just a personal thing. Besides, C++ is large enough that, despite having 7 years of heavy industrial use under my belt, I'm still learning things in it at just a remarkable rate.

      That all said, I still disagree with your assertion. Runtime metaprogramming can be very useful, especially with higher level functions (or partial functions, as some people apparently refer to them).

      My assertion was simply that C++ is more powerful than most people expect. Runtime metaprogramming, well, I've never seen a definition of runtime metaprogramming which I was able to get much traction out of. Each time, people will give me an example, I'll show them how to do that in traditional languages, and they'll tell me I'm missing the point, which I quite possibly am.

      The germane difficulty is that compile-time metaprogrammin

      --
      StoneCypher is Full of BS
    29. Re:Justified by arevos · · Score: 1

      First, I'd like to express thanks at what has become a rather pleasent and certainly very interesting discussion. To my mind, arguments are only useful if you learn something from them.

      My assertion was simply that C++ is more powerful than most people expect.

      I agree with you here. I'll also look into templates a little further; I confess there are probably parts of templating of which I am entirely ignorant. With regards to Boost:Lambda, I was rather impressed. The implementation is a little clunky, and limited to expressions rather than full closures, but it's remarkedly neat and clever for what it does. I rather suspect that macros are used exensively and to rather good effect.

      Maybe I don't get it, but until someone hits me with a brick until I do, I can't really comment. I don't know what runtime metaprogramming actually is, in any useful sense.

      As far as partial functions and higher level functions, those are easily faked in C++ through overloadings of the call operator (for example, functors.)

      Functors do replicate the functionality somewhat, but can be rather unwieldly to create in comparison. The complexity only increases with functors when you deal with creating classes (or a good impersonation of), rather than functions. I can't, off the top of my head, think of a very neat way of injecting default values into a class (rather than an object) via a function.

      I don't really count myself as knowing Python. A quick google search on python "class constructor" "object initializer" returns only one result, and that result isn't particularly useful. What would you suggest is the difference between the two?

      Your search was fruitless probably because I'm ignorant of the exact technical names. The theory, though is rather simple. In Python, the constructor returns an object (which is almost always an instant of the containing class), whilst the initializer is applied to an object the moment after it is created. An example is probably the best way to convey the difference. Take the following code:

      fb = Foobar("test")

      In code not dissimilar to C++, this is Python code that constructs a new object from the class Foobar. If we expand this code out, the difference between the constructor and the initializer should become obvious:

      fb = Foobar.__new__("test")
      fb.__init__("test")

      The __new__ method is the constructor. The __init__ method is the initialiser. __new__ is applied before the object is created, and __init__ is applied directly after. Both receive the same arguments. I prefer this method, because it clearly differentiates between creating a new object, and setting the default values.

      I confess that I know more about constructors in Java than I do constructors in C++. In the JVM based language Nice, the very subject of constructors verus initializers comes up in the Wiki. To quote the relevant parts:

      One thing that might be wrong about Java constructors is that they serve two purposes. One is to assign values to the fields of the class. The other is to do any operation that needs to be done when an object is constructed. Let's call the first aspect construction, and the second initialization (are there clearer names, or are those clear?).

      The problem with mixing these two purposes arises when you start calling methods from the constructor, before the fields are set. In other words, from a Design by Contract point of view, if you call a method before the invariant is valid. This means that the method called cannot assume the invariant is true. Worse, that method can call others.

      There was a better article on this, which went into specific details of why the Java constructor was flawed, but I can't for the life of me find it. Thus, in absence of such fi

    30. Re:Justified by stonecypher · · Score: 1
      First, I'd like to express thanks at what has become a rather pleasent and certainly very interesting discussion. To my mind, arguments are only useful if you learn something from them.

      It's rare for someone to be so polite here. Thank you in turn for the recognition.

      I rather suspect that macros are used exensively and to rather good effect.

      Boost::Lambda is primarily seriously scary template magic.

      The problem with mixing these two purposes arises when you start calling methods from the constructor, before the fields are set. In other words, from a Design by Contract point of view, if you call a method before the invariant is valid. This means that the method called cannot assume the invariant is true. Worse, that method can call others.

      Actually, through my dumb luck the example you've chosen is a wonderful case of why C++ is so strict. C++ has extremely concrete rules about in what order things occur in a constructor. Object construction occurs before execution begins. The initialization pass is indeed part of the constructor, but it occurs before functional behavior starts. In C++, the equivalent is:

      class Widget { public: Widget(int foo); private: int bar; };
      Widget::Widget(int foo) : bar(foo) { /* do stuff */ }


      The important bit here is that C++ actually guarantees in what order initialization happens. For pragmatic reasons I won't get into here, C++ requires initialization to happen in declaration order; therefore in class foo { int a; int b; int c; };, initialization must occur in the order a,b,c . (Most compilers will let you get away with the constructor foo::foo() : c(1), b(1), a(1) {} and just do it in the correct order for you, but that's technically illegal, and a compiler on extreme strict mode should complain and shut off.)

      So, sure, this is a thing that bites novice C++ programmers in the ass fairly frequently. However, since the language makes guarantees, an experienced C++ programmer can actually make an object which is only partially constructed call parts of itself quite happily. Furthermore, there are steps one can take to make it quite a bit safer, such as when the thing one is calling doesn't need object state, making it static, which should always be safe from a constructor (it's possible to make that unsafe, but you have to try pretty hard, and it's not possible IMO in realistic code.)

      So, yeah, I guess in one sense you could say that C++ makes this split too. However, instead of making it two seperate methods, it's two distinct passes of one method. This has the advantage of a single constructor call, which means less passing stuff around on the stack, fewer copies, et cetera. In terms of efficiency, constructors are often pretty seriously important. Whereas efficiency isn't that big a deal in Python, since C++ is intended to be suitable for embedded and realtime programming, it's really an important difference.

      I suspect not, since C++ constructors are not inherited

      Er, yes they are.

      #include <iostream>

      class Base { public: Base() { std::cout << "Hello, "; } };
      class Derived : Base { public: Derived() { std::cout << "world!\n"; } };

      int main() { Derived d; }

      Actually, C-based CGI is still more common than C++ and Java web applications put together, even given beans and tomcat and whatever else. Referring to "the usual choice" is called argumentum ad antiquitatem (a form of ad populum.) The reason I chose C++ is simply because people are frequently familiar with the superficial benefits I had previously relied on.

      Hm? Do you have any statistical sources to back that up?

      You know, I just saw numbers on this about two months ago; someone used them to put me in my place. Unfortunately, for the life of me I can't find them (I've been trying for the last 20 minutes,) so I

      --
      StoneCypher is Full of BS
    31. Re:Justified by arevos · · Score: 1
      Boost::Lambda is primarily seriously scary template magic.

      I need to look into template magic. I've heard you can do some pretty interesting things with them, but I haven't yet got around to reading up on the more complex uses of them.

      I suspect not, since C++ constructors are not inherited

      Er, yes they are.

      So they are. That's odd. I wonder where I got the impression that they weren't.

      Consider the contrary case of Erlang, which is actually (in my opinion) more suitable for web development than C++ or Java or PHP or perl or whatever. I'm still not going to make examples in it, simply because nobody speaks Erlang, so the example wouldn't be useful to almost anyone.

      Bah, I'll have to go out and read up on Erlang, now :)

      C++ is just a good example language because everyone and their mother can read it. Pure and simple.

      In my experience, understanding a complex program to the degree of being able to confidently make changes to it, takes significantly longer than learning a new programming language. Coincidentally, my next job will involve both.

  3. Most Businesses Only Consider Initial Cost by Anonymous Coward · · Score: 2, Insightful

    It seems to me that this concentration on initial construction of software ignores the issue of total cost of ownership.

    Unfortunately that's how a lot of businesses think and they later regret it if they didn't consider the whole picture before settling on a solution. In lot of cases they just want to have something up and running fast, in some cases, the up-front cost doesn't matter.

  4. execs by Beuno · · Score: 1

    I think that as long as there is a bigger influence of non-tech executives and marketing departments, this is going to keep on going.
    It's very hard to understand the long term benefits if you don't have some technical skill and have made that mistake a few times.
    There should be a balance that clearly isn't there most of the time.

    1. Re:execs by riskyrik · · Score: 1

      Exactly my idea! I work in a bank with a big IT department (+/- 1400 people). Until a couple of years ago, the managers 'old style' were mostly ex -programmers/analysts who learned to manage while at the job. Some were better managers than others but generally things were going well most of the time. But then they were replaced by people with no software-background whatsoever. Since then we are faced with super-mega-systems that are meant to do everything except make coffee. These systems are a disaster for our IT-departments and for our bank-customers: the custom-made systems of the past are replaced by generalized solutions: customization, fine-tuning for specific legislation, etc... forget about it! And they ask a good deal of support & maintenance too! I know of 1 such mega-system (PEREGRINE) that is especially meant to manage help-desk calls and asset management. Now they want to use it for completely other applications that in fact require a totally different approach. We already witnessed a couple of false starts (with loss of time & unknown quantities of finances) but management keeps persisting that we use it as base-platform!
      I talked about this with my wife who works in a hospital: there too the non-tech managers have entered and she has the same type of Kafka-esque stories.
      Personnally I think we have to wait and sweat it out: until enough stats & data appear that prove that things are not going too well, I fear we'll see no improvements.

      --
      less is more
  5. Different Strokes by Anonymous Coward · · Score: 2, Insightful

    The point of rapid development is the proof of concept. Pretty much every rapid development mantra is centered around.

    1) Make it work
    2) Make it work right
    3) Make it fast.

    If you want tightly designed and thought out, the extreme programming style might be more your style. (Or the style of a properly run business..)

    (And god help me when someone makes a "4) for profit!!!! LOL WTFASLBBQ" joke, go fuck yourself.

    1. Re:Different Strokes by Anonymous Coward · · Score: 0

      4) for profit!!!! lol WTFASLBBQ

    2. Re:Different Strokes by StarvingSE · · Score: 1

      Actually, extreme programming does follow the "make it work, and produce it fast" mentality. I really enjoyed reading about the test-driven methodology because it makes so much sense to me. Having a fully functionaly, albeit without all functionality in place is really a plus when it comes to making the customer happy. It also shows upper management that you are actually accomplishing something, and also produces more maintainable code in the end.

      (And god help me when someone makes a "4) for profit!!!! LOL WTFASLBBQ" joke, go fuck yourself.

      Actually it would be:
      4)...
      5)profit!
      *ducks*

      --
      I got nothin'
  6. i think you answered your own question by moochfish · · Score: 3, Informative

    I'm pretty sure a big part of why these frameworks are popular come from the fact that they allow for smarter, fewer lines of code, ultimately making maintenance easier. Much of the lower level problems like database connectivity, optimization, resource management, etc. are handled by these frameworks and other higher level languages which in turn allow the developers to focus on the business logic, rather than debugging their latest build of the database.

    At least that's why I assumed rapid developement frameworks caught on.

    1. Re:i think you answered your own question by joecode · · Score: 2, Insightful

      In other words: The implicit assumption in the original question is incorrect: These frameworks are *not* concentrated merely on getting apps running quickly.

      Of course the infamous manner of showing off these frameworks is to make a screencast showing how easy it is to make a simple wiki or todo list. These screencasts can be misleading since they often employ simple CRUD scaffolding, which is useless in the real world. However, taken with a grain of salt, they help you get a feel for the framework.

      A good MVC framework helps organize your code in a standard manner, and a you get a lot of mileage from leveraging a supported, tighly integrated, full stack like that of Ruby on Rails. (It's really fantastic: handles everything from ORM to script.aculo.us with blissful ease.)

      Pardon my fanaticism, but I decided to learn Ruby on Rails last weekend, and I'm quite certain it'll be the main thing I'll be coding my own projects from now on. (Catalyst looks good if you don't wish to abandon good old Perl.)

    2. Re:i think you answered your own question by Anonymous Coward · · Score: 4, Insightful

      As Douglass Adams said: the problem with things that can't possibly go wrong is that when they do go wrong, there's no way to fix them. When you accept the "easy" models promoted by some of the higher level languages, you might take the framework your using as far as it goes and realize that it doesn't go far enough. At that point you're stuck. For example, you may have written a powerhouse GUI application for a platform like .NET or Java and now that you've invested millions in development, you realize that there's nothing more you can do to optimize performance on that platform: your application is a memory hog and takes forever to load. It's still a good application, but your choice of development tools has put a hard limit on how far you can go. That's a tough spot to be in.

    3. Re:i think you answered your own question by killjoe · · Score: 0, Flamebait

      The article specifially mentions ROR which is stupid because ROR is all about good coding practices and maintenance. When you create a controller or a model ROR automatically creates a test for you. The test is minimal to be sure but you no longer have the excuse and it's trivial to expand the case. ROR also encourages MVC and dozens of other patterns.

      ROR is the wrong example in this case. The right example is ASP.NET which encourages sloppy practices like embedding SQL in code and Crystal reports which is well an abomination as far as I am concerned. Visual studio didn't even support unit testing till 2005 for gods sake and MS still discourages the use of object persistence layers.

      --
      evil is as evil does
    4. Re:i think you answered your own question by skiflyer · · Score: 3, Insightful

      At least that's why I assumed rapid developement frameworks caught on.

      There's also the fact that in many jobs a huge percentage of programs are run once, or maybe run once a day for a month... and maintainability isn't an issue. My previous employment was just that, lots of tasks that needed to be scripted, and then they were done. Occasionally a program become popular and had to be scaled up to repeated use, and then we did just that. But the rapid development was great for the ones that didn't, sometimes the code for them was garbage, but worked, and sometimes it was really well organized and easy to transform... but more importantly the tasks where completed in less total hours (programming + running) than if a human had to process the issues by hand.

      Now, as someone who's a boss and cares alot about the dollars per hour, one of my constant frustrations is watching someone write a script for a run once application that takes 3 hours to write and debug, 5 seconds to run... while I'm paying them $30/hr, whereas they (or a better yet a $7.50/hr employee) could've done it by hand in 30 minutes.

    5. Re:i think you answered your own question by Fulcrum+of+Evil · · Score: 1

      We don't have run-once applications. Instead, we have run-in-reaction-to-problem scripts. Spending 3 hours to write and debug an app means that the next time you need to run the thing once, it'll take 5 seconds and be done right.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    6. Re:i think you answered your own question by anon+mouse-cow-aard · · Score: 2, Insightful

      I agree with your point, sometimes real-scissors and real glue are better than a word processor... but a it does not have to be all bad... mitigating factor would be that if people like coding, and they keep their practice up by implementing scripts in three hours, that could easily be saving you training hours, keeping their skills up for when they really need it, and improving coder morale... You might be just distributing training costs throughout your budget, and not having to shell out for it up-front in a five day course...

    7. Re:i think you answered your own question by gblues · · Score: 2, Insightful

      You're ignoring opportunity costs; sure there's a higher cost ($90) for your scripted solution; however, in those three hours, maybe that $7.50/hour employee is occupied with other, more profitable tasks that he wouldn't have been able to complete if he was pulled away for 30 minutes of data entry. Maybe data integrity is critical and the cost of the scripted solution vs. the risk of a $7.50/hr employee mis-entering the data made the scripted solution much less.

      Nathan

    8. Re:i think you answered your own question by Jerf · · Score: 1

      Your point about opportunity costs is backwards; the opportunity cost for a developer is much, much higher for a developer than a data-entry clerk. If the data-entry clerk was doing such important work, they'll be getting paid more than $7.50/hr.

      Opportunity costs make the error even worse than it seems, it doesn't mitigate it at all.

    9. Re:i think you answered your own question by iamcf13 · · Score: 1

      [PHB-like pay related rant snipped]

      Real programmers automate as much work as possible so they can do what the do best: code up solutions to some nontrivial problem. Perhaps that one-off routine can be reused later with minor modifications. Once the 'heavy lifting' is done, the invested effort can pay real dividends. :)

    10. Re:i think you answered your own question by skiflyer · · Score: 1

      That's short sighted, not set in the real world, and doesn't address my commentary.

      Yes, perhaps the one-off routine can be reused later with minor modifications, in which case whoever requested/designed it should have been aware of it and written it with that in mind. But perhaps it can't, and perhaps the proper business solution is to just write a throw-away perl script to get it done now, or perhaps the proper business solution is to hire a data entry person to do it asap.

      Real people have a limited number of hours in which to accomplish work

      Let's take my original post and use a real world example.... I had an access database which was 10 years old, it was out-moded, we had recoded a solution using PostgreSQL & PHP, was quite a nice solution everyone loved it, was time to move the old data.... my original post suggests it made sense to write a throwaway PHP script which took me 15 minutes to write. It wasn't the fastest thing in the world, it didn't have all the error checking I'd normally put in a program, it was never properly spec'ed out and we had no design document for it. I had 0 comments in the code and I used brute force repetitive for loops where smarter methods could've shaved as much as 10% off the loop execution times I'm sure. The script then ran for 10 seconds and crashed because I made a typo... typo was repaired, scrip then ran for 90 minutes and life was good, we were on the new system, the access database was burned to a DVD and removed from our systems.

      My original point was that this was the proper solution, it didn't make sense to spec it out, to comment the code, to put in a UI that was pretty, to make sure all the variable names where completely understandable to a code maintainer in 5 years etc.

      Troll fed.

    11. Re:i think you answered your own question by iamcf13 · · Score: 1

      I see your point for genuine, 1-off throwaway code.

      The problem I have at work is that the code I co-written is 'business critical' and must not fail or be incorrect. It is also comprised of A LOT of 'little black boxes' that work together. Upgrading the code is a pain as the upgrade must be done ASAP and without benefit of a test system to try it out on.

      Yes, the test and production systems are one in the same. It should be 'suicide' to do this but so far no problems. We're just really careful.

      Whenever I write new code or tweak old code, at times I want to add in 'idiot proof' code to minimize possible future errors and down time but I am constantly told no and to 'get it done right away'. Since someone else signs my paycheck, I have to follow orders.

      I guess you have to decide if any such problems can be solved in the future by a pricey programmer or a budget data entry clerk - but keep in mind that the data entry clerk is human and can accidentally/(deliberately!?!) introduce errors into your datastream. Provided the programmer is not incompetent or malicious, that won't happen with a software routine to do the same thing.

      What is more importent to you? The money you save on a project or the integrity of the data your business depends on to survive (and thrive)....

  7. Processes not tools by tjuricek · · Score: 1

    Well, considering that "product lifetime" discussions are more about process than tools, you're probably not going to see any development tool talk about how it makes maintenance easier. That being said, I've found lots of very good tools related to project maintenance. Continuous integration systems like CruiseControl are fantastic for helping build a very solid, maintanable project.

    But for products, you need to have the entire company be on the same page. The company needs to measure and keep everyone on the same page. The only kind of metrics I've ever seen for "product success" are sales figures, which is pretty lame and can be misleading. That aligns your definition of "success" with just making an initial sale; not necessarily making it easy to upgrade, ergo, all the company is concerned with is making more sales; everything else is a cost.

  8. Slo-mo. by Anonymous Coward · · Score: 0

    "Most of the buzz on the web about software development tools, languages, and practices seems to concentrate on getting software developed as quickly as possible."

    Start your own business and you can develop software as slow as you want. Anyway a lot of the items listed are to handle the increasing complexity of what we're asking computers to do.

  9. I am not so sure by raymondmroz · · Score: 2, Insightful

    that the two concepts must be mutually exclusive. Software can be constructed quickly, and still be "robust" and "maintainable". I will not get into specific development "paradigms" here, but I think that there are options that give us both in varying degrees, on a problem-by-problem basis. Market forces demand flexibility, and those that are, make it.
    Managerial Buzzword Count: 3

  10. No. by hsmith · · Score: 4, Insightful

    You have large maintnence costs because no one properly plans up front for the long term. People want to see something and they want to see something fast. No one sits down to write the proper documents, no one sits down to plan ahead, they think for the short term only. Which leads to long term problems down the road. At least, that is what I see as major issues on things i have worked on.

    people don't want to make the initial investment to plan ahead, so they end up spending much more in development costs because no one decided where the product should go.

    1. Re:No. by RingDev · · Score: 4, Insightful

      Here! Here!

      The problem isn't high level languages or agile development. The problem is a lack of foresight, planning, and documentation.

      We have two major systems at the company I work for. One, that the related staff spent 2 years documenting their business practices and exactly what they wanted the application to do. They took that huge document to a couple of consulting companies and said "we want this." 2 years later the consulting company that won the bid turned over a nearly perfect application.

      The other app is an extension of a 3rd party application. This app started development with little to no documentation, no project manager, and no one who had actually worked with the 3rd party application. Flying blind into a short deadline has left us playing redevelopment games for almost 2 years! We finally managed to get the critical personnel together to get the system and processes documented, and after 3 months of business process documentation we should be set to re-write the business layer of the application in 6 months.

      Had the user group worked with the 3rd party app prior to launch, and documented their processes, the entire application could have been developed in under 9 months. But with out that work on the front side we will have over two and a half years wrapped up in development from 3 people.

      One more project like this, and I'm moving to management. As much as I love coding, I hate inept managers even more.

      -Rick

      --
      "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
    2. Re:No. by GalacticCentral · · Score: 1

      Well no. Decisions ARE made about the direction of the product. But these are based on whatever is in management's face at the time, not on any actual process of thinking or planning. And then, the manager moves up, and the next manager wants to make an impact, so s/he changes the whole product direction based on the first thing s/he gets screamed at for not doing. And of course, many products HAVE no meaningful lifetime, so why bother with much planning? Just keep writing code, something good will happen.

    3. Re:No. by Anonymous Coward · · Score: 0

      Hire really good people and give them the latitude to do what's best in their experience discretion. Most good developers aren't going to do a whole bunch of stuff without knowing from experience that the additional labor will pay off in the long run. Workers want to get their projects done too, you just have to hire the ones that can do it properly and give them the time and freedom to do it.

    4. Re:No. by Kadin2048 · · Score: 5, Insightful

      That's a great anecdote, and I don't think that you can hit that point hard enough.

      If somebody came to you and said "hey, I've got this great new way to build a bridge! Instead of making up plans, we'll just start building it! We'll build it out of popsicle sticks first, and then we'll go in and add some steel beams, and toss some pavement on top of that," you'd say they were insane. Nobody does stuff like that in the real world -- yet that's exactly what a lot of poorly-managed 'agile' software projects are doing. They're getting short-term prototyping gains but at the cost of maintainability and probably stability as well.

      Rather than figuring anything out ahead of time -- actually answering the hard questions like "what do we want this software to do and how do we want to do it?" they just start making something. It's like just giving some steelworkers a pile of rebar on either side of the river and telling them to build towards the center and figure the details out later.

      I think one of the biggest problems in software development, and it's really endemic, is an underappreciation of the pre-development work: requirements analysis, specification development, even simple stuff like the clear division of job roles and responsibilities. If you get that stuff done, the actual coding ought to be an academic exercise, not a seat-of-the-pants experiment.

      Part of the problem lies with managers who don't understand software, and just take any opportunity to compress schedules and make themselves look better, and another problem is with "programmer culture," where people think the ideal way to solve a complicated problem is just to put a half-dozen developers in a room for a weekend with a few gallons of Mountain Dew, an Amex card, and the number of the nearest Domino's Pizza. (Although to be fair, this attitude seems to be less common among developers who have SOs/families, or are used to 40-hour workweeks.)

      While concentrating on "getting it out the door" may solve the problem in the short run, it's almost certainly not going to give you neat, easily-maintainable, well-documented code. And when you're looking at the long-term maintainance costs, it sometimes can be better to not have anything at all, than to have a lot of spaghetti code that somebody is just going to have to rewrite down the road, when they can't figure it all out.

      --
      "Ladies and gentlemen, my killbot features Lotus Notes and a machine gun. It is the finest available."
    5. Re:No. by mcrbids · · Score: 5, Insightful


      If somebody came to you and said "hey, I've got this great new way to build a bridge! Instead of making up plans, we'll just start building it! We'll build it out of popsicle sticks first, and then we'll go in and add some steel beams, and toss some pavement on top of that," you'd say they were insane. Nobody does stuff like that in the real world -- yet that's exactly what a lot of poorly-managed 'agile' software projects are doing. They're getting short-term prototyping gains but at the cost of maintainability and probably stability as well.


      A complex software project doesn't compare well to a bridge. It's more like a city. Nobody goes and says "Let's build a city!", lays out plans, prototypes and discusses what business go where.

      That's just stupid; nobody does a city like that.

      A bridge is a simple item, an artifact of intelligence, it's an item with almsot irreducible complexity. A city, however, is a highly complex, interactive social organism with bazillions of interactions, many of which you can't easily forsee. It has a very small level of irreducible complexity. Lots of software has much in common with this.

      Cities ARE built in a "agile development" fashion. People spec out just enough to get started, to get them by for the next few months/years, slam together a some houses, and maybe a store or two. People like living there, then somebody comes along and thinks "We outta have.... a Newspaper!" and they build a building and buy paper and start writing articles and printing and all that jazz. It's a little different than software because most software has a lifespan of perhaps 10-20 years, cities have lifespans in the hundreds of years.

      Changes in this city are incremental; they're small. They happen everyday. Somebody does an extension on their house. The lady down the street gives birth to a son. The corner grocery starts selling sandwiches. The empty lot down the street becomes a movie theatre. And so, the agile development model continues.

      You're dead wrong - the bridge is a small, incremental example of EXACTLY how well-done agile software develops!

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    6. Re:No. by Anonymous Coward · · Score: 1, Insightful

      Please stop comparing software development with building bridges.
      Bridge building is usually just repeating what you did last time you build a bridge. That is fairly easy to plan.

      When it comes to developing software, you do something completely new every time. That is way harder to plan, since you do not know all the issues before you are done.

    7. Re:No. by 5937 · · Score: 1
      If somebody came to you and said "hey, I've got this great new way to build a bridge! Instead of making up plans, we'll just start building it! We'll build it out of popsicle sticks first, and then we'll go in and add some steel beams, and toss some pavement on top of that," you'd say they were insane. Nobody does stuff like that in the real world -- yet that's exactly what a lot of poorly-managed 'agile' software projects are doing. They're getting short-term prototyping gains but at the cost of maintainability and probably stability as well.
      In the real world you can't switch gravity off while developing. ;)
    8. Re:No. by aprilsound · · Score: 1
      Nobody goes and says "Let's build a city!", lays out plans, prototypes and discusses what business go where.
      You've never heard of planned communities? They generally have fewer traffic problems and we the need to expand comes along, new parts of the community can be grafted in easily and in a way that you can't tell they were never part of the original design. The same thing happens with a well designed software project.

      Furthermore, cities have all sorts of continuous planning (e.g. zoning regulations) that go into them, even if they were adhoc to begin with, but in that case, it takes a lot more work to correct the original oversights, e.g. the unfortunate use of imminent domain to build a new road or whatever.

      Planned communities, like planned software, will still have some problems, but they will generally be smaller and less frequent.

    9. Re:No. by gbjbaanb · · Score: 1

      Yeah, I've heard of 'new towns', they're places that no-one wants to live in.

      So far I've not heard the problems with up-front planning, the issues where you forget things, where the customer doesn't fully know what they want, etc. The solutions to fixing these issues are that you spend so much time working out what you want the end product is nearly always not suitable for the initial problem. Take a look at all those government IT projects that generally fail, are delivered years late, they were all designed with up-front planning so the lawyers would know who to blame when it goes bad. In 80% (say) of projects, the "get on with it" approach is the correct one - flexibility in development, and requirements means that you can chuck things that do not fit. The trick is to make sure the customer knows this that if they tell you to make 'a thing that sort of does x' then they will later be in a position where the thing delivered doesn;t do exactly what they want, and that further development will be required - even if rewrites and redesign are part of that process.

      Once they take that on board, the agile development methodology works remarkably well. doubly so if your customer is in a business that requires change all the time.

    10. Re:No. by charleyb123 · · Score: 1

      I do not find your assertion compelling.

      While it's true that incremental discoveries (and downright "surprises") commonly occur during development (causing us to revise at some level our specification and even design), cities built incrementally are typically not as good as those planned out.

      In the United States, Chicago, IL is the only city that *makes money* with its mass transit, because it has a spokes-on-a-wheel rail layout, where everything "goes in" in the morning, and "goes out" in the afternoon (like a breathing organism). Chicago was designed monolithically and (re-)built in a massive effort after the Great Chicago Fire in 1871.

      All the other cities that grow incrementally might have other nice aesthetics, but typically grow their own structural problems that aren't/can't be addressed without centralized planning.

      For software, if nobody owns the "theory of operation" for "how this thing is supposed to do its job", then you're just wandering in the desert until you finally make up your mind.

    11. Re:No. by battjt · · Score: 1

      Instead of "giving some steelworkers a pile of rebar on either side of the river and telling them to build towards the center and figure the details out later.", how about if we give the architect/engineer a crane and a whole bunch of prefab peices.

      $120/hr programmers do the design work, they just also do the weilding. Now I do agree that it is insane to put a dozen inexperienced programmers on a job without specs and expect anything but pile of popsicle sticks when you are done.

      --
      Joe Batt Solid Design
    12. Re:No. by Anonymous Coward · · Score: 0

      A complex software project doesn't compare well to a bridge. It's more like a city. Nobody goes and says "Let's build a city!", lays out plans, prototypes and discusses what business go where.

      That's just stupid; nobody does a city like that.


      How often is the "agile" devleopment view of the city development comparison refactored?

      When you try something with a bridge, you tear it down and try again if something doesn't work, you don't just start another bridge next to the one you started.

      A city builds out for the most part, it does not continually refactor its current configuration.

    13. Re:No. by joost · · Score: 1

      You are so right it's scary. I'm going to use your analogy from now on!

    14. Re:No. by RingDev · · Score: 1

      "A complex software project doesn't compare well to a bridge. It's more like a city. Nobody goes and says "Let's build a city!", lays out plans, prototypes and discusses what business go where.

      That's just stupid; nobody does a city like that."

      Actually, yes they do. Some cities have very active city planning committees. A local town that was facing explosive growth (Verona, WI) a few years back gathered a group of professionals to assess the yields from local farm land, wild life, forests, traffic patters, land costs, etc... After they assembled a huge amount of information the city planners made decisions on what land to annex, what land to rezone, what land to apply protection on. And the result is a City years later that is really well laid out, doesn't have major traffic issues, and had a minimal impact on the local environment.

      -Rick

      --
      "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
    15. Re:No. by Anonymous Coward · · Score: 0

      The difference is, you can't get a nearly free copy of an existing bridge. The only reason to write custom software is you want to create something that doesn't already exist. This is why software development is something of an art. Hacking has a far better track record than SDLC type planned development.

    16. Re:No. by stonecypher · · Score: 2, Insightful

      That's just stupid; nobody does a city like that.

      Philadelphia, New Beijing, Taiwan, Seoul, Londinium, Carthos, Constantinople, Phoenix, Chicago, Tampa, Rio De Janeiro, Tokyo/Kyoto, Sydney, Jakarta and Dubai were all carefully planned. All have scaled to the modern world very well, with the exception of dealing with automobiles, something you can't really fault the ancients for not seeing coming. Essentially the entire Roman empire had very careful city planning, and in fact they did well enough that even now, 2500 years later, their water solutions and much of their infrastructure is still in use today.

      Cities ARE built in a "agile development" fashion.

      Most of them, yes, but certainly not all of them, and those that aren't ad-hoc are having far fewer problems than those which are.

      These days, everybody zones. There's a reason for that. The reason cities are moving away from on-the-fly planning is that we're finally waking up to that just because that's how it's always been done in the past doesn't mean that's how it should be done. Several cities, like my hometown of Pittsburgh, are finding out the hard way that that can cause just tremendous problems in infrastructure which can throttle economies. Have a look at a land value map of Pittsburgh some time, and look at where you have good rail coverage. Compare it to another city, like Chicago or Phoenix, which was planned. You'll notice that in unplanned cities like Pittsburgh, the presence of rail has a comparatively enormous impact on land value, because it offloads industrial infrastructure use, keeping the byways open for commercial and residential use. In planned cities like Phoenix and Chicago, the problem isn't nearly as severe. Notice that Phoenix is growing at something like 60x the national average; Phoenix was nowheresville until about five years after the invention of the air conditioner, and now it's one of America's biggest cities.

      There's a reason for that. Actually, I've got a pretty good article for you on the topic - it's 45 pages and very, very detailed, but it's a little dry. Still, give it a shot - for someone who feels that city planning is a good parallel to software planning, it may be eye opening to learn why the cities in the US who are doing the best in terms of scaling are the ones who ignore the trends you correctly point out, and who instead go with a strict urban growth plan whose conceptual parallel would arguably be stricter software methodologies.

      The thing is, in my admittedly limited experience, most of the people who really stand behind Agile/XP/Scrumm are people who've only ever dealt with Agile/XP/Scrumm or no methodology at all. It is frequently the case then that people see Agile/XP/Scrumm outperforming a complete lack of organization, and quickly begin to believe that to develop without Agile/XP/Scrumm is suicide. There is a reasonable parallel here in your city planning metaphor - most people who look at city planning think it's all ad-hoc, and don't know about the problems going on in city scaling right now. This turns out to be a massive repeating issue to both the Department of Agriculture and to the Department of the Interior. The case can be made that what you are suggesting amounts to Argumentum ad Antiquitatem, and that indeed though this is how it's usually and traditionally been done doesn't mean that it's how things should be done. By extension of your parallel back to software, the way it's always been done might well be described as the waterfall model or the monolithic model, or even by non-planning entirely, and I think we're all to the point of understanding how big of a mistake that would be. (Might as well do some Structured Programming in COBOL, huhuhu.)

      Thing is, though, there are methodologies other than Agile. Agile/XP/Scrumm are very good for in-house software in a business environment, because they are well adapted to unpredict

      --
      StoneCypher is Full of BS
    17. Re:No. by something_wicked_thi · · Score: 1

      You ought to learn a little more about Agile software development. You pretty much prove the point.

      Even planned communities are done incrementally. As you say, "new parts of the community can be grafted on easily". The key here is that you have new parts over time. Agile software is like a planned community, if done right: you lay down all the parts using techniques that you hope will be future-proof. You still plan at every stage before developing in Agile software, and you use accepted practice to try to prevent problems in the future. You have no way of knowing what might come in the future (in a planned city or a software project), so the best you can do is follow a few principles that you hope will keep your project maintainable.

      Nobody (I hope) is promoting building software by throwing code together until something works. If you were under the impression that's what Agile programming is, then you've either never used it, or you've been working under bad management too long. You don't write code by the seat of your pants in Agile programming just as you don't drop houses in just any location at all in a city, planned or otherwise.

    18. Re:No. by cartman · · Score: 1

      Philadelphia, New Beijing, Taiwan, Seoul, Londinium, Carthos, Constantinople, Phoenix, Chicago, Tampa, Rio De Janeiro, Tokyo/Kyoto, Sydney, Jakarta and Dubai were all carefully planned.

      A defining feature of many of those cities is that they were completely destroyed, sometimes repeatedly, and rebuilt. As such they went through "iterations" of planning which resemble an agile process much more closely than they resemble a waterfall process. Not a single one of those cities was originally planned according to some conception when the city was founded.

      Chicago seems to be the most-cited example on this thread. But Chicago is unusual in that it grew from a population of a few hundrend thousand to 3M in a few decades, thus everyone knew that it was going to be a large city. As a result, planning of the kind you describe was possible. Then it was destroyed in a great fire, and rebuilt, which is an iteration. The Chicago you see today most certainly was not planned from the beginning.

      Most people don't know that one of the most carefully planned cities in the US was Los Angeles. I live there now. It's amazing to me how ridiculous were the planning assumptions, made 4 decades ago, for a city with a population 1/5th what it is now. The infrastructure of intersecting freeways is perfectly designed for a city with 1/5th the population it currently has. Los Angeles has traditionally had the most rigid zoning requirements, and the strictest building codes, of anywhere. Some of them now seem so silly (in retrospect) as to be quaint. Entire regions (like historic core in downtown LA) were carefully planned only to be virtually abandoned.

      The thing is, in my admittedly limited experience, most of the people who really stand behind Agile/XP/Scrumm are people who've only ever dealt with Agile/XP/Scrumm or no methodology at all. It is frequently the case then that people see Agile/XP/Scrumm outperforming a complete lack of organization, and quickly begin to believe that to develop without Agile/XP/Scrumm is suicide. There is a reasonable parallel here in your city planning metaphor - most people who look at city planning think it's all ad-hoc, and don't know about the problems going on in city scaling right now. This turns out to be a massive repeating issue to both the Department of Agriculture and to the Department of the Interior. The case can be made that what you are suggesting amounts to Argumentum ad Antiquitatem, and that indeed though this is how it's usually and traditionally been done doesn't mean that it's how things should be done. By extension of your parallel back to software, the way it's always been done might well be described as the waterfall model or the monolithic model, or even by non-planning entirely, and I think we're all to the point of understanding how big of a mistake that would be. (Might as well do some Structured Programming in COBOL, huhuhu.)

      In my own significant experience, I've learned that an incremental and iterative process is necessary in almost any project. I'm not advocating XP or FDD. However the "waterfall method", where you attempt to devise a perfect architecture once and for all, beforehand, almost always results in failure. Attempting to plan any software project as one big iteration almost always ends badly. It results in uncontrolled projects where timelines are drastically incorrect.

      It has been my experience that Fred Brooks' book "The Mythical Man Month" is now almost universally ignored by experienced software professionals. From what I can gather, it was the source of this analogy between software development and construction. It was nifty for its time, but a great deal has been learned since then.

      By the way, there is no opposition between agility and planning! It's a mistaken notion of agile methods, that they just "start throwing things together." Agile methods involve continuous requirements gathering, and tremendous planning. The class diagram is the

    19. Re:No. by Anonymous Coward · · Score: 0

      I think you mean Melbourne, not Sydney whose planning was non-existant or corrupt.
      Canberra is another planned example.

    20. Re:No. by Anonymous Coward · · Score: 0

      Here's the next question. Suppose you knew in advance roughly how big the city was going to get and knew what it's major functions were going to be. What would be the BEST approach to building that city. What would be the WORST?

      Like it or not, a computer program is NOT an especially complex beast. I think comparing a single program to a single physical structure (COPY is a shed, a router might be a metro station etc.) is not unreasonable. One could then compare an enterprise to an airport and the internet as a whole to a city. Even at the "airport" level, everyone is funamentally in agreement about the overall function of the system (even though there may be disagreement about the implementation of some entities within). It is only at the highest "city" level that you see situations where actors within the systems are actively in competition and can profit from impeding the function of the city. LA will always be a crappy implementation of a city mostly because in 1930 or so a cartel led by GM and Goodyear saw a way to make lots of money. I'm not saying that this doesn't happen in software I just don't think of that as a design methodology that I would want to emulate.

    21. Re:No. by mcrbids · · Score: 1


      Thing is, though, there are methodologies other than Agile. Agile/XP/Scrumm are very good for in-house software in a business environment, because they are well adapted to unpredictable change. That said, it turns out they perform very poorly in other markets, where you know what the end product is generally going to look like, and unpredictable change turns out to be a smaller candidate in software development. In those markets which are not characterised by unpredictable movement between directions, you will want a different process


      This is one of the most insightful things I've read today, particularly this quote: because they are well adapted to unpredictable change.

      In the industry my software targets, unpredictable change is the norm. Furthermore, the requirements of the industry are so insufficiently designed that those required to enforce the changes are unsure of what they mean.

      So, I picked Agile software development, and it's worked out well consequently.

      I suspect that as we approach the singularity, Agile software programming will become more the norm...

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    22. Re:No. by mcrbids · · Score: 1

      One more tidbit, from my original post:

      I do just enough specifications to determine how all the pieces are going to fit together, what all the database fields are, and how the constraints, triggers, and foreign keys assure reasonably sound data. I beat the idea in front of a few people and search for objections, until most people approached seem to like the idea, and nobody has any major bones to pick.

      I believe that represents your "planned" cities. They didn't go over every detail, they just laid out an idea of how it the major pieces fit together. Thus they came up with a system that basically worked, and still works today.

      Agile != Chaos

      Agile development means paying close attention to what's really, actually wanted, and doing that next. The fact that you're nextdoor to a convenience store is not something the original planners speculated. The fact that the streets run in a layout intended to separate residential and commercial areas while keeping them not too far apart is.

      Just because you're willing to modify the plan quickly to cover unanticipated needs doesn't mean you don't have a plan!

      --
      I have no problem with your religion until you decide it's reason to deprive others of the truth.
    23. Re:No. by stonecypher · · Score: 1

      Philadelphia, New Beijing, Taiwan, Seoul, Londinium, Carthos, Constantinople, Phoenix, Chicago, Tampa, Rio De Janeiro, Tokyo/Kyoto, Sydney, Jakarta and Dubai were all carefully planned.

      A defining feature of many of those cities is that they were completely destroyed, sometimes repeatedly, and rebuilt. As such they went through "iterations" of planning which resemble an agile process much more closely than they resemble a waterfall process. Not a single one of those cities was originally planned according to some conception when the city was founded.

      Er, that's just not correct. Philadelphia's expansion after incorporation - that is, after the 20,000 person mark - was planned carefully. No destruction. New Beijing was an emperor's experiment; so was Seoul. Londinium was invented as a support system for the critical military juncture of the area by the Romans. Carthos was created to fortify a supply depot with major importance to fighting Rome, and was designed by military leaders for the express purpose of maintaining definsibility throughout growth. Constantinople was founded, and Rome quite literally stripped to create it, in the interests of re-seating the Roman empire to deal with communications problems springing from sheer empire size; it was arguably the finest example of Roman pre-creation planning, and had its first 500 years of growth sketched out before the ground was broken. Phoenix was planned when it was founded, and re-planned with the advent of air conditioning. Tampa was planned as a swamp-dredge city in the same way that Washington DC was. Rio de Janeiro was the root of Spanish action in the area, and the only destruction that happened during its creation was the Spanish razing the area and starting over. Tokyo has been planned and re-planned seven times, all but one of which reflect simple socio-political changes. Sydney was planned as the port supplier and basis of the British penal system of the day. Jakarta is an imperial city which carefully phased out the old city a piece at a time. Dubai is currently under development as a monarchial experiment in the interests of commerce.

      Indeed, the only cities in that list that have actually been replanned due to destruction were Chicago and Kyoto, both after fire, and both cities had been previously planned for other reasons. There is no such coincidence regarding destruction at hand; I was quite careful to avoid such a thing.

      Most people don't know that one of the most carefully planned cities in the US was Los Angeles.

      Los Angeles predates the United States by almost two hundred years, and is the confluence of nine monasteries. It was largely grown by accident as a commercial hub during the gold rushes of 1849 and later 1861. In fact the formal urban planning of Los Angeles did not begin until 1922. This simply is not true. Please begin to cite sources; your data is false.

      It's amazing to me how ridiculous were the planning assumptions, made 4 decades ago, for a city with a population 1/5th what it is now.

      Los Angeles had a population of 9,519,338 at the 2000 census, and a current population estimate of 9,935,475. In 1960, the population at census was 6,038,771. This is a growth rate of 64% in 40 years, rather than the 400% you suggest. I would appreciate it if you wouldn't invent data while arguing.

      Los Angeles has traditionally had the most rigid zoning requirements, and the strictest building codes, of anywhere.

      Los Angeles is actually famous for its lack of zoning requirements, something typified by the Long Beach port wars of the 1980s and the Earthquake Safety Urban Reinvention Board after the quake in 1993. You are in fact simply incorrect. I would ask that in the future, when making sweeping claims like this that you begin to cite da

      --
      StoneCypher is Full of BS
    24. Re:No. by BrainRam · · Score: 1

      Like most arguments, the real answer lies somewhere in the middle and changes drastically depending on context. I have worked on projects where there was far too much up-front planning, and on projects where there was nowhere near enough. I've seen agile methods thrive and fail, and I've seen waterfall thrive and fail. There is no single methodology that maximizes the possibility for success. What will work for your project depends on the scope of the project, the needs of the customer, and the team involved in the development. And, of those, I'd say the biggest factor is the knowledge and skill of the team. Not just in coding, but in understanding the project space and having a background in what has and hasn't worked in analogous conditions. One key element is having a technical decision maker who is also a good leader. This person must be able to analyze the current situation and always be working to advance progress. There are always conflicts in a major project, and having a single decision point (or a highly functional group of such people) is fundamental to success. If you decide to use a front-loaded design process, you need somebody who can reign in the scope of the project. They must be able to figure out when it is time to start documenting and planning and begin the work. I once interned at a bank, and watched a team do four months of eight hour per day meetings to plan a new system. They were still doing it a year later. The goal of a front loaded process is to establish a solid framework for the project, but if it never gets started, it's a waste of time. Similarly, agile methods fail if you don't know what you are working towards. That's why the decent Agile books all spend a lot of time on user stories, use cases, and planning short term goals. You buy in at the beginning to spending a lot of time refactoring code. Which is an easier sell to management than saying "We're going to write a lot of code, and then rewrite it constantly, even when it works." Both work, and both can fail miserably. It's the requirements of the project and the team that indicate which you use. If I'm working in an area where code audits are likely and I'm dealing with regulatory oversight, I'm front-loading the design. I want as many i's dotted and t's crossed up front, if only to legally cover myself and the bill-payers. And if I'm putting together a web site that I want to evolve over time, I'm going Agile. But in either case, I'm using as many techniques as I can from any style that helps. Agile style unit testing writen by the dev team instead of the testers at a bank? You bet. Sending my developers out to view the end users to do a process analysis before beginning an Agile project? Hell yes. Continuous integration? Always. The key is flexibility. Observe the team and the software. Watch what is working and what doesn't. And continuously feed that information back into the process to improve it. Good software is written by highly technical people who have the ability to communicate, led by a decisive and intelligent person who can comprehend and mesh the personal and business needs of the team, the users, and the project. No matter how much up-front work you do, you can never capture the entirely of the project. You must be flexible. Good software is never an academic exercise. It's an organic process. Like all processes, you can control the reaction with the right inputs and environment. When we reach the day that I can write a spec and hand it to two teams of developers and receive exactly the same code from both teams, I will leave the industry and never code again.

    25. Re:No. by BrainRam · · Score: 1
      And one day I'll remember to add the

      tags. Sigh.

    26. Re:No. by cartman · · Score: 1

      Los Angeles predates the United States by almost two hundred years, and is the confluence of nine monasteries. It was largely grown by accident as a commercial hub during the gold rushes of 1849 and later 1861. In fact the formal urban planning of Los Angeles did not begin until 1922.

      Los Angeles predates the United States by 200 years? I hope you're joking! The Spanish hadn't even arrived in California then. The Spanish hadn't even conquered what we now call California until 1769. Your "fact" would put the founding of LA during the late Reformation! Whom do you think founded it? Elizabeth I? Perhaps the city of New York was founded during the Medieval period?

      Los Angeles was incorporated in 1850. You can find that information by typing "Los Angeles" into wikipedia and reading the first two paragraphs. Granted, there was a ranch there previously which later became a small town, and which had the words "Los Angeles" embedded in its name. Even if you count that as LA (which would be a stretch), LA was founded in 1781. Certainly not 200 years before the U.S. was founded!

      And Los Angeles was not founded as the confluence of nine monasteries! First, they were missions, not monasteries--the two are completely different, and the nearest monastery was thousands of miles away. Second, the early missions were founded by Junipero Serra in 1768, not 200 years before the founding of the U.S.! Third, the nine "monasteries" founded by Junipero Serra were spread all over California. Only one was in Los Angeles. Another one of the missions is in Sonoma county, which is ~500 miles away! In other words, Los Angeles was not founded as a confluence of the nine "monasteries"!

      In addition, Los Angeles had nothing whatsoever to do with the gold rushes of 1849 and 1861. Those rushes took place hundreds of miles to the north! At that time, Los Angeles was a small village with a few thousand people, and most certainly was not a "commercial hub" of any kind. From the wikipedia article (or practically any other source on this topic): "In the 1870s Los Angeles was still little more than a village of 5,000".

      Finally, I recently worked in a building in historic core LA which was built in 1913. All the buildings on the street are of the same size and general design, as was mandated by plan. The planning began before 1922!

      Los Angeles had a population of 9,519,338 at the 2000 census, and a current population estimate of 9,935,475. In 1960, the population at census was 6,038,771.

      LA has a population of less than 4 million now. The second sentence in the wikipedia article on Los Angeles reads: "As of the 2005 U.S. Census estimate, the city had a population of 3.8 million.".

      Neither of the links you provided contain you what claim they contain. One of the cited pages lists the population for a wide region which includes Long Beach! That is not Los Angeles!

      I've got four life critical applications under active use, and have formal training in six different software engineering methodologies, two of whom are military.

      Clap, clap, clap...

      I see that modesty is your strong point.

      You should talk...

      "Agile methods involve continuous requirements gathering, and tremendous planning." Where are you getting this stuff? The phrase used over and over in all of the XP books is 'the day-to-day process of planning.'

      Umm... try reading the sentence you're responding to. Try to understand it.

      Microsoft is the origin of the McConnell/Sullivan method, which they used from about 1997 to about 2003. Before that, Microsoft did not have a unified internal model, and was largely a mix of iterative and monolithic design. They now use Agile extensively. This is the reason they've created Channel9. This is the reason that Visual Studio Team System is a big collection of

    27. Re:No. by stonecypher · · Score: 1

      Los Angeles had a population of 9,519,338 at the 2000 census, and a current population estimate of 9,935,475. In 1960, the population at census was 6,038,771.

      LA has a population of less than 4 million now. The second sentence in the wikipedia article on Los Angeles reads: "As of the 2005 U.S. Census estimate, the city had a population of 3.8 million.".


      There's just something special about someone who will ignore three links into to the census page, and instead insist on a community collaboration effort which says it's derived from the census. Your ability for self deception is fantastic. That you spend half of your response ranting about Juniper Serra - you should do less of your research on Wikipedia, which is just built by other people like you - is indicative of quite a bit.

      Neither of the links you provided contain you what claim they contain. One of the cited pages lists the population for a wide region which includes Long Beach! That is not Los Angeles!

      It's called "Los Angeles County." Not very interested in understanding, are we?

      First, they were missions, not monasteries--the two are completely different

      I said monasteries for a reason. Get a history book.

      and the nearest monastery was thousands of miles away.

      Nonsense.

      There is no method called the "McConnell/Sullivan method".

      Don't be an ass. I linked to the books I was talking about. I just didn't feel like writing out six titles over and over.

      Microsoft's turn toward agile methods is very recent.

      As the various links I gave you point out, it was end 2002, beginning 2003. In software terms, that isn't recent, and the products you cite as examples start within that time frame.

      I've got four life critical applications under active use, and have formal training in six different software engineering methodologies, two of whom are military.

      Clap, clap, clap...


      Huhu. First you demand to know what I've done, then you act like I'm bragging to answer you. What a loser.

      Umm... try reading the sentence you're responding to. Try to understand it.

      Snide comments don't make you any clearer. If people reading can't understand the writer, it's the writer's fault. You've said exactly nothing of value here.

      I find it amusing how you've managed to make an entire reply out of tangents, and ignored all the industry data I gave you, and yet you've still managed to convince yourself that you're somehow giving deep and meaningful observations about an industry which just doesn't work the way you want to pretend it works, then followed through on a post that says "if you won't give facts, don't respond" by responding without facts, and screaming "no you" as loud as you can. Save myself what embarrassment? Do you honestly believe you've made a point here?

      We're done here. Go try to impress someone else.

      --
      StoneCypher is Full of BS
    28. Re:No. by cartman · · Score: 1
      There's just something special about someone who will ignore three links into to the census page, and instead insist on a community collaboration effort which says it's derived from the census. Your ability for self deception is fantastic.

      You linked to the wrong census pages.

      The population of Los Angeles is reported not only on wikipedia, but on many other sites. In fact the population of LA is painted on all the signs surrounding that city, if you happen to visit some time.

      That you spend half of your response ranting about Juniper Serra - you should do less of your research on Wikipedia, which is just built by other people like you - is indicative of quite a bit.

      I provided a link to wikipedia because that article contained the relevant information in the introductory paragraphs. I felt it would be accessible.

      It's called "Los Angeles County." Not very interested in understanding, are we?

      The topic being discussed was city planning.

      I said monasteries for a reason. Get a history book.

      You said "monasteries" because you didn't know what you were talking about. It would be better for you not to pursue the topic of history...

      First you demand to know what I've done, then you act like I'm bragging to answer you. What a loser.

      Once again, you've peppered your remarks with childish nonsense and silly insults.

      ...I never demanded to know what you've done. I'm not interested in knowing what you've done.

      Snide comments don't make you any clearer. If people reading can't understand the writer, it's the writer's fault.

      The sentence to which you were responding was perfectly clear. I imagine you understood it.

      We're done here. Go try to impress someone else.

      Indeed, we're done with this discussion. It wasn't very productive. Perhaps it could have been, but unfortunately your initial post was filled with puerile remarks of a kind which had been absent from this thread until you introduced them.

      Under different circumstances, I would have simply ignored your gravely mistaken comments about urban history, rather than poking fun at them. Believe it or not, I dislike insulting people. However, I do respond to inappropriate remarks.

      I'm unsure whether you know about software methodology, or not. Who knows, perhaps you know a lot. But that would be impossible to determine, since the discussion progressed no further than citing names. It could have been otherwise if you had expressed your disagreement with agile methods (or with the content of my post) in more appropriate terms.

      If you do respond, then I hope you do so in a more appropriate tone.

    29. Re:No. by dodobh · · Score: 1

      From Wikipedia:

      http://en.wikipedia.org/wiki/Phoenix,_Arizona

      The city's automobile-dependent nature holds implications for greenhouse gas emissions. Although Phoenix is the sixth-largest city in the United States, its public transit system accounts for just one per cent of the passenger miles that New York City's does. The reason is that Phoenix's booming population has spread so far across the desert; greater Phoenix, whose population is a little more than twice that of Manhattan, covers more than two hundred times as much land.[4]

      That isn't scaling up. Phoenix has a mere 1 million people in the city, with 3.7 million in the metropolitan region. That's a pretty small city, except that it is slightly more spread out. Problems tend not to show up until the first couple of decades of growth have been passed, when all the buffering of infrastructure provided by the original planning is used up. Planning can handle regular growth, not exponential.

      Contrast with cities which have scaled up, like New York, or Mumbai.

      That paper you link to is basically showing how development should NOT occur.

      --
      I can throw myself at the ground, and miss.
    30. Re:No. by anomalous+cohort · · Score: 1
      requirements analysis, specification development ... if you get that stuff done, the actual coding ought to be an academic exercise

      If only it were that easy. Here is what I have found.

      • The company selects certain employees as the Subject Matter Experts.
      • Those employees are good at their jobs so they have demonstrated success in the very positions that the proposed software will serve.
      • Just because you are good at what you do doesn't neccessarily mean that you are good at specifying software features and requirements.
      • These people spend a lot of company resources doing the business modeling, requirements, and analysis up front and developing possibly CMM-I level 5 compliant documentation only to find that the application still doesn't add a lot of value for its intended audience.
      That is why the XP folks are so down on the pre-coding steps. They figure that most companies won't do it right anyway so why bother doing it at all? If I have to re-write the code seven times with or without the inception phase, then you might as well do away with the inception phase and save yourself at least that expense.

      That is why ITG is starting to take off. They recognize that just empowering the SMEs isn't going to bring the neccessary product and project management experience to the decision maker's table for a successful launch.

      This I believe. It is always a good idea to continue to refine whatever processes, methodologies, and tools you use in the production of quality software. However, no amount of process, methodology, or tool upgrades are a satistactory replacement for human ingenuity in the solution of the very compelling problems that software development faces today.

  11. It's a disposable culture. by aussersterne · · Score: 4, Interesting

    Maintenance? If you can lower the cost of creation enough, it's cheaper to just start from scratch every couple of years. It's the same phenomenon seen in blenders and automobiles. Send it to the landfill and get a new one made.

    This phenomenon is only bound to accelerate as software labor costs go through the floor due to offshoring.

    --
    STOP . AMERICA . NOW
    1. Re:It's a disposable culture. by wtansill · · Score: 4, Insightful
      Maintenance? If you can lower the cost of creation enough, it's cheaper to just start from scratch every couple of years. It's the same phenomenon seen in blenders and automobiles.
      Ehhhhh -- no. Maybe some trivial applicationm can be thrown away and reengineered every few years, but business generally does not have that luxury. There are data conversions to consider, as well as the fact that, depending on the system in question, an entire "ecosystem" has likely grown up around the core application. You cannot just throw the application away without ripping out and reworking all those other systems that depend on it in some form or fashion. Yes, I know -- Software as a Service to the rescue -- well defined interfaces between applications, etc. Except that in the main, that does not happen, so you are better off having an extensible, maintainable system. Now if I could only sell that idea to the PHB...
      --
      The contest for ages has been to rescue liberty from the grasp of executive power. -- Daniel Webster
    2. Re:It's a disposable culture. by GigsVT · · Score: 5, Interesting

      Terrible idea. Happens a lot though. Not created here syndrome doesn't help.

      My personal policy is that unless the requirements change radically, or you are facing serious obselence, you should never start over from scratch.

      Even if you wind up rewriting 95% of the code, you'll prevent yourself from making the same mistakes that the original developer already sorted out.

      It goes something like this:

      You find a chunk code that looks entirely unnecessary.
      You take it out, replacing it with the obvious solution.
      You run your testing stuff, it's easy since you were starting from a working system, it's all regression testing.
      You often find that the code actually did do something important, something subtle usually.
      You rewrite it in a better way, that accomplishes the same thing.

      The alternative, starting from scratch, means that you will likely miss the subtle need for that particular thing. You don't have the benefit from starting from something that works.

      It seems like it would take longer, but it goes a long way to prevent requirements and their subtle implications from falling through the cracks. You basically have a cryptic book telling you all the little tricky things. If you throw that book away then you have to rediscover them yourself. And even if you keep it, you aren't going to seriously read it in a deep way if you are starting over completely. By the time you understand all the old code fully you could have been rewriting it incrementally.

      --
      I've had enough abrasive sigs. Kittens are cute and fuzzy.
    3. Re:It's a disposable culture. by kfg · · Score: 2, Funny

      . . .it's cheaper to just start from scratch every couple of years.

      But just think of all those lines of code being dumped into our landfills. Sure, it's easy enough to ignore it now, but ultimately we leave the problem to be dealt with by our children.

      Everybody! A-one and a-two and a-three . . .

      Won't someone please think of. . .

      KFG

    4. Re:It's a disposable culture. by Ohreally_factor · · Score: 1

      Some day, we're going to run out of room in the virtual landfills. If we don't start recycling code NOW, our children or our children's children will never know the vast sweeping cyberspaces of the internet.

      Something like that? The visual I get is of a guy in a pirate suit with a tear running down his cheek. =)

      --
      It's not offtopic, dumbass. It's orthogonal.
    5. Re:It's a disposable culture. by kfg · · Score: 1

      Clutching a tube to his breast.

      KFG

    6. Re:It's a disposable culture. by aauu · · Score: 3, Insightful

      The attitude you get when you hire children. Well designed apps are maintainable and last for much longer than the transient early career coders can believe. I have written application components that ran unchanged for more than a decade without any modification. Careful thought, proper design with comprehensive error detection and incremental testing during construction can produce an efficient proper solution that will stand the test of time. Enterprise applications often have lives of a decade or more. Banging out a new application in record time is useless if the design and construction is so shoddy that the application cannot be maintained without discarding the entire pile of crap for a new version. Notably, the high speed coders have moved on to new jobs so that they avoid responsibility for the mess they left behind. Maintenance is inevitable because time is change. I have spent 30 years in the IT industry and my experience that all but small new companies will have an application portfolio with an average age 7 years. This will be longer for core functionality as you do not re-engineer an enterprise in 90 days. When development can take 4 to 5 years and millions of dollars to replace a core application it is very important to consider the life of the application and platform. Most of the surviving dot coms now have 7 year old applications that are straining from the quick implementation that did not consider scalability and flexibility in the haste to get the company started initially. Maintenance also is much more difficult than coding a new application. It is much harder to extend the functionality of an existing production system without breaking anything. Real programmers can do maintenance successfully where others give up and want to discard all previous investments for their convenience.

      --
      When I was young, I had to rub sticks together to compute.
    7. Re:It's a disposable culture. by Anonymous Coward · · Score: 2, Interesting

      > software labor costs go through the floor due to offshoring.

      Nice urban legend. Maybe you should talk to someone who has actually done this type of thing. By the time you pay for the extra cost to send-out the RFP's and negotiate a contract (from what I've seen it's typically 1% or more of the total cost of the system when dealing with Indian contractors), the extra management required to oversee the project, travel to/from the contractor (as an example, my last airfare to Ahmedabad, India was $4,784.70!), paying managers for travel time (between 40 and 60 hours roundtrip from the east coast US to India), extra people to interface between the nearly illiterate developers and the local people specing the system, extra labor to be very documentation-heavy to help reduce communication problems, extra time to fix bugs due to communication problems, and dozens of other major things that greatly increase costs, even if the Indian programmers were free they still aren't a good deal. When I worked for IBM Global Services, I saw that Indian programmers usually had an additional cost of 5 to 7 times what they actually made per hour. If you paid them more than 1/5 what a real American programmer would make, the Indian programmers actually cost more money for less usable code.

      I've been doing this for nine years. I haven't seen anyone actually save money by hiring cheap offshore programmers.

    8. Re:It's a disposable culture. by stonecypher · · Score: 1

      Whereas I agree with you, there is a consideration here for terms of pure pragmatism - early career coders aren't able to do the kind of planning which ends one up with that kind of long-term maintainable software. Even with proper planning in something like the PSP / TSP, it often just takes someone with real experience to be able to knock something like that out in the first place. You can't begrudge them the experience that their own naïveté has taught them.

      --
      StoneCypher is Full of BS
    9. Re:It's a disposable culture. by Cederic · · Score: 1


      You need to pick up Refactoring by Martin Fowler.

      Write and run the tests _before_ you touch the code. Otherwise how do you know what the code you're changing does, and that it does it properly?

      But otherwise, yeah - rewrite from scratch runs a tremendous risk of losing a lot of subtle behaviour and error checking. Although the technique of legacy isolation (which has a proper name that I can't remember) can often help here - isolate the old system, and start implementing new capabilities in a new system. Stop updating the old system and eventually you'll be able to turn it off. This is easy to say of course, but unfortunately isn't easy to achieve in practice.

    10. Re:It's a disposable culture. by BandwidthHog · · Score: 1

      That one took me a minute.

      --

      Quantum materiae materietur marmota monax si marmota monax materiam possit materiari?
  12. Drive Down Anything You Can! by jarich · · Score: 1
    If Ruby On Rails drives down development time, do it!

    If Cruise Control (and continuous integration) drives down development and maintenance time, do it!

    If it you've got some tool or process laying around to help drive ~any~ part of the software product lifecycle, it will be adopted and used, just like Ruby on Rails has.

  13. I don't buy it by Skreems · · Score: 1

    Software frameworks are not a replacement for software management and development methods. Do you blame the C# libraries for poor software written in it? Do you blame the STL for un-maintanable code? Tools are tools, they should work as efficiently as possible. The person using the tools is responsible for what they do with them.

    --
    Slashdot needs a "-1, Wrong" moderation option.
    The Urban Hippie
    1. Re:I don't buy it by phantomfive · · Score: 1

      Do you blame the C# libraries for poor software written in it?

      Dijkstra would. Here are a few of his choice quotes:

      PL/I --"the fatal disease"-- belongs more to the problem set than to the solution set.
      The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offence.
      Projects promoting programming in "natural language" are intrinsically doomed to fail.

      Dijkstra is not the only one. Others, such as Alan Kay, have been promoting their vision of how programming should be for a while. Although language designers disagree in what makes a good language, they all agree that the language choice can make a huge difference.

      You can see this for yourself. Would you want to write the server side code of a website in assembly? Even writing it in C++ would be miserable.

      The idea that some people have (dijkstra, Kay) is that the languages we use now are as bad as assembly, compared to what we could have. Hopefully they are right and in the future programming will be much easier.

      --
      Qxe4
    2. Re:I don't buy it by phantomfive · · Score: 1

      oh, here is a quote that illustrates my point perfectly:

      The tools we use have a profound (and devious!) influence on our thinking habits, and, therefore, on our thinking abilities.

      This is why the language matters. It is a tool, but a tool can limit us in a million different ways.

      --
      Qxe4
    3. Re:I don't buy it by crucini · · Score: 1
      You can see this for yourself. Would you want to write the server side code of a website in assembly? Even writing it in C++ would be miserable.

      C++ can be a very good language for web apps. I say this after writing tons of web code in Perl (which I love) over the last 6 years. I'm currently writing back-end code at a large web company. About 40% Perl, 60% C++.

      C++ powers more of the web than most slashdotters realize, especially the high-profile web sites.

      One of the keys to effective C++ web apps is a class library oriented to text processing. The STL, awesome though it is, is not quite right.

      Becoming a good Perl programmer is excellent training for becoming a good C++ programmer. When you have a C++ class library with powers equivalent to libperl, the difference between Perl and C++ is mostly syntax.

      As for writing web apps in assembler, I have been tempted - only to prove a point. The hard part, of course, is the library. Write it from scratch? Or wrap libperl?
    4. Re:I don't buy it by phantomfive · · Score: 1

      Have you ever tried ruby on rails or even php? We were just discussing at work yesterday how much more miserable cgi in perl would be than one of those others.

      --
      Qxe4
    5. Re:I don't buy it by crucini · · Score: 1

      I haven't tried RoR. I have had to write a bit of PHP. I don't like it. Compared to Perl, it is tasteless, chaotic and disorganized. I do like the online manual, with user-contributed comments.

      I do recognize the value of PHP in providing a very smooth on-ramp to beginning or occasional programmers.

      Were your apprehensions directed towards Perl or CGI? They are quite orthogonal. Almost anyone writing a public-facing website these days will choose persistent process model rather than CGI. That is equally viable in Perl, PHP or C++

      What makes you think that writing web apps in Perl is miserable? Especially compared to PHP?

    6. Re:I don't buy it by phantomfive · · Score: 1

      I don't like PHP at all, for reasons which you already mentioned. But a lot of people do like it. Probably the reason I didn't like Perl is because the only way I've used it for web programming is CGI. I wasn't aware of any other way to do it with perl or C++.

      I do agree with your comment that the major advantage of Perl over C++ is a good library (and perhaps memory allocation issues).

      That said, I still believe that the language can make a huge difference. You can only think of so many things at once, and a good language can streamline your thought process. For example a for loop or if statements is often much simpler to think about that a nest of labels and gotos.

      Whenever you are programming, your mind has a parser going, which is tranlating the written word into something you can understand. If the language is easy to parse into meaning, then your mind can worry about other things. I first noticed this after programming a lot of C++, then moving to TCL. I think you could probably write a TCL parser in less than 30 lines. The mental load of parsing was lifted from my mind (though I had never noticed it there before) and programming became a lot easier.

      Another thing a programming language can do is make it easy for someone to read. When I program, I try to make it easy for someone to understand what I was doing by structuring my code in logical sections, using self-explanatory variable names, etc. Some programming languages make this easy, others make it hard. This is another place loops and control structures come in handy, and also classes. Personally I think C++ doesn't do a very good job of this, and Objective C does better.

      --
      Qxe4
  14. You misunderstand rapid development by TrappedByMyself · · Score: 3, Interesting

    The movement to develop "quick software" is not for the sake of developing something fast at the expense of other concerns. It is meant to address requirements problems, which are the life or death of an applciation.

    It's rare for a customer to know what they want. Even worse, alot of development happens without customer involvement. For example, there is usually a huge early requirements meetings, then developers walk away and write code for 6 months. Sure there are demos in between, but they are usually heavily scripted to give the illusion of progress. At the end the developer shows up with a system and the customer wants to change about a bazillion changes.

    So...the recent movements in agile or rapid or whatever you call it grew to address these issues. By getting up a functional prototype quickly, you get the customer usuefully involved early in the process. They can use the system and begin to get an idea of what they really want. If you chunk into 4 or 6 week cycles you can have continuous deliverables. And if you focus on everything such as testing, documentation, and deployment from the get go, you can have complete systems for each cycle so you always have demo ready versions. With frequent, complete releases the customers (and management) are much less worried about progress, which means less stress for the developers.

    Somewhat idealistic, I know, but it works pretty well.

    --

    Help me take back Slashdot. When did 'News for Nerds' become 'FUD and Conspiracy Theories for Extremist Nutjobs'?
    1. Re:You misunderstand rapid development by Mycroft_514 · · Score: 1

      And what you don't understand is that the "Rapid Development" (or proto typing, as we used to call it years ago), only works well when your developers can plan ahead.

      Otherwise, the rapid development pushes MORE work down on your tech support staff, like your DBAs, who now do 3 and 4 times the work to add columns one at a time, instead of all at once.

      The company I am currently at is doing this now, and as a DBA, I haveto put up with the crap from the increased workload, so bottom line, it is a net LOSS for the company.

    2. Re:You misunderstand rapid development by Duhavid · · Score: 2, Insightful

      Not that you dont have a good point, but I have seen
      many cases where the developers want to converse with
      the subject matter experts, but they and the management
      above the SME's will not commit the time needed to do
      this. So, the quick, wrong ( in part anyway ) answer
      is given, the system is wrong, and development is
      blamed.

      And continuous deliverables and agile development can
      be a good solution, but only if the users will put in
      the time to evaluate the incremental drops. And that,
      often enough, depends on the management levels above
      them allowing them the time.

      --
      emt 377 emt 4
    3. Re:You misunderstand rapid development by TrappedByMyself · · Score: 1

      And what you don't understand is that the "Rapid Development" (or proto typing, as we used to call it years ago), only works well when your developers can plan ahead.

      If people don't commit to the system, then of course it won't work.
      If I tell you that a screwdriver is for screws, you can't call me wrong just because you're using it to pound nails.

      --

      Help me take back Slashdot. When did 'News for Nerds' become 'FUD and Conspiracy Theories for Extremist Nutjobs'?
    4. Re:You misunderstand rapid development by donaldm · · Score: 1

      In my experience the customer always knows what he/she wants, the problem is that what they want is normally not what really is required. Lots of coffee and talking are needed in the initial stages and it is always a good idea to find out what the people who are going to use the program think. Unfortunately once a manager steamrolls the project you normally end up with something the workers hate but the managers love since "it's shiny and has all these pop-up menus".

      A few years ago I was involved with setting up SAP at a customer site. The IT manager was quite annoyed when he was told that the database must now be modified to conform to the customer's business practices this resulted in a consulting/programming cost that was about 7 times the initial cost of the software. It would have been far cheaper, easier and more efficient (not to mention quicker) to change the business practices to conform to what SAP uses.

      --
      There ain't no such thing as proprietary standards only proprietary formats. Standards are by definition open.
    5. Re:You misunderstand rapid development by try_anything · · Score: 1
      The company I am currently at is doing this now, and as a DBA, I haveto put up with the crap from the increased workload, so bottom line, it is a net LOSS for the company.
      It's funny that you can declare the process a net loss for your company with even mentioning how well the development work is going. It seems like that would be a big factor in evaluating the success of the process. Or would you have us believe that more work for you is *always* a bad thing, regardless of how useful that work is to other people?
  15. Justified-Handwaving. by Anonymous Coward · · Score: 1, Insightful

    "Similiarily start-ups don't care about these issues since they plan on being bought out before they matter. "

    Gee, speak it like it's gospel or something. I better not start a company, or some uninvolved slashdotter may suspect my motives.

  16. In other news... by aiken_d · · Score: 1

    There's too much focus on the price and features of new razors, and not enough attention paid to the cost of razor blades.

    Welcome to life, people. We humans like instant gratification, and if something is easy now, we don't pay a whole lot of attention to what the long term implications are. Same goes for companies.

    I'm not belittling the original OP; I think it's a valid point and one that should be paid attention to. I'm just trying to explain why it is not a surprising state of affairs at all.

    -b

    --
    If I wanted a sig I would have filled in that stupid box.
  17. RAD not necessarily higher TCO by TheSpoom · · Score: 5, Informative

    For years I've been working with pure, vanilla PHP outside of any sort of buzzword framework. That's not to say that my code was unorganized (quite the opposite, I'm pretty anal when it comes to code clarity), just that I believed as the original poster did that MVC frameworks and the like weren't worth the time.

    I've recently started experimenting with CakePHP, and it has somewhat changed my thinking on the matter.

    A lot of things we tend to do, especially in web development, get repeated over and over. Data validation, SELECT statements and their JOINs, administration backends, login systems... I could go on. In my experience, it's been when I've been bored to death of doing something repetitively that errors would start to creep into my code. It's pure probability: the more you do something, the better chance you have of one of those things having something wrong with it.

    RAD solutions posit a solution to this, centralizing all those repetitive things so you avoid having to type the same thing over and over, and thereby reducing the chance that there is an error in any one of those repeated things. If there's an error in the actual framework, one can fix it, ideally, in one location rather than throughout a script (though the frameworks themselves tend to be closely scrutinized to avoid any obvious issues).

    I guess what I'm trying to say is that coding less can mean coding better, as long as you understand why you're coding less, and not doing it simply because you can.

    --
    It's better to vote for what you want and not get it than to vote for what you don't want and get it.
    - E. Debs
    1. Re:RAD not necessarily higher TCO by Brandybuck · · Score: 1

      You're not describing RADs, you're describing frameworks.

      --
      Don't blame me, I didn't vote for either of them!
    2. Re:RAD not necessarily higher TCO by TheSpoom · · Score: 1

      RAD = rapid application development. It's the idea upon which most of these frameworks are based.

      --
      It's better to vote for what you want and not get it than to vote for what you don't want and get it.
      - E. Debs
    3. Re:RAD not necessarily higher TCO by Anonymous Coward · · Score: 0

      "A lot of things we tend to do, especially in web development, get repeated over and over. Data validation, SELECT statements and their JOINs, administration backends, login systems... I could go on. In my experience, it's been when I've been bored to death of doing something repetitively that errors would start to creep into my code"

      You are an idiot then. You don't need to do any of those things over and over. Write yourself a database abstraction layer and use that for all your projects. Write yourself a template engine, use that for all your projects. Etc, etc, etc. Does your code not have any functions and you just keep duplicating the same code over and over like a dumbass or what?

    4. Re:RAD not necessarily higher TCO by Brandybuck · · Score: 1

      Frameworks do let you create faster, but they are not considered RADs, unless also bundled with drag-n-drop snap-together interfaces. For example, Qt is a framework, while Kylix is a RAD.

      --
      Don't blame me, I didn't vote for either of them!
  18. There is alway time to do it twice, by arthurpaliden · · Score: 1

    but never time to do it right. How to spot the expert. He/she is the one that says that at a minimum it will cost twice as much and take at twice as long. If it can be done at all.

    1. Re:There is alway time to do it twice, by kfg · · Score: 1

      When I build a boat I build it at least several times before I build it, so that I do it right.

      First there's the doodling on a napkin phase. Then it's to the drafting phase. Then I build a posterboard model. Then I throw it all away and start over, because now I really know what I'm up against, only this time I finish up, if at all possible, with a full size plan.

      Then after a long time of "nothing happening" a boat suddenly appears as if by magic (since at this point I can fab all the parts before beginning assembly, knowing with reasonable assurance that they're all going to actually fit together as intended).

      I write software the same way, but then I've always had the luxury of being in complete control of my projects. Your boss's milage may vary. If he insists you put your "zeroth draft" (posterboard model) into production make sure he signs off on it.

      KFG

  19. I agree by The+OPTiCIAN · · Score: 4, Insightful

    > What do you think?

    Spot on. It's funny to watch people do demonstrations of how quickly Ruby on Rails can be used to build something because it's exactly the same sort of thing that was used to promote WebObjects ten years ago and I know from experience what rubbish it is. For all but the most simplistic applications you have to abandon the mapping of form elements to the database because you need to do validation. If you start off with a RAD approach to problems to these pages and add validation as an afterthought they quickly degenerate into a horrible mess. There will be less of a problem in this respect with ruby on rails because the data layer is so primitive so there are some knots you can't even contemplate being tied into, but - um - what was the point of Ruby on Rails again? :)

    I imagine that doing major schema refactors on Ruby on Rails apps would be a nightmare because there's no easy way to check that you've fixed all the breakages. Whereas if you use EOF or Cayenne and get a culture in your software where developers avoid using key-paths except in agreed spots it's quite easy - you make the change, fix the areas where you find compile problems and then its done.

    Something I would be interested to see would be some sort of business logic layer that could emulate a JDBC adaptor. Then you could write your application against that and bind to it as though it were a schema, but in the background it would in fact have business logic behind it. This would allow a separation between business logic and presentation but still allow you to quickly bind applications up as you do in the RAD webapp tools.

    --


    Believe with me, my saplings.
    1. Re:I agree by Anonymous Coward · · Score: 0

      Ruby on Rails comes with its own schema generator and can also take schema dumps. The rake migration tools also allow for quick changes and refactors to the schema.
      Ruby on Rails also has extensive testing libraries which are designed to find all those breakages. In fact, true ROR developers spend a lot of time creating tests. More than your average developer to be sure.

      The point is that Ruby on Rails isn't about fast hacks, its about Agile Web Development, which is scaleable and is designed to handle projects with quicker iteration cycles. In fact, ROR addresses all the issues that the article talks about.Having the Agile philosophy at its core should alone tell you that Ruby On Rails is more than just your ordinary framework.

      But reading your post obviously points out that you don't know much about Rails. So please don't say things that you really don't know.

    2. Re:I agree by Duhavid · · Score: 3, Insightful
      It's funny to watch people do demonstrations of how quickly Ruby on Rails can be used to build something


      And it is also funny to have to take that demonstration code and turn
      it into a production ready system. Time is never sufficient, because
      management can only see the (poorly) implemented features, and not
      the lack of error handling and return value checking, and robustness.
      --
      emt 377 emt 4
    3. Re:I agree by Anonymous Coward · · Score: 0

      "Something I would be interested to see would be some sort of business logic layer that could emulate a JDBC adaptor. Then you could write your application against that and bind to it as though it were a schema, but in the background it would in fact have business logic behind it. This would allow a separation between business logic and presentation but still allow you to quickly bind applications up as you do in the RAD webapp tools."

      That's called SAP. Not quite jdbc (yet) but the concept is about what you have in mind.

    4. Re:I agree by ivan256 · · Score: 1

      I think you're missing the point.

      Most of the sites being developed with these tools and deveopment practices have a short lifespan, and the ones that don't have zero code re-use between versions because they have to be on the bleeding edge to be relevant, and their old site is, well, yesterday.

      If you're developing long term application solutions, you shouldn't be focusing on speed of development alone. That's not to say you can't use RAD tools like Ruby on Rails, though... There's nothing in these frameworks preventing you from using good design principles.

      Something I would be interested to see would be some sort of business logic layer that could emulate a JDBC adaptor. Then you could write your application against that and bind to it as though it were a schema, but in the background it would in fact have business logic behind it. This would allow a separation between business logic and presentation but still allow you to quickly bind applications up as you do in the RAD webapp tools.

      That wheel has been invented several dozen times this month. You're better off not generalizing somthing like that. The added complexity from a reusable API isn't justified due to the simplicity of building an implementation specific API. Besides, the types of java applications that would use it already have so much indirection that you'd need servers that haven't been invented yet to support more than a few dozen users with any level of complexity.

      Also: You couldn't possibly count the number of applications that are dead because the developers spent too long getting it right the first time. I'd rather have a high TCO and be in business than have zero ROI because I couldn't get out of the gate.

    5. Re:I agree by PintoPiman · · Score: 3, Interesting

      I'll agree with you that running off and adopting $FRAMEWORK as the Next Big Thing without first understanding the pros/cons/tradeoffs involved is haughty. HOWEVER...

      It would appear that you have taken your elementary and incomplete understanding of RoR and created an assumption that RoR is elementary and incomplete.

      Not only is does RoR support validation and testing, it practically forces them down your throat. After years of C++, Perl, Java and the like, I've never seen a framework that elevated unit testing to such a prominent level. One of the more famous of the 'demos' that you refer to is the creation of a weblog in 15 minutes. Within those 15 minutes, the author demonstrates the basic unit testing, validation and error handling code that RoR *does for you*. Scaffold, rake and 'validates_*' won't take you everywhere you need to go in order to be robust, but they sure do give you a hefty shove in the right direction.

      Still, unit testing and input validation aren't even among the top benefits of RoR specifically, or the RAD scheme in general. The framework and the community that supports it actively guide developers in the direction of numerous other good habits. MVC and DRY are acronyms that every dev has heard and most have ignored, to the peril of their apps' maintainability. RoR encourages these techniques and demonstrates their effectiveness.

      To be over-blunt about it, the point of RAD is that no matter how long you plan, you still might as well be going off half-cocked. Requirements tend to be ill-defined and rapidly evolving for most projects. RAD operates from the assumption that reducing the time between requirements collection and release gives you a better aproximation of the real-life requirements *at the time of release*. If you spend twice the time finalizing the spec and twice the time implementing it, you're just giving the requirements a head start - they will outrun you. What unit tests, MVC and DRY all have in common is that they combine to make refactoring as easy as possible, simplifying the development cycle and allowing for releases early and often.

      No framework or project management scheme is a substitute for good coders and forethought, but if I had to choose a methodology for today's small-medium sized project, RAD/Agile would be it. You can have your waterfall, your SAP, your XML configuration files and your weeks of Requirements Analysis meetings with PHBs who don't have the perspective to know what they want until you've shown them what can be done.

    6. Re:I agree by TwinkieStix · · Score: 1

      As for the JDBC emulator... Have you looked at ORM tools like Hibernate? You can design tables and have hibernate automatically build objects that impliment the table design. Then, your custom objects would interact with the auto-generated objects. It's not perfect, but really abstracts the database from your application.

      The best part is that you can create a complete application without writing a single SQL query by simply using a RAD tool (mysql-query-browser for example) for the databsae design, and something like hibernatesync for Eclipse to auto-generate the XML mapping files and the objects.
      http://www.onjava.com/lpt/a/5537

    7. Re:I agree by joost · · Score: 1

      For all but the most simplistic applications you have to abandon the mapping of form elements to the database because you need to do validation.

      What medicine are you on, if I may respectfully ask? Validation is built in Rails. It's built into the Model layer of the mvc pattern. You do know your design patterns, do you? And you do know that mvc has worked fantastically for software development, in like 20 years?

    8. Re:I agree by tomtermite · · Score: 1

      Ha! WebObjects does do rapid application development. I can't speak for RoR, but I have personally built fully functional applications for government clients WHILE THEY WATCHED, in 15-20 mintutes! COnnecting to legacy Oracle databases with hundreds of thousands of records! I remember the NeXT video you are talking about, comparing Sun development to on a NeXT cube. After a few hours the NeXT developer was playing the Pool game while the Sun guy was sweating interface widgets.

      --
      - Ubique, Tom Termini www.bluedog.net - WebObjects / J2EE SOA / iPhone solutions for knowledge workers
    9. Re:I agree by The+OPTiCIAN · · Score: 1

      I have, and have used cayenne in a couple of substantial apps. But that's not quite what I want. Or at least - I want that, but then I want another facade in between it. So I end up with

      database business-logic-engine view framework

      In the scenario I describe, the engine would look to the view framework like a database but once you 'committed' that would trigger a cycle in the engine. If the commit failed, it would throw a jdbc exception.

      It's a new take on RPC. It might be horrible - I haven't completely got my head around the idea. But it could be nice because it would mean you could use existing tools with jdbc support to access your engine (through simple binding, that sort of thing).

      --


      Believe with me, my saplings.
  20. Focus on the fun part by Tiger4 · · Score: 1

    I think developing a new project is the fun part. So people focus on how to maximize the enjoyment of doing the activity they like, rather than minimizing the drudgery of the activity they don't. We'd all be better off if more maintenance lessons learned made their way into the software design phase. But people are creatures of habit. They figure if they just push their pet method harder on the next project, it won't be a disaster like it was on the last project. Learning from reality never enters into it.

    --
    Behold, this dreamer cometh. Come now, and let us slay him... and we shall see what will become of his dreams.
    1. Re:Focus on the fun part by Anonymous Coward · · Score: 0
      I think developing a new project is the fun part.


      Of course it is. If the only thing developers ever did was create new things then we probably wouldn't be paid as much.

      Most of my career has been doing MOPS (Maintaining Other People's Shit) work. My feeling is: The less time in creating an app/system/whatever the greater the cost to maintain it. This is because if it only takes x weeks to build because of the latest and greatest whatever, then they only thought about the problem for x weeks. Now if development took 2 or 3 times longer it would give the worker bees longer to think about the problem and maybe they will realize their first solution is a shitty one.

      But I am not bitter, oh no.
    2. Re:Focus on the fun part by Ohreally_factor · · Score: 1

      What's that old saying? The last 10% takes 90% of the effort?

      --
      It's not offtopic, dumbass. It's orthogonal.
    3. Re:Focus on the fun part by Peter+La+Casse · · Score: 1
      What's that old saying? The last 10% takes 90% of the effort?

      It goes like this: "The first 90% takes 90% of the effort, and the last 10% takes 90% of the effort."

    4. Re:Focus on the fun part by Ohreally_factor · · Score: 1

      Is that why Coach asks us to give a 180% effort when he makes those inspirational speeches? =)

      --
      It's not offtopic, dumbass. It's orthogonal.
  21. It's not maintenance nor creation that are it: QA by Anonymous Coward · · Score: 0

    Quality Assurance is simply the missing ingredients in most projects.

    discuss...

  22. Maybe the beginning gets too little attention ... by richg74 · · Score: 3, Insightful
    I think I might argue that the beginning of the development processs -- or, at least, what should be the beginning, namely the design, often gets too little attention. My experience leads me to believe that most gnarly maintenance problems stem from poor design more than from low-level coding blunders. Think of the well-publicized security issues that have bedeviled Microsoft. I don't think they occur because Microsoft has bad programmers, but I do think that the "tightly coupled" design of Windows is a mistake, and makes problems much more difficult to resolve.

    One reason these tools get a lot of attention is that using them produces a measurable effect. It's the "bookkeeping fallacy": things that are easy to measure must be more important than things that are hard or impossible to measure.

    I do think these rapid development tools can add a lot if they are used intelligently, which I think means using them to present concrete ideas and prototypes quickly, in order to gain understanding of the problem domain and to get user feedback. But I still think Fred Brooks's advice in The Mythical Man-Month is correct: plan to build the first version to throw away. You will in any case, and it's better not to deliver the rubbish to the customer.

    The curse of IT has always been, "There's never time to do it right, but there's always time to do it over."

  23. What do I think? by overshoot · · Score: 2
    I think you're going to have a bitch of a time selling that idea to management. They live and die by quarterly goals, and their goal is to get this turkey out the door this quarter. Maintenance is someone else's problem, assuming we make it that far.

    Of course it's stupid and short-sighted. We sacked all of the people who wasted time on anything but the immediate requirements.

    --
    Lacking <sarcasm> tags, /. substitutes moderation as "Troll."
  24. short attention span by GalacticCentral · · Score: 1

    There are a huge range of software products out there, one paradigm can't cover all needs. Of course, the biggest mistakes come from applying the wrong process to the wrong market need.

    Anything that is intended to last more than 2 years will have substantial maintenance costs, but most managers move on after 2 years or less. No incentive to build it right, ever.

    Most developers want to work on something new, leading edge, and they move on as soon as things go into maintenance mode.

    It is far easier to react to customer complaints than to plan anything. The excuse is always that we have to keep the customer happy.

    A sad lifecycle.

  25. Market Forces by WindBourne · · Score: 1

    If this was about an application that was going to stick around for quite some time or will be used by millions, then it makes sense to take time and get it done right (witness vista and current office; possibly the first time in MS history where it MIGHT get it right). But in a small company, or a small product, it makes sense to go with Ruby, PHP, perl , etc. Roughly anything that will allow for a fast development, secure, and ok to decent run time. After all, the vast majority of start-ups/ products fail.

    --
    I prefer the "u" in honour as it seems to be missing these days.
  26. On the contrary ... by jc42 · · Score: 2, Insightful

    Most people who develop software also have to maintain it, ...

    What???? This may be true with open-source software, but I've yet to see a company that did things this way. The norm is that developers, testers, maintainers and users are four separate groups that are kept as far apart as management can manage.

    This does go a long way toward explaining why there's so much crappy software Out There.

    --
    Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    1. Re:On the contrary ... by castoridae · · Score: 1

      Agreed. In my 8 years as a software engineer, I don't think I've ever been responsible for any amount of serious maintenance. I build projects; someone else takes care of them. But I make the decisions on frameworks, tools, etc to use - "management" wouldn't have enough of a background to make an informed decision (and usually they know it). But I plan on making MY life easier and on meeting MY goals and responsibilities. I'm not measured on TCO, I'm measured on producing a product quickly that meets a feature spec.

    2. Re:On the contrary ... by Anonymous Coward · · Score: 0
      Most people who develop software also have to maintain it, ... What???? This may be true with open-source software, but I've yet to see a company that did things this way. The norm is that developers, testers, maintainers and users are four separate groups that are kept as far apart as management can manage.
      This does go a long way toward explaining why there's so much crappy software Out There.
      A lot has to do with screwy management as you state, but this practice is now reinforced by Sarbanes-Oxley requirements (maybe not SOX itself, but certainly the interpretation of it that most auditors live by). The driving pricipal here is "separation of duties". I had a problem this morning that I worked on all day (and still failed to resolve). We had what looked like an intermittant connection glitch with a database. I was able to look at the production logs, but as a developer, I'm not allowed to look at the production directories containing the shell/config scripts. Had to wait around for someone authorized to ftp a copy and e-mail it to me. Then we had to get the DBA involved. Then he wanted to look at certain profile settings. Like me though, he did not have access to the directories and had to wait around. Throw in lunch, lag introduced by e-mail delays (because e-mail covers our ass even though it's slower than a phone call), initial delays while the logs were investigated, periodic meetings to report the (lack of) progress to interested (and increasingly testy) managers, and the whole day was shot to hell over what looked to be a transient problem. Of course, we could not simply re-do the failed run, because without the blessing of the DBA, the ops center would not re-execute.... And so it goes...
    3. Re:On the contrary ... by Anonymous Coward · · Score: 0

      unfortunaly this is true, in the good old days you could contract a programmer inside the companie and tell him what type of crab he made. these days they can not even tell you WHO made the crap, because he left the companie or lives somewhere in india.
      You will sue the companie for the crap ? forget it, either the job is to small to justify the expenses (and it will take years iff you find a judge that understands the subject) or the companie will simply go out of business soon as the project is over. this happend more than once.

      We moved to opensource since we can not support all the programms only the special ones nobody else uses/needs. with OSS most times you have a programmer that knows and likes the programm he maintains.
      Even when you get the source from the companie you hired that is often unbelieveable crap, machine generated at best and no way to debug (even seen an project with 4000 clases ?)
      A project is not over when the resulting programm is delivered, *then* you *start* to discover what went wrong,
      workflow, coding errors .....

      fast development cycles are only nice for the beancounters and result in crap that need other crap to fix it.
      BC are a real problem because they are not forced to work with the SW and/or do not understand that there is a much more sane way to do certain things. but soon you have established a way to support open source maintainers with
      yout local BC you will notice a big jump in quality since you can (easly) persuade the maintainer to add features and bugfixes (warnig: do it sensible :)

    4. Re:On the contrary ... by stonecypher · · Score: 1

      The norm is that developers, testers, maintainers and users are four separate groups that are kept as far apart as management can manage.

      That's funny. I've worked for fourteen software houses. Only two of them behaved this way, and they're both out of business now.

      What is it which makes you believe this is the norm?

      --
      StoneCypher is Full of BS
  27. More important part: the stupid f*&cking busin by bADlOGIN · · Score: 2, Insightful

    Everyone seems to forget that given enough time and resources, *anything is possible in software. Eveyone forgets how _PATHETICLY RETARDED_ business decisions get made (apologies to the mentally challenged who do manage to tie thier shoes). Snide remarks aside, I'm dead serous here. It takes just as much resources, time, and effort to execut a good business idea as it does to do something so fucking stupid it's amazing it was considered in the first palce.

    Bitch all you want about rapid paths like Ruby On Rails not addressing the long term method, but don't forget the ADD nature of the 6 figure mouth-breathers in the board room. By the time it get's done in a 1/2 assed fashion, you can confirm or deny weather it was worth doing in the first place. Worst case scenario, you have something making money that is hard to deal with. In that case _THROW IT OUT!!!!_ and take into account what you now know for sure about the market/customers/some-sucker-who-will-pay and build the _NEW_ thing that will best make money from them. Too hard you say? Won't work you say? Get some test coverage and push ahead. If you don't, just go home now, because your competition will. Adapt or die. In a global market place, you can't affort to buy "what if" engineering dollars.

    Arguments like "We need something that will respond to something we don't know yet" is a variation on big design up front and other various sorts of "slow" waterfall mentality to building software. Yes, I'll admit to being one of those annoying agile assholes, but for 80% of the "business decisions" that get made in the corporate IT (and even startup) world, it holds true: the guys in suits don't know what they are doing. There are numerous reasons why Fredrick P. Brooks said in The Mythical Man Month (now over a quarter century old!) "build one to throw away. You will anyways" was because the nature of business hasn't changed. Anyone selling you some path to something you don't need today needs to be avoided like the plague.

    I'll agreee with the /. masses: Microsoft are a buch of stupid dicks. However, they do one thing (perhaps only one thing) right: they get version 1 out infront of people to figure out what they need to do. Where they go wrong is assuming that 1.2 can be built off the 0.9 beta code base, but that's marketings fault. Given a company with a strong enough technical staff, these things can be corrected. If no strong technical staff exists, then they are doomed anyways and don't know it yet...

    To summarize: this argumet is a load of crap presented by people who want to cling to "proven-to-fail" approaches to building sofware. It's not a bridge, it's not a car, it's ones and zeroes that may or may not see the light of day. The same optimization axion aobut "never prematurely optimize" applies even better to "never assume you have it right". As soon as people drop they fronts of how much they think they know about building products, the better off we all will be. Try, learn, and adapt. Again, if you don't your competition will...

    Footnote: * within reason. You're not going to create a miracle, but you know what I mean here...

    --
    *** Sigs are a stupid waste of bandwidth.
  28. Not justified -- focus on QA instead. by Anonymous Coward · · Score: 0

    Too often, software is released and it's shitty. We need more of a focus on quality assurance.

    Test Cases, TPS Reports
    Test Programs, Test Harnesses
    Automated Testing in General
    Release Cycles and Branches
    Bug Databases and Bug Tracking

    We need to take the defects per line from 1 in a hundred to 1 in a hundred thousand.

    1. Re:Not justified -- focus on QA instead. by Anonymous Coward · · Score: 1, Funny

      We need to take the defects per line from 1 in a hundred to 1 in a hundred thousand.

      No way! Imagine the cumbersome process of having to browse through a hundred thousand lines before you spot the bug! No thanks, I like it this way.

  29. Software Support by jjohnson · · Score: 1

    I work in support for a tech company that sells large software packages to Fortune 500 companies. The director of Support made a presentation on software maintainability to the Engineering department in which he displayed a spreadsheet showing that the fact that our binaries can't report their hotfix level (our customers always end up running hotfixed binaries) adds an average of 5 minutes to every support case while we determine the hotfix level, with a cost to end users at around $100,000 a year in lost productivity for production down issues. That was one of several areas he identified where the lack of engineering the software for the purpose of supportability had a calculable cost to customers.

    Beyond code maintainability for future engineers, think about the job of the support engineer who's the human face on your software over the years. Think about how the company and the software looks while the support engineer asks for things like the binary size to determine the hotfix level, or says "if we logged that, we would know; let me send you an instrumented build." Especially for software maintained by IT departments, the longer impression of your software is determined by how effective your support engineers are, and how effective they appear to be to the customer.

    --
    Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    1. Re:Software Support by Anonymous Coward · · Score: 0

      So your manager said the problem was the HOTFIX isn't reporting its version? Hmmm, my spider-sense is tingling...I think you might need a new manager.

    2. Re:Software Support by jjohnson · · Score: 1

      When the software starts, it logs its patch level and configuration, but not its hotfix level. Since we're very responsive to bug reports from our customers, our software is invariability hotfixed in the customer's environment. The hotfix level can make a significant difference in functionality so knowing it is crucial to troubleshooting issues. All we want is for the hotfix level to be logged with the patch number, and the director's presentation succeeded in getting that functionality included in the next version.

      --
      Anyone who loves or hates any language, platform, or manufacturer, doesn't know what they're talking about.
    3. Re:Software Support by gbjbaanb · · Score: 1

      I don't think it was his presentation. Its was the shouting at his senior department manager who then shouted at his development manager who shouted at his design analysts, and the development team leaders, who they told the staff to 'take ten minutes to put the feature in the next build'. :-)

  30. Re:More important part: the stupid f*&cking bu by GalacticCentral · · Score: 1

    So - agile sw happens because smart programmers know that management has no clue about requirements, so why waste time on requirements, just write some code?

  31. Re:It's a disposable culture.QWZX by Anonymous Coward · · Score: 0

    STOP . AMERICA . NOW

    Just out of curiousity, what are we supposed to stop America from doing? Freeing Iraq? Should we force America to give Iraq back to Saddam Hussein?

    But then, I'm one of those weird Europeans who thinks that it's actually good that we might get a free democracy in the middle east. I seem to be in the minority, which is rather bizarre, I must say. Sometimes I think my countrymen are too busy feeling powerless in the world to notice that some good things are happening.

  32. Microsoft & Outsourcing by Anonymous Coward · · Score: 0

    "I think Microsoft would be the ideal company to write this book. I hear they've found a way to reduce their 6-year development cycle after the release of Vista!!"

    or

    "You want us to maintain your outsourced code too??? Oh, that's going to cost you a lot more. Of course you can always do it yourself but we didn't write any of the comments in English."

  33. It's not the language or the tools by bobetov · · Score: 1

    It's not the language or the tools that lead to maintainable code. It is entirely the quality of the people who architect and implement it in the first place. An experienced, well educated developer will always write with the future in mind, with commenting and clear abstractions. In converse, no language can prevent sloppy coding - and sloppy coding is the only cause of unmaintainable applications. Full stop.

    What language and toolset benchmarks do is show how easy it is to express ideas, which is a pretty useful benchmark (as in approximation) for how well a good developer can use that language.

    --
    Looking for a Rails developer in Chapel Hill?
    1. Re:It's not the language or the tools by rfc1394 · · Score: 1

      Hear, hear!

      I have seen bad programs written in almost every language. And good programs written in some of the badly-slammed languages. It's the skill of the programmer that determines how good the application is. Badly designed (programming) languages can make it harder to do good work, but really good people can still do at least decent work in limited capability systems. And going further than that, well-designed problem definition systems can give even low-skilled people the chance to do considerably better. (Look what spreadsheets have done for ordinary people.)

      This is the point that needs to be made: really good tools can give people better capability to do more, but they give the really good people the ability to shine! But, as someone said, "A decent surgeon, given good tools, can do reasonably well, but a great surgeon can do good work even if all he has is the sharpened lid of a tin can."

      --
      The lessons of history teach us - if they teach us anything - that nobody learns the lessons that history teaches us.
  34. I'd rather maintain Ruby than J2EE by danharan · · Score: 1, Interesting

    Considering I have fewer lines of code than I had configuration files, I'd say this is way more maintainable. And fewer LOC's usually means fewer bugs, therefore less maintenance.

    Oh, and Rails is about much more than rapid CRUD. Although scaffolding (the automatic generation of CRUD pages for a table) is damned handy in some cases, it's expected you'll replace most of it for any non-trivial application.

    But as for TCO, and startup costs. If you're starting a company based on software, would you rather

    A: Spend 1-200 hours building something to see if there's a market knowing you'll have to rewrite the whole thing
    B: Spend 500 hours doing it "right" and then realizing you either have no demand, or people didn't want the features you put in

    Ok, that's not much of a choice is it? All that pre-planning stuff is premature optimization. If you can build it fast AND CLEAN, you'll be able to fix it. Most importantly, you'll still be in the game.

    --
    Information: "I want to be anthropomorphized"
    1. Re:I'd rather maintain Ruby than J2EE by cyranoVR · · Score: 1, Informative

      Please keep in mind that J2EE is a lot more than CRUD applications, making Ruby's capabilities a sub-set of what J2EE can accomplish.

      The next version of Java will integrate scripting langages (JSR-223), so it's entirely possible that we will see Ruby on Rails applications implemented as the user front-ends to larger J2EE applications (this is already happening with PHP).

      And of course, there's nothing wrong with rapid-prototyping. Ruby is becoming to web applications what Microsoft Access is to Windows desktop database applications (e.g. RoR:JSP Access:PowerBuilder).

    2. Re:I'd rather maintain Ruby than J2EE by danharan · · Score: 1

      Again, please keep in mind that rails is a lot more than CRUD generation. That's only a tiny part of it! I'm well aware of efforts to get Ruby running on the JVM, and the capacities of the J2EE stack. But you can go on ignoring what Rails really is about, that's just fewer of us working with productive tools ;)

      --
      Information: "I want to be anthropomorphized"
    3. Re:I'd rather maintain Ruby than J2EE by cyranoVR · · Score: 1

      But you can go on ignoring what Rails really is about, that's just fewer of us working with productive tools

      LOL, I haven't been "ignoring Rails" in the least. I've have watched video, did the online Ruby tutorial (the interactive browser-based one), and read a bunch of intro articles and forum threads (I haven't had time to download/play with the actual Rails distribution). So far, just about *every* example of RoR I've seen is a CRUD application. I haven't seen any High-Performance (1000+ transactions per second), Low Latency ( < 10 millis), distributed messaging engines implemented with Rails (we've accomplished this in Java using J2EE) If there is, please let me know, I'd be interested to see it!

      And - to top it off - I have a new co-worker who is a Rails developer. He is raving about its features all the time! So lately I couldn't "ignore" Rails if I wanted to. Of course, his raving about RoR quickly morphs into ranting about Java, typically when he encounters something that our Enterprise Messaging Engine (written in Java) does that he simply could not accomplish using Ruby on Rails. Anyway, hopefully soon he's come to realize that there's more to tool selection that LOC and "awesomeness" factor ;^)

    4. Re:I'd rather maintain Ruby than J2EE by danharan · · Score: 1

      The creator of Rails has expressed regret for that video, because it gives people the impression that CRUD generation is the most important feature of RoR. 99% of the J2EE work I've seen doesn't require high-performance, low latency distributed messaging engines. That's the edge case that Rails doesn't and can't handle right now. If JRuby ever progresses, it will get that. (I wonder if we could bolt a messenger framework to a Rails app, open sockets maybe?) Speaking of edge cases, Hibernate still kicks ActiveRecord's ass. For those of us who live in that 99% of projects that don't require those edge cases (or can drop down to SQL when AR doesn't hold up), there's a lot of productivity and elegance to the Rails community's projects. Have you seen Migrations? Things like that are a delight to code with. In the same vein, check out the config for URL mapping if you've ever been frustrated by web.xml. Tag libs and filters, features I appreciated when going from PHP to Java in 2001 are more straightforward in Rails. In the Java world I was already convinced that Hibernate/Spring was the way to go, and wanted to avoid EJB's as much as I could. I've worked with them, and they're f&*()g messy, barely testable, slow abominations. In Rails, I've got all the features I wanted to deal with in J2EE... so far, no regrets. But speaking of edge cases and awesomeness... have you played at all with Ruby (not Rails)? There's been a few times I've done thing in Ruby I simply couldn't have in Java, thinking "Fuck, I always wondered why it was so complicated".

      --
      Information: "I want to be anthropomorphized"
  35. Time to market by Anonymous Coward · · Score: 0

    practices seems to concentrate on getting software developed as quickly as possible

    That's because the time it takes to get your software to the market is often just as important as the TCO.

  36. Re:It's a disposable culture.QWZX by Andrew+Tanenbaum · · Score: 0, Offtopic

    We already have a free democracy in the middle east. It's called "Israel". Or do you think that it doesn't count because it's run by Jews? Take your anti-semitism elsewhere, please.

  37. Rapid Development leads to Maintainability by Anonymous Coward · · Score: 0

    I'm something of an old-school Lisp hacker.. these days I use languages like Ruby and Perl. This "agile" stuff warms the cockles of my paren-matching heart.

    What Ruby on Rails does for you is create a domain-specific language. It takes all that stuff that you repeat over and over and factors it out. Which means less code, clearer code, and so forth. Yes, this makes it easy to throw apps together, but it also makes it easier to maintain them, test them, change them, and improve them!

    All the well-written programs I've seen have this quality.. they look like pseudocode taken from the problem domain, so it's easy to rearrange the code and add new functionality. This makes it really easy to maintain. All the nouns and verbs are laid out, all the important degrees of freedom are there.

    So, if you want to focus on rapid development, go ahead.. but keep in mind that the exact same qualities that make it easy to got from 0-60 also make it easy to go from 60-100, 100-200, etc.

  38. RoR and maturity by otisg · · Score: 1

    You may be right about the TOC and maintenance. RoR really does make creation of CRUD apps simple and fast. However, it's hard to tell what the TOC and maintenance of RoR is like yet, as RoR only recently started getting heavy use outside the country of its origin, Japan. It's too early, I think. In other words, we have to wait for a few years to pass, let some people build non-toy RoR apps, and then look back and try to judge what maintenance was like.
    A pile of new Web 2.0 companies are using RoR to get their products out quickly. We'll see how many of them survive long enough to tell a maintenance and TOC story. :)

    --
    Simpy
    1. Re:RoR and maturity by Anonymous Coward · · Score: 0

      as RoR only recently started getting heavy use outside the country of its origin, Japan.

      Eh sonny?!!!!!!! Ruby on Rails is a framework which is definitely not from Japan (Denmark? Chicago? Somewhere in there :-), Ruby is the language, and Ruby has been used outside of Japan for several years now, which is plenty of time in the programming language world. I mean, it's a general purpose programming language inspired by many existing languages, what more does it need to do to prove itself? It's not like it's going to explode in 2 years or something!

      let some people build non-toy RoR apps, and then look back and try to judge what maintenance was like.

      #1: there are plenty of non-toy apps out there. By non-toy, I mean they are actively being maintained, and they have thousands or tens of thousands of users.

      #2: those apps are being maintained NOW. Maintainance starts as soon as the code is deployed. And yes, maintenance of Rails apps (or any well-factored framework) is quite wonderful and easy. If you have a good team, RoR is definitely a force-multiplier.

  39. I think you got it backwards by humblecoder · · Score: 4, Insightful

    I think the problem isn't that there is too MUCH focus on the beginning of the software lifecycle. The problem is that there is too LITTLE focus on the beginning of the software lifecycle.

    The beginning of the software lifecycle is supposed to consist of analysis and design - both of which can lead to the construction of a superior product if done right. The issue is that many of these "quick start" languages and frameworks make is easy for a programmer to dive right into the coding phase without considering the overall design of the system. Thus, they skip the beginning steps in the software lifecycle.

    1. Re:I think you got it backwards by harborpirate · · Score: 1

      I have to disagree with this line of thinking, at least at the enterprise level. (In the small software sector, underdesign and overcode may be more often the case.)

      Much of the current focus is on attempting to address every conceivable situation and use case scenario up front, then design and execute on a plan to address each and every one. This approach is destined to fail on any sufficiently large product. I believe this is the reason why Extreme Programming made such a splash in the design space when it debuted, as it finally, and I believe correctly, rejected this notion. Unfortunately XP contained numerous other "rules" other than an iterative focus of development, and has as such not gained the mindshare I believe it might have if it had been better conceived.

      The fact that XP rejected many other fundamental programming concepts made it unworkable and/or unpalatable for many software designers. Pair programming, far too frequent meetings, and required cross training are completely unworkable in most environments. Most managers will not understand the usefulness of pair programming, even many who are in a corporation devoted solely to software development. I dislike the frequent meeting requirement, as once per day is a significant waste of time. Developers will very often be spending more than one day on a feature and/or mundane code, and this level of review and oversight makes little sense. Required cross training sounds nice on the surface, until one realizes that an expert in a specific area, say regular expressions, or artificial intellegence, or graphics, or whatever it might be; that the expert will spend far more time training a programmer unfamiliar with the specific piece of code than they will actually writing the software. You might say that this is time well spent, but I disagree, as these impromptu sessions delve deeply into specific code and will not cover the core concepts as a whole, nor should they. The result is that the "trainee" most often will not understand the code anyway, and the training session will have served only to waste time and frustrate both the trainer and trainee. Generally, software development is under a deadline and cannot afford to function as a time for in depth training on code specifics.

      All this is more of a tangent to my main point, which is that a fundamentally solid design is proper and necessary. However, the continued focus on more and more time spent on rehashing every feature endlessly without putting the product in the hands of its users is wasteful. It is impossible for the end user to fully comprehend how the product will function without using it, and features which they believe to be an absolute requirement for the product are often found to be unwieldly, counterproductive, or entirely useless when the product is completed and delivered. In an iterative environment, various iterations will weed these features out, and result in a better overall product. In addition, developers and testers can NEVER account for every possible scenario end users will create to break the product. Good testing is necessary and important, but I believe it is just as important that the product not be over-tested. Many tested scenarios will never occur in the life use of the product, but nearly infinite untested scenarios will always occur. What if the user opens an email program, while a virus scan is running, and they click a button in the lower left quadrant of the product, which runs code that attempts to use the file system? Sure, this shouldn't break the product, but crazy scenarios often have unexpected consequences which your program may not be equipped to handle. It is far better to deliver the product to the users and let them create the problems for you, elegantly handling exceptions with your program and reporting them to a centralized location, where you can address the most problematic and frequent errors in turn in the next iteration.

      In short, continually placing more and more focus at the design time can easily reach a stage where it is counterproductive, and the result is more time and money are spent on a product which ultimately does not deliver the best result for the user base.

      --
      // harborpirate
      // Slashbots off the starboard bow!
  40. A Poem (for Zonk) by Anonymous Coward · · Score: 0

    here is your potato salad.
    now go to hell
    I clicked on one of your articles
    and got a 4o4
     
    lame ass editor
    for you, nothing more
    except to tell yea
    to go fuck yerself up the arse
     
    max von sydow
    represents the Beat culture
    and you represent
    the beat culture
    beat with a pole of carbon fiber
    find a new job, hack!

  41. Re:It's not maintenance nor creation that are it: by Anonymous Coward · · Score: 0
    Quality Assurance is simply the missing ingredients in most projects.


    Where I work we have "Quality Assurance". They are great at making sure the copyright is correct on a document and they know how to use spellcheck.

    I love when "Quality Assurance" shows up at a code review. Yep the header has the copyright statement. My job is done.

    This isn't a knock at the idea of Quality Assurance, the idea is great, but I have yet to see it implemented in any way that is useful.
  42. Release often... by PinkPanther · · Score: 1
    Release often, abandon early...no need to waste time evaluating whether a tool is good for the long haul.

    Seriously, a good portion of the religious wars floating around (slashdot) are from people who slam out one-offs and the likes. Long term software development breaks down very quickly in many of the oft-touted IDEs.

    A great development environment must have:

    • first and foremost, a fantastic text editor
    • tight integration with version control
    • good refactoring
    Tools which focus on "code by click" simply fail because they only solve 80% of the initial release and much less of future releases.
    --
    It's a simple matter of complex programming.
  43. As a rails developer... by Trailer+Trash · · Score: 2, Informative

    My experience is that I get huge long-term benefits, not just the faster up-front development. The main reason I develop in rails is that I have much easier long-term maintenance, and making changes to applications has been easy. Way easier than the php code that I have out there.

    Put another way, I think your rails slam is unjustified.

    1. Re:As a rails developer... by MythMoth · · Score: 1

      "Long term" is three or four years. To the best of my knowledge RoR hasn't been around for long enough for anyone to gauge the long term benefits.

      --
      --- These are not words: wierd, genious, rediculous
    2. Re:As a rails developer... by ChronoFish · · Score: 1

      Long term? Please.... If your RoR app is still being used in 10 years, then you'll know that it was either very maintainable or very simple.

      -CF

    3. Re:As a rails developer... by stonecypher · · Score: 1

      Industry statistics suggest that hard-nosed engineering outperforms agile dramatically. Maybe Agile works better for you, but when fifteen thousand programmers have been measured and more than 95% end up doing better with real metrics, and when these engineers are some of the best on earth (the first military software house to hit CMM5, the Boeing 747 software team, etc,) it's a fair guess that you're the exception rather than the rule. Believe it or not, genuine formal engineering does exist for software, and the training isn't all that expensive.

      Is it possible you would do better with up-front planning once you were familiar with a formal method like PSP / TSP? It turns out that saying you're planning hard then writing a bunch of stuff down isn't actually as good as learning statistical methods and keeping years of data from which to make schedules using mathematical models derived from tens of millions of man-hours of detailed real-world data. When the 747 software team sees a 60% time to market drop, a 95% testing time drop and two known bugs in a million and a half lines of code on an 18 month project (as compared to 228 on the previous iteration, by the same people,) it's time to consider whether to learn what it is that's helping them so much. After all, they're actually pretty good at their jobs.

      Just a thought.

      --
      StoneCypher is Full of BS
  44. Follow the money by Anonymous Coward · · Score: 0

    I am a software developer. I get paid to develop software. Business people do not give annual raises to software developers in line with the rising cost of living. They feel that they pay too much and they exploit inflation to drive the price down.

    To maintain my income I must change jobs regularly. To demand a premium and obtain my increase in pay at the change of jobs I must keep up with evolving tech trends and remain buzzword compliant.

    Maintenance roles will prevent me from doing this. I've made this mistake and I'm not making it again. For economic reasons I will not accept a maintenance role. It's as boring as it is dangerous to my career.

  45. The Inmates Are Running The Asylum by beringreenbear · · Score: 1

    Yes, I'm stealing the title of Alan Cooper's book

    You have to basically be two-faced about any development. Be gung-ho to management types, show them what they want to see, but once they are gone, do the development right. It can seem like a pirate-type undertaking sometimes. You have to sneak out and interview users while they are on break. Take up smoking. You'll gather the best information that way. Gather real usage details. People like to talk about their work, so this isn't really all that hard, but it seems non-productive to management types.

    Okay, being a bit more serious, it's up to you as a programmer to decide how you want to approach any project. Never mind the micro-managing boss. He probably doesn't know what he's doing, either. Decide for yourself what effort needs to be done and if it makes you feel better laying down a decent foundation from the start, do it. If you've got crap to work with, refactor and repurpose.

    Toolsets, in and of themselves, don't solve problems. The fundamentals of designing, and more importantly, not over-designing, your project does. Read Cooper's book. Seek out books by Raskin, Thomas, and Hunt. They all say the same thing, if in different ways. Doing the work right the first time will make you money in the long run. Actively fight back against management that keeps wanting to change the requirements and doesn't know what they are doing. Be passionate about what you do. And if you get fired, it will be for a damn good reason. Don't play their game, play yours. Most importantly, enjoy what you do. If you don't like it, go do something else.

  46. Building a Bridge? by spectro · · Score: 1

    So you take 2 years writing specs, another two years developing and guess what, when the project is out it is based on obsolete technology and business rules.

    The biggest mistake management make is to use the building-a-bridge analogy to software project management, that is what they have been trying (and failing) to do in the last 30 years. It is proven to be a bad way to develop software. Agile Development was born from fustrated Project Managers looking for a better way to do this. Agile Processes have more than 10 years delivering better quality much faster.

    --
    HTML is obsolete. It's time for a new, simpler and richer markup language.
    1. Re:Building a Bridge? by Fulcrum+of+Evil · · Score: 1

      So you take 2 years writing specs, another two years developing and guess what, when the project is out it is based on obsolete technology and business rules.

      What are you smoking? The biz processes should be separate from code as a matter of course, while technology doesn't go obsolete in two years, or even four.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    2. Re:Building a Bridge? by cyranoVR · · Score: 1

      So you take 2 years writing specs, another two years developing and guess what, when the project is out it is based on obsolete technology and business rules.

      Maybe for your dinky little online todo list / social networking web site this is true, but for Enterprise Applications (i.e. ERP systems) that have an average lifespan of 20 years, 2 years of designs and requirements is worth it. Maybe more if you're replacing a 20 year-old legacy system that was written using COBOL and deployed on the Big Iron.

      At my previous employer, we were using such a system (a bookkeeping application written in RPG for AS/400) that had been thrown together in the late 80's with no design/requirements process - just lots of ad-hoc requests from PHBs. The result was shoddy application, lots of grief from end-users, consistently irritated customers, and (of course) a lucrative 20-year "bug-fixing" contract for the consultants who had written the application in the first place.

      Fun related reading: Sites that are really databases (scroll down to "Why don't customers wise up?")

      As for technologies being "obsolete" - your last energy bill was most likely generated from an application written in COBOL 20 years ago. Just something to think about.

    3. Re:Building a Bridge? by spectro · · Score: 1

      As for technologies being "obsolete" - your last energy bill was most likely generated from an application written in COBOL 20 years ago. Just something to think about.

      ...and half the people in accounting is handling excel sheets to get the job done.

      --
      HTML is obsolete. It's time for a new, simpler and richer markup language.
    4. Re:Building a Bridge? by Antique+Geekmeister · · Score: 1

      No sane modern "Enterprise Application" has a lifespan of 20 years. The hardware and underlying OS are far too likely to morph out from under you and become unsupportable within 5, unless you luck out and manage to select one of the few technologies that wound up with lots of spare parts and were the only way to do the job.

    5. Re:Building a Bridge? by spectro · · Score: 1

      What are you smoking? The biz processes should be separate from code as a matter of course, while technology doesn't go obsolete in two years, or even four.

      If biz processes are not changing then that company is losing biz to its competition, we live in a fast-paced world where the only constant is change.

      --
      HTML is obsolete. It's time for a new, simpler and richer markup language.
    6. Re:Building a Bridge? by cyranoVR · · Score: 1
      ...and half the people in accounting is handling excel sheets to get the job done.


      ...which is why .NET is probably going to sucker-punch both Java and Rails. As much as everybody dumps on it, the wild success of VB6/VBA makes it the COBOL of the 90's.

    7. Re:Building a Bridge? by cyranoVR · · Score: 1

      The hardware and underlying OS are far too likely to morph out from under you and become unsupportable within 5

      Just like the UNIX environment has morphed out and become unsupportable in 1983? LOL

      Just like AS/400 morphed out and become unsupportable in 1993? LOL

      Just like the Win32 api morphed out and became unsupportable in 2000? LOL

      Yay, Slashdot, where everybody with a cleverly-named uid and a snappy phrase like "morphed out from underneath us" can think they're an expert.

    8. Re:Building a Bridge? by Antique+Geekmeister · · Score: 1

      Actually, they did morph out from under. The pace has accelerated, but even the BSD of 1985 was unlikely to operate on the new hardware of 1990, even though I tried. The same applied to the Windows world, where core systems had to be repeatedly ported to new OS releases to operate on new hardware.

      Some parts of the systems remained consistent, but there have been very serious changes in all those core OS's and API's, enough to maek enterprise level hardware require a serious re-write at least once if not 4 or more times over the course of any software that even approaches 20 years of age. If you don't believe me, I suggest that you take a look at basic utilities like tar, /bin/sh, and man in the UNIX or Linux world.

    9. Re:Building a Bridge? by Fulcrum+of+Evil · · Score: 1

      Duh, That;s why you separate them - so it's easy to change.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    10. Re:Building a Bridge? by petermgreen · · Score: 1

      I suggest that you take a look at basic utilities like tar, /bin/sh, and man in the UNIX or Linux world.
      thats why you code in a proper programming language using proper stable interfaces, shell scripting (or using the shell commands from a proper programming language) is a dirty hack that will bite you later.

      what serious breaking changes have there been in the "core os and apis"?

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    11. Re:Building a Bridge? by Kadin2048 · · Score: 1

      I'm going to have to disagree with you there. I know a number of companies that are running IBM z/Series mainframes, in part because they are binary-compatible with programs written for the System/370 (not sure if they're compatible with the S/360, they may be). Heck, IBM designs some of their hardware specifically in order to make it backwards-compatible to systems that there probably aren't any extant examples of, because the software from them still works fine. (EBCDIC page translation hardware, etc.) I doubt they're the only ones.

      I think you're vastly underappreciating the lifespan of production systems. There is a lot of old green-screen COBOL stuff out there, perhaps not running on the original hardware, but running in various layers of emulation or compatibility modes. Why? Because it still works. Because the fundamental problems that it solves haven't changed that much, and frankly don't change very often.

      If there's a lesson programmers should take away from the past 40+ years of commercial software development, it's that software often vastly outlives its original estimated lifespan. (In some cases, maybe even outliving the programmers themselves.) The current post-bubble slowdown in commercial upgrade and adoption cycles, and increased skepticism of IT purchasing, will probably only emphasize this, and anyone starting a project today should plan on a longer lifecycle than they might have anytime before in the past 20 years.

      The fact that programs like tar and man have been constantly updated and maintained over the past few decades doesn't really help your case much; you'd do better to look at the syntax of those programs and see how little it's changed in the interim. Tar still has support for syntax ("tar xvf ...") which is horribly obsolete, because removing it would break legacy scripts and applications that people still depend on.

      Building custom, special-purpose software for a 3-to-5-year lifecycle is totally inappropriate, and history has shown that it's generally not the way the world works. If anything, someone coding a custom enterprise ERP system would be better off keeping in mind "how is someone in 30 years, who only knows what we bothered to write down, going to understand what I was thinking when I wrote this?" Because chances are, if you're doing your job right, and the people planning the project were doing their jobs right and found the right 'fundamental problems' to solve, there's no reason why the software itself may not still be in use three decades hence.

      --
      "Ladies and gentlemen, my killbot features Lotus Notes and a machine gun. It is the finest available."
    12. Re:Building a Bridge? by Antique+Geekmeister · · Score: 1

      Hardware drivers. The support for newer hardware just isn't there in the old OS, whether the new hardware is bigger disks, new mediat technologies, ew recording devices, new video drivers, new network devices, and even core functions like DNS and SMTP. There's surprising stability for many of those, but overall, if you expect to be using the same physical platform in 5 years, you're usually doing something wrong.

    13. Re:Building a Bridge? by petermgreen · · Score: 1

      there is an easy soloution to that problem on linux, chroot. The outer system can contain an up to date kernel and all the hardware drivers needed while the chroot can contain any version of the standard libs you desire. The linux syscall interface is one of the most backwards compatible interfaces arround.

      on windows i find its rare that apps refuse to work on a new version but maybe some itnerfaces are worse than others in this regard.

      --
      note: i'm known as plugwash most places but i screwd up registering that here somehow in the past and now can't register
    14. Re:Building a Bridge? by Antique+Geekmeister · · Score: 1

      Agreed. I've used that extensively myself. It's not as workable under other operating systems, but for Linux this is an amazingly useful trick.

  47. "Eat your own dog food" by Deven · · Score: 1

    All the more reason to get to a "dog food" release as soon as possible, so users can actually start using the application instead of just playing with it. Of course, it's hard to convince people to switch until the new system is better than the old one, but that's the point at which truly valuable feedback is inevitable. Until it's being used for real, you're likely to get only cursory feedback from most users.

    --

    Deven

    "Simple things should be simple, and complex things should be possible." - Alan Kay

    1. Re:"Eat your own dog food" by Brandybuck · · Score: 1

      The problem is, you're still shipping a pre-pre-pre-alpha prototype. Then charging the customer for a pre-pre-beta 2.0 version. Then charging them again for an incredibly buggy 3.0 release candidate. And so on.

      Cyclic software lifecycles have been around for a couple of decades, but only recently have we given them cool names and used them as an excuse to release unfinished (and untested) software. The problem with modern software development is that we've lost all sense of pride and craftsmanship.

      --
      Don't blame me, I didn't vote for either of them!
    2. Re:"Eat your own dog food" by TrappedByMyself · · Score: 1

      The problem is, you're still shipping a pre-pre-pre-alpha prototype. Then charging the customer for a pre-pre-beta 2.0 version. Then charging them again for an incredibly buggy 3.0 release candidate. And so on.

      Wrong. Your pre-pre-pre-alpha prototype is supposed to be a tested and solid project. Instead of cramming half implemented features in and having a constantly broken system, you implement a few features well. The customer doesn't need to see a prototype of everything in the first go around.

      The big problem that people hit is that they fake demo stuff which isn't complete. The customer, and often management see it "working" and think they can pile more work on. You've dug yourself into a ditch right out of the game. You may get pressure early to "add more stuff" but as things start rolling everyone will be happier with a constant stream of solid software whith limited functionality as opposed to the buggy vaporware.

      --

      Help me take back Slashdot. When did 'News for Nerds' become 'FUD and Conspiracy Theories for Extremist Nutjobs'?
    3. Re:"Eat your own dog food" by Brandybuck · · Score: 1

      Wrong. Your pre-pre-pre-alpha prototype is supposed to be a tested and solid project. Instead of cramming half implemented features in and having a constantly broken system, you implement a few features well. The customer doesn't need to see a prototype of everything in the first go around.

      Dear customer, here is your new 1.0 word processor. It inserts text, but you need to wait until version 2.0 to delete text. We are billing your account $495 dollars, and imposing our EULA on you. Have a nice day.

      --
      Don't blame me, I didn't vote for either of them!
  48. Right or right now? by bunhed · · Score: 2, Informative

    I worked for an outfit on the west coast last year for a few months during a systems transition. One of the principals came to me one day and asked what was taking so long. He was an old school COBOL programmer from nineteen tickity two who didn't really understand oop and the monstrosity his company was building so I tried to walk him through what we were doing, saying in the process that I was working at getting it right the first time. I'm always thinking in terms of maintenance down the road. He flipped out and said, "I don't want it right, I want it now!" I kid you not.

    I don't work for them anymore.

    I understood his point of view however. He needed to get buttons and clicky things in front of the customers as fast as possible. It seems customers will accept the mediocre over waiting and those folks are running a highly successful business as well a creating a giant mess for themselves in the repository.

    In the end it seems that people will accept garbage over nothing. I personally don't subscribe to that philosophy but the reality seems to be that it does make for a pile of money.

    1. Re:Right or right now? by gbjbaanb · · Score: 1

      Like the procedures manual entitled "I want it right first time, every time". Version 12.

      Its never right first time, even if you do it to the spec exactly and fulfill every feature, the customer's business will have moved on and they'll want further changes. Better to get it to them, and then do the changes that they will want anyway.

      I suppose this is a difference between a technical view of the world where the software matters, and the business view where a product that assists the business today is better than a better one tomorrow - especially if you can have thew better one when its ready. I've seen a company go this close to bust because its new fancy product was written to be 'right', so no customer had bought it because it wasn't released and yet all those programmers still had to be paid.

      If they'd made it simpler, released v1, then they'd have received licence fees, support fees, and could feedback on what they liked and didn't like and v2 could have been released with bugs removed and extra features (that i'm sure the initial product spec didn't think of), and sold for more licence fees. Everyone would have been happy.

  49. Eiffel by Darren+Hiebert · · Score: 2, Interesting

    This is exactly why I selected Eiffel for a signifiant simulation project that survivied seven years of maintenance. There simply isn't a language that better supports maintenance. It's not just a programming language--it's a lifestyle!

  50. pity web dev isn't like this by Anonymous Coward · · Score: 0

    totally agree.

    i have not made any software systems which i have not made more money on the maintenance of than the original development.

    i wish the same could be said about web development (excluding web APPLICATIONS) where all the focus is on pushing really tedious work out the door then making it all user updatable so once you do your really hard yards, you leave no work for yourself in the longrun.

  51. Shipping prototypes by Brandybuck · · Score: 2, Insightful

    I think that the software development community would be better served by discussions of how to build more robust, flexible, and maintainable software (thereby driving down TCO), than by the endless discussions that we currently see about how to build it quickly. What do you think?

    As someone who started his professional development life maintaining other people's code, I completely agree.

    But I must take issue with the title of this thread. The problem isn't too much focus on the beginning of the software lifecycle. Coding is in the middle, not the beginning. A good design comes first, and a good analysis of the problem domain before that. Modern methodologies ignore design, or pretend to do during coding. A quick and dirty hack may come back to bite the heel of a future maintainer, but a hurried design is sure to smother him to death. Way too much emphasis is made on coding, but that's only 10% to 20% of the lifecycle (not counting maintenance).

    We're not developing faster, we're just shipping more prototypes.

    --
    Don't blame me, I didn't vote for either of them!
  52. It sounds nice but unrealistic by SmallFurryCreature · · Score: 2, Interesting
    Software in development is loosing money. Software in maintenance is making money. If you have ever worked in other fields especially warehouses or production and have an eye for effeciency you will often spot things that if optomized could easily make cost drops and productivty go up. But only if production is stopped for a week to put in place the optimizations. Wich is too expensive.

    It don't matter how much you save. Even if that week shutdown paid itself back in the next week it would still often be considered too expensive. Because one week of non-deliveries, one week of the customer going to the competitor to get what he needs is considered far more costly then day in day out small losses because of ineffeciency.

    When it comes to IT this is compounded by the many horror stories of runaway IT projects that just don't finish and always go over budget. Sure sure, they say, an advanced IT tracking system would save us a bundle each and every day but only after we spend 3 years on getting it installed and then it will break down on everyday with a y in it.

    For software development itself this means that people have come to accept that software needs costly maintenance. So why prolong the development to save costs you are not going to save anyway?

    A F1 engine is going to be stripped down after a race anyway so why bother making it reliable enough to last more then one race?

    And don't forget that software deployment is often a race. Software is rarely written in advance. Usually it would preferabbly be ready yesterday. Have you ever had a project were a company said, we predict that we have a need for a new system in 3 years so get to work? No, 99% of the time it is, we needed a new system years ago so can you have it done by yesterday?

    Good luck then pointing out that if only you spend a little more time on it you can make it easier to maintain in 3 years time. They want it NOW!

    Learning to accept this is the only way of not going insane at work. Offcourse if you have learned to accept this you will also have become part of the problem. One of the suits who can't see reason.

    --

    MMO Quests are like orgasms:

    You may solo them, I prefer them in a group.

    1. Re:It sounds nice but unrealistic by Quarters · · Score: 1
      A F1 engine is going to be stripped down after a race anyway so why bother making it reliable enough to last more then one race?

      Because the FIA rules mandate that for the racing seasons 2005 and beyond engines must be used for a minimum of two (2) race weekends before they can be rebuilt, that's why.

  53. Redwood Trees and Grasses by hansreiser · · Score: 5, Interesting

    Each approach has a place in the ecosystem. Reiser4 could only have been developed the slow way, but that was because we were going into a mature market with solutions that worked already in place. We needed to architect for maintainability because we knew it was a long hard road ahead, and we weren't going to be quitting soon, so we made a plugin architecture.

    The problem we have is when the grasses dis the trees and the trees dis the grasses. The Linux Kernel Community, and the rest of society, have too much of that going on.

    Respect those who are nothing like you, and see that they have value to society that you cannot match but might complement.

    1. Re:Redwood Trees and Grasses by Anonymous Coward · · Score: 0

      And in the meantime, ext3 with htrees came out and eliminated most of the market for ReiserFS.

  54. Not black or white by Mostly+a+lurker · · Score: 1
    Leaving aside some of the specifics mentioned (which were misguided) the basic question is a good one, for which there is no clearcut answer.

    Some arguments for concentrating on a quick, inexpensive initial implementation:

    • the application cannot help the business make and/or save money until it is running; a two month delay in initial implementation may cost a fortune;
    • even applications you expect to use for a long time often do not work out that way; further, the longer you take giving the user a solution, the more likely some manager is to "reconsider" the value of the project part way through;
    • the time value of money; money spent early in a application life cycle is more "expensive" money than money spent later.
    The other side of the coin:
    • an inflexible application may mean that opportunities are lost later; the ability to react quickly to changing requirements is very important;
    • developer morale; if your development team feels they are being forced by PHBs to do shoddy work, the impact on motivation and staff turnover can hurt badly.
    The various factors must be weighed carefully on a case-by-case basis. Once the decision on approach is taken (especially if "quality" is being compromised) it is important to transmit to the development team why this is the correct approach, from a business standpoint, on this occasion.

    Often the best answer is to use different strategies for different parts of the project. Availability of reuseable code from earlier projects is sometimes important to the decision process.

    Bottom line: speed and cost of initial deployment is important, but can be overdone.

  55. Yes, but... by istartedi · · Score: 1

    Yes. We should definitely do that. It would be the best thing for--Oooh! Look! Shiny Things!

    By the time your maintanable app is on the market, the Shiny Things have beat you.

    --
    For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
  56. The difference... by vga_init · · Score: 2, Insightful

    Where is it? When I have written software in the past, I've seen rapid development and maintainability go hand in hand.

    If you want to finish a software project quickly, your code must be written with a certain level of foresight. You can't just hammer things together, but you must also put in some design effort to make sure that the structure accommodates the functionality you're shooting for. When you do this, your software will be developed faster than any other method because software lends itself to its purpose--your project runs the risk of dying before its finished if you don't. Your software will also have its own intrinsic flexibility toward its application. That means that a clean, solid application will come together more rapidly (and is coincidentally easier to maintain).

  57. You agree - I don't. by JFitzsimmons · · Score: 1
    For all but the most simplistic applications you have to abandon the mapping of form elements to the database because you need to do validation.

    Are you familiar with the MVC paradigm at all? Rails uses this, and enables logical separation of the three major components: Model, View, and Controller. I'm going to assume that if you care at all, that you'll do more of your own research; either that or you already know what MVC is but were unaware that rails used it. My point is that most of the code you see in those 15-minute-blog demos are either completly devoid of controller code, or just scraping by with the bare minimum to pass data downstream. The controller's purpose is to validate and format code, and/or carry out other logical adjustments. Just because some crappy demos skip this part doesn't mean that RoR doesn't have this capability. I'm a professional RoR coder myself, and I think I find those demos about as dumb as you do. All it means is that rails is likely to suffer from the same sort of newbie coder problems that many people find with php/mysql. Plopping an inexperienced coder in front of the next greatest thing in software development is going to yield poor code no matter what the platform is. Also, I'm not sure why you consider the data layer primative, but at this point I'm going to assume that it was just ignorance and assumption talking. I don't really mean that as an insult, but rather a suggestion that you should do some research on what you're slamming so hard.

    --
    Beware he who would deny you access to information, for in his heart he dreams himself your master. -Anonymous
  58. Business, business, business by Anonymous Coward · · Score: 0
    The two biggest reasons I can think of that people want to get software written faster are both business decisions (and the question sounds like it was posed by a programmer, so....):

    • A lot of the blogs out there are written by people starting companies. They have a limited time to get a product out and selling it before they run out of money. If they sit around thinking up the most perfect design ever, they run out of money and the software never gets finished. (blogging and slashdotting increase productivity though, of course)
    • You need to get your software in front of your customers as soon as possible to get feedback on it, and let that change the product into something the customers want. If you're off in la la land designing forever to get things JUST RIGHT, and then implementing it FLAWLESSLY, with ZERO DEFECTS, well, you're going to have a SHIT PRODUCT that no one wants. But it'll be easily maintainable.

    The first point is probably the most relevant - small companies are going to have louder people on the internet. Small companies are doing cutting edge stuff. People want to hear about cutting edge stuff. Enterprise Cobol developers aren't big on blogging from what I can tell.
  59. False Premise by Anonymous Coward · · Score: 0

    i think the premise is false. it sounds like the intro writer believe that ror sacrificed organization in order to imporve speed of development. imho, ror is organized very well and this is the reason why one can develop so fast for relevant application.

    yes, you have to learn the ror rails way fo doing things. once you learn the rational and reasonable way that things are organized, it isn't necessarily more difficult to maintain your application. rather, it is often much easier to maintain your app.

    this seems like so much hot air to me... but it made front page on slashdot, right?

    what do i know?

  60. It always goes back to the basics... by paenguin · · Score: 1

    Good
    Fast
    Cheap

    Pick any two...

    --
    We should start referring to processes which run in the background by their correct technical name... paenguins.
  61. RAD drives down the biggest cost of development by Anonymous Coward · · Score: 0

    RAD is a process ideally suited to customer-oriented development.

    Customer-oriented development is where a client comes to you with a rough specification and says, "we need a program that can do this, this, this and this." You sit down with the client and discuss more specific implementation details: individual features, user interface design, workflow. You have a well-defined specification of what your application should do. You give your client a projected timetable of six months to project completion.

    Five months into the project, over a period of time in which you've spent countless man-hours refining a framework that reduces TCO, meticulously commenting every class and routine you've written, you show a prototype to your client and the client says, "No, this isn't going to work at all. The entire way that the workflow proceeds is too confusing for the target users of the program. It looked great on paper, but with the database populated with real information it's entirely too much for somebody to take in. "That's what was in the spec," you argue, but the client won't hear it. The six-month project will now take eight and a half months as the entire process is reworked.

    What rapid application development allows you to do is to demonstrate a prototype in the least amount of time possible. Instead of the five-month mark, you have a product that can be demonstrated at the one-month mark. Most of the features don't work yet, and the ones that do are slow, unoptimized implementations, but it gives you something to present to the client that allows them to go "can you change this?" before you waste months implementing things that don't work nearly as well in practice as in theory. It gives the project more flexibility than a traditional development methodology by allowing you to change the program specifications before changing the specifications results in breaking the program. The query automatically generated by Rails's ActiveRecord may not be as optimized as the hand-optimized SQL you could have churned out, but you wrote the entire database interaction for a controller in literally four or five minutes. You can show it to the client, get his thumbs-up, and then replace it with the hand-optimized stuff. If the requirements change, you haven't wasted any time writing code that you need to gut out and rewrite anyway.

    The goal of Ruby on Rails, Django, and TurboGears isn't to replace the entire J2EE stack for companies like eBay or Citibank; it serves a totally different purpose. The scaffolding in Rails in particular allows you to automatically generate a basic user interface from the database schema without touching a line of code in order to prototype, and then slowly replace the scaffolding in bits and pieces until you have a full working application. It provides you with the agility to catch design issues early in the development lifecycle, rather than at the very end.

  62. Why not? It's a proven success formula by Anonymous Coward · · Score: 0
    Shipping whatever you can ASAP is the only way to go. Take the experience of one west-coast software company:
    1. Buy a slapped-together CP/M clone off-the-shelf.
    2. Arrange to bundle it with product from $BIG_CORP even before you have the rights to the product.
    3. Spend $Billions over the next 3 decades trying to improve and maintain the code while saddled with the consequences of myriad bad design decisions.
    4. For each gigabuck spent in that effort, rake in many more gigabucks in pure profits from customers who are just as locked in to your old bad designs as you are.

    TCO is unimportant when you have API and data format inertia to keep fat streams of revenue flowing forever.

  63. Release early, release often! by mcrbids · · Score: 3, Insightful

    We have two major systems at the company I work for. One, that the related staff spent 2 years documenting their business practices and exactly what they wanted the application to do. They took that huge document to a couple of consulting companies and said "we want this." 2 years later the consulting company that won the bid turned over a nearly perfect application.

    Wow. Sounds like a ringing endorsement for planning and quality execution.

    Unfortunately, though I've tried time and time again, I've never gotten anywhere near the participation required to lay out everything in advance accurately. Worse, the few times I've actually managed to get something together and gotten everybody to sign (in blood) in triplicate, it was rejected on the very first day of rollout because they didn't expect something that was, upon rollout, patently obvious. In my experience, people don't know what they want until they see that you have isn't it. Very few people have the intelligence and foresight to extrapolate what a screenshot will mean to them, in the real world.

    So, I've turned my back on the whole idea, and have instead adopted a modified "agile development" approach.

    I do just enough specifications to determine how all the pieces are going to fit together, what all the database fields are, and how the constraints, triggers, and foreign keys assure reasonably sound data. I beat the idea in front of a few people and search for objections, until most people approached seem to like the idea, and nobody has any major bones to pick.

    Then we code - it goes out the door for public release as soon as it seems stable and workable. I don't bother trying to make it totally bug free, so QA is short and sweet. On rollout, I ask our clients to review it and inform us of any bugs. We never get it right the first time, and we're pretty up front about that. But we fix it quickly, and most importantly, we modify our software towards what the customer actually needs. Stuff that is simply not needed gets dropped pretty fast.

    Our software is designed to "fail early" - so that inconsistent or inaccurate data doesn't hurt anything. And so far, we've had only minor issues in over 2 years of heavy, active, exponential growth and development.

    Turnaround time for an average modification is less than a week. We issued over 40 releases in the last year alone. Every so often I go over everything in a new perspective, and do a bunch of minor tweaks all at once - that's when UI improvements come down hot and heavy.

    The response has been wonderful! A customer who mentions an idea, and sees it implemented a few weeks later is your evangelist for life. You practically become their religeon, and you'll get recommendations and referrals for the rest of your days.

    I've heard people talk about it like bargain hunting - they hunt around - just to see what's new!

    So far removed from the bleak hopelessness so common here at Slashdot about software projects - it's exciting, intense, fun, and profitable!

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
    1. Re:Release early, release often! by RingDev · · Score: 1

      There's nothing wrong with agile development. Like you said, users often don't know what they want until they see something. So prototype early and often. But at the same time, you need to have the business rules in place before you waste time developing. And developing with out business rules IS a waste of time. Even with agile development, you'll spend your time redeveloping from every prototype just to hit a major business rule 'clarification' after 6 months and realize that you need a new attack vector that requires substantial code changes.

      -Rick

      --
      "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
    2. Re:Release early, release often! by nightowl03d · · Score: 4, Interesting

      In my experience, people don't know what they want until they see that you have isn't it.

      You don't say what your target market is, so what I am going to reply here has a relatively small probability of applying to your situation. But this is slashdot so I don't have to worry about a silly think like relevance, so here we go....

      If you had this experience, chances are the person who fell down on the job is not the user, the PM, or the developers, but the software architect for not identifying a fluxional feature. In fact the sole justification for the Agile methodologies is these fluxional features. Many, (but not all), "Agile" projects I have been called in to clean up have made this mistake. In most of these cases, the principal performing the architect role was a true technology wizard, but who would filter everything the business people said to conform to the principal's pre-conceived notions or more subtly falling into the "one true answer" trap.

      When a contentious topic comes up in analysis meeting, a technology focused architect often seeks to resolve it and record the resolution, and hard-wire that behavior into the requirements. This is death. As this type of error multiplies, the seeds have been sown for disaster. What should have happened, was a contentious point should be used as an indicator of a volatile feature that should be designed with ease of customization in mind.

      Volatile requirements are the norm and the identification of fluxional features is the key to knowing when to address them.

      In my market these areas often require extreme flexibility.

      1. Screen details, and screen workflow on the UI side. Keep the UI shell stupid using an MVC/MVP paradigm. (.Net 2.0 does a fairly good job with this if you use their binding framework judiciously, .Net 3.0 does a better job, JSP sucked donkey balls in this area, JFC and JSF are better, ROR is pretty good for simpler web sites). Oddly enough navigation is usually pretty stable once the stakeholder meetings have been conducted. Be ready for this.

      2. New commands will be added. (Commands in this sense are persistence operations or new features). Work out early how all of those contentious points that came up in your continuous interviews with your stakeholders can be resolved with an appropriate plug in approach. What meta data will be needed for future commands? Be ready for this.

      3. Your input formats and medium will change. Be ready for this.

      4. Business rules will always change, never allow anything structural in your system be governed by any business rule stated in a stakeholder meeting. Keep them behavioral. Construct/purchase an appropriate rules engine who only knows about business rules. Be ready for this.

      5. New persistence mechanisms will be desired. Be ready for this.

      Sounds a lot like Agile doesn't it? The only difference is that be ready for this changes to react to this. Putting the effort in it to think about these and other volatile issues up front finds the trolls sooner, which enables refactoring efforts to be more local than they would have been otherwise. This list isn't comprehensive, so remember that outside of mathematics, and mathematical physics, there is almost never a one "One True Answer". My personal rule of thumb if that an issue can't be resolved via a thought experiment it should be made a fluxional point.

      Very few people have the intelligence and foresight to extrapolate what a screenshot will mean to them, in the real world.

      If you are using screen shots to walk through your scenarios, it is no surprise to me that you have gotten bad results. Paper prototypes will let the stakeholder see the consequences of their actions much easier. But that isn't enough either. You should also make efforts to communicate the state of the system and processes at each point in the screen shot. Designing a good walk through is more of an exercise in psychology than a technical exercise . Wal

    3. Re:Release early, release often! by GalacticCentral · · Score: 1

      You are blissfully removed from the reality of most large software projects. What you describe only works under limited circumstances. Very few corporations will tolerate 40 releases in 5 years, let alone 1 year, they assume your product is unstable and requires too much monitoring and too many updates. You most likely are selling a product to other programmers.

    4. Re:Release early, release often! by Anonymous Coward · · Score: 0

      No, more likely he is deploying a service to his own servers.

      While, as you said, no customer is likely to roll something out on a weekly basis, it's quite normal to update software running on your own servers weekly.

  64. Re:Maybe the beginning gets too little attention . by julesh · · Score: 1

    But I still think Fred Brooks's advice in The Mythical Man-Month is correct: plan to build the first version to throw away. You will in any case, and it's better not to deliver the rubbish to the customer.

    I'd take it further than that. My experience over the last 10 years of development work has been that for any medium-large project (the smallest I've worked on that this has applied to was an e-commerce system that has about 9,000 lines of code, the largest was a GUI framework that has about 40,000) was that the first version really didn't work well at all and could only be used internally; the second version was adequate for a few years of customer work but starting fraying at the edges after that; it was the third version, another rewrite from scratch, that actually managed to both work and be maintainable.

    So for the first version, at least, agile tools and methods are probably appropriate. If you're going to throw it away, you might as well get it done quickly. For larger projects, it might be appropriate to take a similar approach for the second... just document it better, because you will be working with it for a year or two at least.

  65. bad premises lead to bad conclusions by zergworld · · Score: 1

    This quote just happened to appear at the base of this article: "Your reasoning is excellent -- it's only your basic assumptions that are wrong." Let us assume that business concerns dictate software development cycles to some degree. Certainly a developer can sympathize with the pressures of competitive business urgency. However, I think there's a tendency (especially in startups) for the quality of a business concept to be inversely related to the "need" for fast time to market. An extremely poor idea, for instance, might appeal to extremely fast development so that its weak business model doesn't collapse under even basic competition, whereas a unique and fruitful concept may deserve quality software development attention. Organizations that expect "poor" software development can themselves be indicative of a weak business plan. If the business concept foundation isn't solid, there is no reason to expect the business drivers to want anything but fast and cheap software results. The lack of appreciation toward software development is a reflection of a bad business. Bad input, bad output. To argue that rapid and vapid software development is justifiable for business reasons is a logical misstep if we don't also ask what it is that justifies bad business? For businesses that possess a reasonable product concept with quality management that finds itself in need of hazardously rapid software production, this message is not for you. Let's just make sure we don't allow the debate between rapid and pensive software development to be unduly influenced by immature businesses that believe that unsophisticated, bare-knuckled business practices should be reflected in an engineering discipline. There is a reason why software developers are not allowed to fail but salespersons are. There is simply a different scale of rigor, knowledge, and discipline involved. Business principals won't like to hear it, but it's the sad truth, and it's the world we live in. I doubt that any of this will change, as it's really as much about human nature, fallibility, sometimes corruption. But for our own sanity, if we can't change it, at least there is some solace in the knowledge that we can work to find solutions to genuine problems but that we are often doomed by faulty or simply missing business premises.

  66. Missing the point of Rails by ikewillis · · Score: 2, Interesting
    Take, for example, the current huge hype about Ruby on Rails, and how it allows the creation of a CRUD web-database application x-times more quickly than every other environment.

    Sadly, this is the hype about Rails, a feature called "scaffolding" which lets you build a CRUD web-database application by writing a single line of code. This is pretty much the first feature anyone who touches Rails learns about, and sadly, it appears to be the only feature of Rails the author of the question has been exposed to. Scaffolding is, perhaps, the least interesting feature of Rails.

    I've been developing a fairly high profile web site in Rails for the past year (ClickCaster.com). In the past I've used a number of different web development languages and frameworks, particularly PHP and JSP. Rails has not only resulted in the fastest development of any framework I've used, but also the tersest code to implement given functionality.

    The real advantage of Rails comes from two different aspects: leveraging Agile development techniques, and exposing a highly cohesive, high-level interface for developing database-backed web pages.

    The former, particularly the practice of test driven development in which you write tests first and code second ensures you think about what your code is trying to do first and how it should do that second. Pro-actively writing tests ensures that making modifications to your code does not break existing functionality.

    The latter, which forces your code into an MVC model where database, mailer, and other underlying components are neatly isolated from the rest of the program logic, and the presentation templates are isolated from code receiving and processing user input, all atop a very high level framework where the majority of development tasks are abstracted ensures you write terse code which is well modularized by function. This has two advantages: it makes code easy to write in the first place, and it makes it easier to maintain. The author of the question seems to imply that Rails satisfies the former condition, but not the latter. This is not the case.

    Rails results in less code, and uses test driven development which ensures that your changes do not break existing functionality, and all you need run to ensure this is "rake test". Bottom line: less code is easier to maintain, and tests prevent modifications from breaking existing functionality. Thus any implied criticism against Rails in this article is completely unwarranted and only serves to illustrate the ignorance of the question's author, not any imagined deficiencies in the Rails framework.

  67. It is not about the code... by einar2 · · Score: 1

    Every euro put into developing code results in additional four euros to maintain this code later. Do you really think writing more code faster is solving any business problem?
    Constantly rewriting software is out of question. Legacy software was once written, debugged and spent some time in maintenance. Why do you think you can rewrite the same logic and safe money by doing so?

    Writing new software creates a growing wave of maintenance cost following the development activity. Once this catches up with you, you spend all your IT budget in maintenance and you will be unable to fullfill new business requirements. The only way to keep operational is to find ways to do more with the same amount of code. Existing code has to be well structured and documented so that the business logic therein can be reused. Dependencies between systems have to be well controlled to keep the code base maintainable. Nobody can afford or risk major changes of the application landscape.
    All this is about architecture and design with a long term outlook. It is not about writing code...

  68. bad premises, continued by zergworld · · Score: 1
    A business has no intrinsic right to exist. If it wishes to exist, it may need to play the game, and it needn't play well or play fair. However, the motivation to get rich quick, whether it be through good or poor business practices can be just the faulty assumption that will drive a business into the dirt.

    There are different styles of business, just as there are different styles of programming. Some feel that business is like a WWF fight, whereas other conduct business calmly and earnestly. The excitable, frenetic form that is indistinguishable from bi-polar syndromes is simply weaker and fundamentally less stable albeit perhaps more likely to win the lottery.

    If a kid is on a sugar high and deems it necessary to feed his craving at the local corner store, he is probably not considering the most effective and efficient route to his continued satisfaction but rather the easiest and fastest road to his immediate gratification. This is the same type of behavior we find in drug addicts that will sacrifice everything for instant relief. If a business is to be handled in this fashion, the facilitators will have to accept this lack of vision. I suspect that it's up to us as developers to decide if we need to work for organizations with some self-respect and quality products or if we shall succomb to consorting with mud-wrestlers or drifting with pirates.

    We simply cannot equate a business motiviation with the engineering process methodology, especially when a business is not a Business (with a capital B) but just an ordinary, everyday punk opportunity for some two-bit egoist mongrels.

    A business might be entitled to make its own decisions, but like anything else, the act of sovereignty does not make a Business, in the same way as late night karaoke stint doesn't make a Hollywood actor. Business people and managers that don't bother to look past their own fake smiles are just the fools we work for. We are the of jesters of kings and pompadours but who is the greater buffoon, the one that struggles to keep a sinking ship afloat or the one that bought a boat with holes?

  69. Re:It's a disposable culture.QWZX by joss · · Score: 0, Troll

    > Take your anti-semitism elsewhere

    Dickhead. Put words in people's mouths and then label it
    anti-semtism. Maybe he forgot Israel was in middle east,
    last I checked ignorance and anti-semitism were not the
    same thing. And there are other reasons for not counting
    Israel as a proper democracy [eg that voting rights are partially
    based on race].

    --
    http://rareformnewmedia.com/
  70. So you Built It and They Didn't Come. Now What? by Jackie+B · · Score: 1

    Here's how to convince the beancounters. Show them how,even before the TCO gets so out of control, the product it supports - or even is - ends up being something nobody really wants anyway. Start with the end in mind; both from maintenance & customer demand = revenues & profits! This a SWD co. in NJ that doesn't write a single line of code until the end-user manual is written. There's actually a book out with that title, "So You Built It and They Didn't Come. Now What? on Amazon. Will they never learn?

    1. Re:So you Built It and They Didn't Come. Now What? by Anonymous Coward · · Score: 0

      I'm slowly being convinced that dissing the peeps who sign our cheques is A Bad Idea Generally, My Intuition Stays Telling All KDE Enthusiasts--A BIG MISTAKE.

  71. putting the cart before the horse by eraserewind · · Score: 1

    I think that if you don't get the project out the door ASAP, then there will be no money coming in to pay for all those expensive maintenance programmers. Besides which, unless someone is actually using the project, how are you going to know what to maintain?

    Now, there is certainly justification for the maintenance team refusing to accept code until it meets certain criteria, but there is no need for those criteria to get in the way of customer release. They are two seperate issues.

  72. flawed. by CDPatten · · Score: 1

    That thought is terribly flawed, at least from a small business' perspective. Rapid software development is key. For one main reason. Before you have a product it makes you $0. After you launch it (assuming you do a good job) it makes revenue and can pay for its maintenance. Its now making you money instead of costing you money. It may not matter to MS, but to small business it means the world.
    It's simple logic really, and you'll find it's how most small-medium software companies look at it. We may hear a lot about the big guys (Adobe, MS, Apple, etc.), but there are 1000s more that are small. For them developing a new product can decide whether they sink or swim TODAY.
    Let's face it, we would all rather take a slightly less profit and actually have a PROFIT then to wind up never getting anything at all because its development costs were so high.

    1. Re:flawed. by vidarh · · Score: 2, Insightful
      True in some sense, but keep in mind that most software development is not done by software houses, but in house by companies that will use it.

      For some of these systems getting it operational quickly may be important, but for all of them maintenance is longer term going to be far more critical. I've more than once built something quick and dirty because we needed something "yesterday", but inevitably a quickly built system will need to be replaced or rewritten to serve long term needs without driving maintenance costs through the roof. Often, planning for a early rewrite is ok - it gets you something up and running quickly and may buy you time AND experience with the actual user needs. But ultimately engineering for maintainability will be needed if your app is going to have a decent lifespan, and engineering for maintainability does take a lot more time than most people think it will.

  73. Freenlancer pov: keep sloppy code coming, please by Zaphod2016 · · Score: 2, Insightful

    From the freelancer's perspective, there is nothing I love better than a mess of spaghetti code hacked together by interns on crack and then rushed out the door by a PHB.

    Where I might normally charge $250 for a few hours of patching, these desperate fools will happily pay 10x that so long as it "works by Monday morning". Of course, that's pretty easy to deliver, especially considering the PHB will almost always elect to avoid all the *real* problems (read: time-consuming). The result? Repeat business!

    I used to feel kinda crooked about this (honest). But, in all fairness, a man can only give the same "TCO is relevant!" power point presentation so many times before he just gives up and takes the money.

  74. Spoken Like a True Engineer by ChronoFish · · Score: 2, Insightful

    Ruby on Rails is not designed for the software engineer. It's designed for the Glue Master who wants/needs an application developed as quickly as possible with as much power as possible. The applications are "quick and dirty" one-offs that will be "refined" by being rewritten. Perfect for Web-UI's that need to be constantly scrapped and rewritten. Typical programming team consists of a single ADD user (not usually a "learned" programmer).

    PHP/Python/VB is not designed for the software engineer. It's designed for the programmer who wants/needs an application that is maintainable and will last longer than a RonR app - but is is not going to last indefinately. The applications will have a history and may be revisited and refined for several years. Perfect for heavily used Web Apps that have a short-multi-year lifespans. Typical programming team consists of 1-4 programmers optionally with some support staff and/or managment.

    Java/C/C++ is designed for the software engineer and programmer who wants/needs a robust powerful application that will have 5's and 10's of years lifespan - Perfect for building something like a PHP/Ruby on Rails/Web script engine, Apache Web Server, Linux OS, etc. Typical programming team consists of multiple groups of 6 programmers/engineers and staff (managment, testing units) to support them.

    It doesn't make sense to over-engineer applications that process simple web-forms. Nor does it make sense to hack together a web-content-management-system. You use the tools, the effort, and the language that makes sense for the application at hand.

    -CF

    1. Re:Spoken Like a True Engineer by arevos · · Score: 1

      Ruby on Rails is not designed for the software engineer. It's designed for the Glue Master who wants/needs an application developed as quickly as possible with as much power as possible. The applications are "quick and dirty" one-offs that will be "refined" by being rewritten ...

      ... PHP/Python/VB is not designed for the software engineer. It's designed for the programmer who wants/needs an application that is maintainable and will last longer than a RonR app - but is is not going to last indefinately.

      You don't appear to have much experience with Ruby on Rails, if you consider it less maintainable and more "quick and dirty" than an application developed in PHP. Rarely is it a good idea to start an argument from a position of ignorance. A good engineer, software or otherwise, should know this.

  75. Mod up by Anonymous Coward · · Score: 0

    n/t

  76. Agree by sgt101 · · Score: 1

    I totally agree with this article. The issue is not only that we don't focus enough on the rest of the cycle, but also that we have no understanding of it.

    The best work in the field is the so called "FEAST hypothesis" http://www.doc.ic.ac.uk/~mml/feast/. What they say is that systems evolve along an inverse square rule. But there are catches. The big issue in systems is not growing size, but growing complexity. Simple code is easy to maintain, complex code is a nightmare. The biggest catch though is in the data. I have later data for one of the systems studied by the FEAST project. It grew from 3.1 mloc to 3.9 mloc in the projects study period, along an inverse square form. If the system had continued to grow at that trend it would be 4.5 (ish) mloc today.

    In fact it's 13mloc and it's become the nexus of an ecosystem of 400 systems connected to it via XML middle ware.

    We know squat.

    --
    --------------------------------------------- "In the end, we're all just water and old stars."
  77. Three words by KarmaBlackballed · · Score: 2, Insightful

    Service Oriented Architecture

    (SOA)

    --

    --- -- - -
    Give me LIBERTY, or give me a check.
    1. Re:Three words by sgt101 · · Score: 1

      I'm curios; does anyone have any reason (as opposed to sales pitch) that should make one believe that SOA will make systems more maintainable?

      What are the abstractions that people think underpin SOA?

      --
      --------------------------------------------- "In the end, we're all just water and old stars."
  78. Do check those facts by Anonymous Coward · · Score: 0

    It is apparent you don't know what you are talking about at all. I recommend actually reading up on what you can do. I developed in WO for about two years, and that was absolute crap you are right - but the idea was sound. And Rails is in many ways WO done right.

  79. burn the first one by Russ+Nelson · · Score: 2, Insightful

    The reason you want to be able to build a working system quickly is so that you can throw out the first one. You see, there is no substitute for learning how to do something than to actually do it. Trouble is that, if you invest a lot in the first one with an eye to reducing maintenance costs, you won't be willing to throw it out even though the entire structure of the program is fucked. A program is founded on a certain set of assumptions. If your assumptions are wrong, then the foundation of your program is wrong. Your program can never be fixed. It must be thrown out, and a new program with correct assumptions must be written.

    The second system will also be fucked, because you are a sophomore. It, too, must be thrown out. Only until you get to version 3.0 will you actually have a working system which should and will last for the lifetime of the product. THEN you worry about maintenance.

    --
    Don't piss off The Angry Economist
  80. What goes around comes around... by keithcstone · · Score: 1

    http://delivery.acm.org/10.1145/810000/803691/p303 -mclean.pdf?key1=803691&key2=8402792511&coll=porta l&dl=ACM&CFID=15151515&CFTOKEN=6184618 Write it right the first time you're in good shape. If you didn't write it right, it's probobly faster to throw it away and start over anyway.

  81. Re:It's a disposable culture.QWZX by Anonymous Coward · · Score: 0
    [eg that voting rights are partially
    based on race]


    What are you blabbering about? If you are a citizen, then you can vote -- whether you're Jewish, Arab, or from Martian.

    You must be thinking about the West Bank, where people there aren't citizens (let's ignore the settlers for a moment), since it was never annexed like the Golan Heights, hence it is not officially part of Israel; this also applies to Gaza.
  82. Get rich quick, or die trying? by Anonymous Coward · · Score: 0

    Which do you really prefer?

  83. Small is both good and quick by iabervon · · Score: 1

    If the system is done right, the fact that it's quick to implement initially means that there's not all that much code there (because you wouldn't have time to write it), which means that it's relatively small and therefore there isn't too much to maintain. Of course, this breaks down if you have code generated from templates, because the initial input is then smaller than the resulting source that needs to be maintained.

    If you have a system where the default behavior is generally right, and where it's easy to get non-default behavior when necessary without losing the default behavior for everything else, then you can minimize the size of your code base, and therefore minimize your maintenence burden. My impression is that RoR takes pride in the brevity of the application, so there's got to be a certain amount of maintenence savings from this effect.

  84. Management & CEOS by DrugCheese · · Score: 1

    I think upper management directly correlates quicker turn out time to bigger profit. The less time it takes you to do the job the quicker you can proceed to the next. Especially the non-technical ones. The only analogy I can ever think of is the car. We can build a car in a week. But we'll spend the next 6 months trying to put doors, a windshield, a slurpee machine (yea if only managament had let us know ALL the specifications beforehand) etc. on while its rolling down the road.

    --
    *DrugCheese rants*
  85. Rails not just about fast results by joost · · Score: 1

    I think that the software development community would be better served by discussions of how to build more robust, flexible, and maintainable software (thereby driving down TCO), than by the endless discussions that we currently see about how to build it quickly.

    And this is where Ruby on Rails really shines. It's very common to write tests first and code later in Rails. This alone lowers TCO considerably. Also, fewer lines of code means it's easier to comprehend for others. It does help yourself, too, when you go back to that first piece of code you wrote six months ago.

    I have found that my Ruby on Rails projects are more maintanable than my Java projects, not less. The language feels much more natural, literally everything is an object, iterators are built-in, which means any object that should have .each(), does have that method indeed. And it works right away.

    And don't get me started on code blocks. Those are things of beauty. So all in all, I have found that Rails is more than worth the hype. It actually delivers in terms of flexibility and maintanability.

  86. Re:Maybe the beginning gets too little attention . by tootlemonde · · Score: 1

    But I still think Fred Brooks's advice in The Mythical Man-Month is correct: plan to build the first version to throw away.

    That advice was one of several recommendations that Brooks modified or abandoned in the 20th anniversary edition

    Oversimplifying at bit, he now recommends an incremental, iterative approach to development where the design is modified by feedback from users.

    He stands by his original insights that adding programmers to a project during development increases the time it takes and that there is no silver bullet to solve that problem. However, in the four new chapters added to the original edition, he acknowledges that a lot has been learned about software development in the last 20 years and as a result, it is much easier to get it right the first time.

  87. NPV & TCO by modapi · · Score: 1

    People care a good deal less about maintenance cost than development cost because it is a future cost. Net Present Value discounts future dollars by whatever interest rate the organization uses for investment decisions. In practical terms, with a 10% interest rate (low by historical standards) a dollar of cost in 5 years is worth about $0.62 today. A dollar of development cost today costs a dollar. So while trying to optimize for TCO isn't stupid, it also isn't quite the win that most commenters seem to believe. As interest rates rise, as they must due to our incredibly irresponsible fiscal policy, there will be even LESS attention paid to TCO. Heh.

  88. Maintenance is important but often neglected by Xernon · · Score: 1
    Typical business applications are built to be used for years, which means they must be able to handle years of ongoing maintenance. Yet in my experience it is rare to see an application developed with this as an explicit requirement. Too often, its a rush to throw together the application to meet some artificial deadline. When the application is finally transitioned to the maintenance team, they suffer through a series of critical problems with the application until they're able to fix or rewrite enough of the functionality to make it stable. And it probably still isn't easily maintainable.

    I've become a lot more passionate about maintainability since spending time working on a maintenance team. I go into this topic in more detail in a few of my articles: The Importance of Maintainable Software and How to Create Maintainable Software.

  89. Finance and future value by Tablizer · · Score: 1

    Also, in finance there is the "time discounting" principle, also known as "future value". Basically it says a dollar today is worth more than a dollar tomarrow. Thus, revenue generated soon is more valuable than revenue generated years down the road.

  90. Don't agree on change pattern by Tablizer · · Score: 1

    I've found that different developers often don't agree on what the pattern of future change will be. You cannot target future changes if you don't know or don't agree on what they are. People's experiences seem to leave them with different memories. They may remember X busting, but not Y busting. In other words, selective memory.

    I've been in long debates where someone claims that Foo Oriented Programming is better for maintenence. But when I ask for example scenarios, they provide what seem to be low-probability scenarios. But they insist it is high in their experience. Thus, we are stuck at an impass. No coding technique or paradigm is a free lunch that optimizes for every change scenario.

    In many ways it is like investing: *guessing* which paths are the best and putting your money on them. If it was a science, we would all be rich.

    Predicting the future is still a subjective art. Their ain't no consensus magic formula.

  91. Separation Mania by Tablizer · · Score: 1

    The latter, which forces your code into an MVC model where database, mailer, and other underlying components are neatly isolated from the rest of the program logic, and the presentation templates are isolated from code receiving and processing user input

    I have to disagree, or at least give a warning about this "separation" mantra. For many kinds of projects it is *unnecessary*. It creates two places that have to be changed instead of one. For example, if you add another column to the database and a report, then you have to go to the presentation side, and then go to the query side. You have to make two trips, and possibly have to also expand the interface between them for the new column.

    If you had the SQL close to where it was used, then you would only have *one* change spot instead of three. Separation has tripled the cost of change in this case.

    One of the justifications for separation is "what if we switch database vendors?". It happens, but does it really happen often enough to justify the "wrapping tax" (separation)? The wrapping tax is *always* paid whether you use it or not. But the benefits of wrapping for swapping are only collected *if* you switch vendors.

    If you really switch vendors that often for custom software, then something else is probably wrong. Plus, it is a one-time change for the most part. You spend a day finding and changing the SQL, and then it is mostly done. (Testing has to be done in either case.) It is not something that anchors you down year in and your out like the wrapping tax does.

    1. Re:Separation Mania by PylonHead · · Score: 1


      If you had the SQL close to where it was used, then you would only have *one* change spot instead of three. Separation has tripled the cost of change in this case.


      You may end up changing three files instead of one file, but you are still changing exactly the same amount of code. And if you use the results of that one report in more than one spot in your site, you've actually saved yourself a lot of changes and a maintenance nightmare.

      You might think you're saving time by hardcoding your sql with your presentation layer, but as your site gets larger and more complicated, it becomes more and more of a loss.

      Perhaps your bad experience with MVC may come from the Java world where it is slow and painful to make changes to your code. Perhaps, like me, you gave up on Java for the php world where development is fun and fast, but tends to lack structure.

      Finding Rails was amazing: MVC seperation for almost exactly the same amount of work as you would do for a php app. The same speed of development but code that is infinitely more maintainable.

      We coded an ecommerce site for a client about 6 months ago. Last month, their in house programmer was able to go and repurpose the site with a completely different look and feel in 30 hours without breaking the functionality of the site. Without MVC seperation, this would have been impossible.

      --
      # (/.);;
      - : float -> float -> float =
    2. Re:Separation Mania by Tablizer · · Score: 1

      You may end up changing three files instead of one file, but you are still changing exactly the same amount of code.

      It takes time to go to different spots. That is a cost. Finding the other spots often takes longer than changing code, at least for me. Also, it may be more code between of the code for the interface between the SQL and the method that uses it. If the SQL was where it is used, there is no interface, and thus no interface to change.

      You might think you're saving time by hardcoding your sql with your presentation layer, but as your site gets larger and more complicated, it becomes more and more of a loss.

      I have not seen scenarios that justify this claim. Seperating everything that potentially can be separated does not magically make all stuff easier to work with. Some end up following mantra for the sake of the matra itself, not because of any clear cost-vs-benefit study.

      And if you use the results of that one report in more than one spot in your site, you've actually saved yourself a lot of changes and a maintenance nightmare.

      I have nothing against using subroutines etc. to put commonalities in a shared spot, but to do it *before* a commonality is identified is unnecessary cost. Many uses of SQL will be one-shot-deals.

      Finding Rails was amazing: MVC seperation for almost exactly the same amount of work as you would do for a php app. The same speed of development but code that is infinitely more maintainable.

      Maybe you just didn't know how to use PHP frameworks or PHP right. I cannot tell without seeing actual code that allegedly went sour. Anecdotes point all ways. I've also seen Rails code that explicitly loops over many SQL retreives instead of letting SQL do the join in one shot. This appeared to be because Rails does not natively "understand" joins, and so did a loop instead. (Perhaps they've since fixed it, I don't know.)

    3. Re:Separation Mania by PylonHead · · Score: 1


      It takes time to go to different spots. That is a cost. Finding the other spots often takes longer than changing code, at least for me. Also, it may be more code between of the code for the interface between the SQL and the method that uses it. If the SQL was where it is used, there is no interface, and thus no interface to change.


      There is no denying this, it is a cost. But if your code is well organized, the cost is low.


      "You might think you're saving time by hardcoding your sql with your presentation layer, but as your site gets larger and more complicated, it becomes more and more of a loss."

      I have not seen scenarios that justify this claim.


      Really? Then we've had different experiences.


      Seperating everything that potentially can be separated does not magically make all stuff easier to work with. Some end up following mantra for the sake of the matra itself, not because of any clear cost-vs-benefit study.


      I definitely agree with you here, so I think maybe we're not as far appart as it might have seemed. Seperation for seperation's sake just adds needless bloat to the code, makes it less efficient, and harder to maintain.

      Where we may disagree is when deciding what abstractions are worthwhile. Typically, whenever you're hitting the database with a query or an update, what you're doing is implementing some kind of business logic. That logic might be "Give me all the people who have checked out books on a specific topic" or "Add a new book to our repository".

      You may think that this logic will only be used on one page of your site, but if the site grows more complex, chances are there will be opportunities to reuse this code. At least, this has been my experience.

      The user interface that calls this business logic and the way the results are presented are likely to be different in different contexts, so adding a level of abstraction at this point makes sense.


      I have nothing against using subroutines etc. to put commonalities in a shared spot, but to do it *before* a commonality is identified is unnecessary cost. Many uses of SQL will be one-shot-deals.


      The answer: it's a lot easier to write the code abstractly than it is to refactor it as an abstraction later down the line. When you have it hard coded into the presentation layer it's easy to lose track of the interface of the business logic.. to track down what variables are required, and ensure that none of the temporary variables are used later for side effects of the code. Also, if you've already written the abstraction, then that code has been tested correct. Rewriting it later will require addition testing.

      Beyond that, it makes sense to keep the business logic together. What makes more sense.. 10 different php files representing different parts of your user interface, each containing 1/10th of the business logic that controls how books are processed at your library, or 1 file containing all the business logic for checking out, adding, removing, and reclassifying books?


      Maybe you just didn't know how to use PHP frameworks or PHP right. I cannot tell without seeing actual code that allegedly went sour. Anecdotes point all ways.


      It's certainly true that I haven't seen a PHP framework of the quality of Ruby on Rails. It hasn't been for lack of trying. What do you recommend?


      I've also seen Rails code that explicitly loops over many SQL retreives instead of letting SQL do the join in one shot. This appeared to be because Rails does not natively "understand" joins, and so did a loop instead. (Perhaps they've since fixed it, I don't know.)


      Fixed before the 1.0 release, and 1.1 makes it possible to much deeper joins and have all the objects populated correctly.

      --
      # (/.);;
      - : float -> float -> float =
  92. Known knows, known unknows, and unknown unknowns by bADlOGIN · · Score: 1

    Smart programmers know that management is never as smart as they think they are (hell, for that point the programmers know that about themselves as well;) You're wasting time on requirements when you spend 3 months producing a dead tree in a binder that's already inaccurate. Spending weeks agonizing and planning for things that may never happen to the point that you can't ship anyting of value to anyone is wasting time. As far as management knows, sometimes there's no clue to be had or they get the wrong clue. Even if management knows exactly what they want, it may not be what is needed.

      There are things you know that you know, things you know that you don't know, and things you don't know you don't know. Or: known knows, known unknowns, and unknown unknowns. The only value lies in going after the first for the three. The rest will change for certian. Hell, sometimes the first changes (e.g. they were wrong).

    As far as "just write some code". Sure. As long as it's meeting the most important business requirements, you can get feedback, and you take the time to build in quality w/ test coverage: absolutely! That is however different thatn "just hack something out"...

    --
    *** Sigs are a stupid waste of bandwidth.
  93. Who is served? by WhatDoIKnow · · Score: 1

    "I think that the software development community would be better served..." By better served, do you mean as in producing a better product, or as in job security?

  94. Concept Failure by Kope · · Score: 1

    The biggest problem is there is buy in by PROGRAMMERS (the professionals who are suppossed to know better) that the TOOL MATTERS.

    This is simply not true.

    Study after study has shown that when talking about anything that matters (does the delivered solution resolve the problem, is the cost of delivery of a working solution in line with the intial budget estimate, TOC, etc.) the tool is irrelivant to the discussion.

    What is relivant is if the system is architected well. Is the problem fully and completely defined? Does the scope remain stable over the development cycle (be it 2 week extreme thing or 5 year traditional thing) and is everyone coding to the same target? Is there a good communication plan in place for the project? Are all the developers using the same methodology and coding standards? Is there sufficient Q/A as part of the project plan to actually find the bugs that matter?

    All of those, and many other items, matter.

    But the very first discussion most programmers AND PHB's have when they decide to embark on a project isn't about problem definition, it's all about what tool to use.

    Some day people will figure out that not only doesn't the tool matter, but that choosing an older tool means you can make use of deeper experience pools as well, which in some cases may be far more beneficial than being able to hire the cheapest programmers because everyone only has 1 year or less experience in the language because it's only a 1 year old language . . . (not to mention the problem young tools tend to have in terms of their own bugs and issues compared to older toold).

    1. Re:Concept Failure by arevos · · Score: 1

      The biggest problem is there is buy in by PROGRAMMERS (the professionals who are suppossed to know better) that the TOOL MATTERS.

      This is simply not true.

      I've read your post several times, and I'm unsure quite what you mean. To what extent do you think tools do not matter? For instance, is it your assertion that there is no benefit to designing a website with RoR over programming it in assembly? Does it matter how large the program is? Or are you claiming that tools don't matter at all?

      Study after study has shown that when talking about anything that matters (does the delivered solution resolve the problem, is the cost of delivery of a working solution in line with the intial budget estimate, TOC, etc.) the tool is irrelivant to the discussion.

      You haven't referenced any sources to support this sentence. What studies, exactly?

  95. This is an incredibly poor analogy. by Anonymous Coward · · Score: 0

    Software can be modifed, expanded, and built on very easily. Bridges cannot. You can make a simple form of your software, and then when the core is done, add in the additional stuff as you go. Having to rewrite sections here and there because things work differently than you thought is not the end of the world. Using a decent language, and assuming you aren't retarded, you can re-write the portions that need re-written in less time than trying to plan it out in the first place. And no matter how much time you waste planning it out, you will never get a full spec, with all the details needed, so you will still have to go in and change stuff when the client sees it anyways.

  96. Re:It's a disposable culture.QWZX by Anonymous Coward · · Score: 0

    Or do you think that it doesn't count because it's run by Jews? Take your anti-semitism elsewhere, please.

    No, it doesn't count. I'm talking about a democracy run by Arabs that can serve as an inspiration to other Arab countries to change their systems of government.

  97. (clarification) Re:Separation Mania by Tablizer · · Score: 1

    Re: "Also, it may be more code between of the code for the interface between the SQL and the method body that uses it."

    Corrected: Also, it may be more code because of the code for the interface. That is the interface between the SQL and the method that uses it. Example:

    Together:

    sql = embed("select....where x=? and y=?", foo, bar);
    result = execSql(sql);

    Together adding another parameter:

    sql = embed("select....where x=? and y in (?,?)", foo, bar, zak);
    result = execSql(sql);

    Separated with 2 parameters:

    result = execSql(getSqlA(x,y));
    stuff...
    function getSqlA(foo,bar) {
      return embed("select....where x=? and y=?", foo, bar);
    }

    Separated with 3 parameters:

    result = execSql(getSqlA(x,y,z));
    stuff...
    function getSqlA(foo,bar,zak) {
        return embed("select....where x=? and y in (?,?)", foo, bar, zak);
    }

    (I didn't include sql injection protection here to keep the examples simple.)

    With separation, I had to change three statements, whereas I only had to change one when not using separation.

  98. Because they are _projects_ by markholmberg · · Score: 1

    In project you got scope, cost and time, right? When calculating these, you calculate them for the project. If say you will do it fast and cheap, the project gets approved. At least internal software gets developed as a project and for the project you get some budget. Who cares for the operating cost?

  99. Re: whatever the friggin subject is by yusing · · Score: 1

    I don't harbor any suspicions that fads will stop being popular ... but why anyone would want to use a brand-new language to do something serious???

    "Faster". Uh-huh. That's sort of like saying that nuclear power is clean.

    Franklin said haste makes waste. Programming is proof of that. Good code is a joy forever. Junk bonds earned their name.

    --

    "You must try to forget all you have learned. You must begin to dream." -- Sherwood Anderson

  100. Considering the current status of my group... by Mycroft_514 · · Score: 1

    Since we are down 3 bodies in the total DBA group right now, and I am trying to handle the job of what was 3 DBAs while we hire new ones, then what do you think?

    Besides, I have seen the developers working on it. It isn't saving them any time, and the software is no better than without rapid development.

    Net loss, you better believe it.

  101. Re:Known knows, known unknows, and unknown unknown by GalacticCentral · · Score: 1

    How do you know you are building in quality? How do you know your unit tests are really covering real customer situations? What is the motivation for your average programmer to do any of this? Why put in the effort if management doesn't know the difference? BTW - I agree with all your points, if we agree on what market you are in. But - I seriously doubt that any programmer knows more about what the market needs, than any reasonably competent manager - if that isn't an oxymoron. I *have* worked with one or two reasonable managers in 35 years of doing this. Hell, I used to be one. At some point, you *have* to drink at least a tad of the kool-aid, from *someone*, just to stay sane and believe that you are contributing. However, if your goal is to satisfy *yourself*, then all bets are off. In the world of business, that's absolutely the wrong goal.

  102. Mediocre programmers make mediocre software by Anonymous Coward · · Score: 0

    Mediocre programmers use UML and design to look productive and to have a reason to exist.

    Mediocre companies made of mediocre employees pays thousands of dollars for advanced design tools but the code will suck eventually because the programmers suck and there will be bugs and security flaws and a bunch of whiners pointing fingers at each other for their own mistakes. In an attempt to fix these flaws they will undo all their design and resort to spaghetti code.

  103. Re:Known knows, known unknows, and unknown unknown by bADlOGIN · · Score: 1

    Disclaimer: I am an agile fanboy/advocate and I do XP. My team follows all the major controversal practices (pair programming, Test Driven developent, continuous integration, short iterations). The motivation for the average programmer is two-fold: test coverage builds confidance in both you and your code base, and spending time writing tests to think about both what you're doing an how you do it makes you become a "better than average" programmer. You know you're building in quality when you go to change something and you predict where tests will break (and they do). You know if you're missing quality when you find a bug, write a test that fails (which describes what the code should NOT do) and then you fix it, thus raising your quality. As for covering real customer situations, unfortunatly there's only one way to address it: you MUST talk to them directly! No matter what SDLC/CMM/Agile/ProcessD'Jour you follow, you won't ship jack that works untill that happens. There's a joke that the next hot new Agile methodology will be XTTAFC (eXtreme Talking To A F*%king Customer). I'd love to see it start to catch on...

    My sales pitch goes like this: XP and agile methods are no Silver bullet, but they are a nice collection of wolfsbane, garlic, holly water & crucifixes;) You're not going to kill the monster, but you're much better equipt to make sure you don't get dragged away...

    --
    *** Sigs are a stupid waste of bandwidth.
  104. Autoprogramming is dangerous by i_ate_god · · Score: 1

    Because code should be 90% planning, 10% work.

    --
    I'm god, but it's a bit of a drag really...
  105. Re: Moving to Management by ThumpSlice · · Score: 1

    Moving into management to reduce the number of inept managers DOES work. I did it a few years ago, and I haven't looked back.

    Tis a far, far better thing I do . . . .

    --
    -- If you're posting to be funny, and your sig is funnier . . . .
  106. Ruby on Rails - TCO & Rapid Development by deepvertical · · Score: 1

    I agree that TCO is more important than just rapid development. Its too early in Ruby on Rails for me to say based on experience if ROR will actually lower TCO. However, based on the development we've done so far, here's why we think it likely will: 1. We have a simpler relationship between the front & back end due to Active Record, so this should save time in adding or deleting database fields. 2. The total amount of code is about 1/10th what we had in .NET and its very easy to read, which should cut the learning curve of new developers who have to maintain the project over time. 3. The "Ruby on Rails" framework itself forces structure and makes it a bit harder for each developer to create an idiosyncratic piece of code, that no other developer is likely to understand. 4. The Ruby on Rails community seems to be a high proportion of very high end programmers who document many component solutions to common coding issues in a really deatailed way that has made it very easy to Google these solutions and incorporate it into our code. It seems to be another level of "Open Source" mentality beyond what we've seen in other open source platforms. The quality of the open source components so far has been consistantly high. The self documenting feature in Ruby on Rails also should lower TCO. -Paul Levy www.deepvertical.com

  107. Fast development is new by user2048 · · Score: 1
    The emphasis on fast development is a recent... development.

    In the era just before the current one, the accepted wisdom was to spend lots of time on requirements, design, code, and test in order to save lots and lots of money on maintenance. But since development took so long, many projects ran out of money before producing any software. And those that did produce SW didn't provide what the customer really wanted.

    So some of the gurus of the SW world decided it would be better to develop quickly and at least get something done, and get some feedback from the customer before spending too much time and money.

    Maybe the pendulum will swing the other way now.

  108. Its all about agility by zachmagaw · · Score: 0

    I think the reason we are seeing these quick delivery of applications is not for first mover advantage but more... people do not know how other people are going to react to the software they have built... the feedback given once an application is live is much more important than being first advantage... think about google... think about netscape... think about msft... they all release code that is hard to maintain... that is riddled with holes... because there is no way to really assess the success or failures of a product until it is in front of the users... this feedback then gives you the next steps on what you will need to build/fix/rewrite etc... so the rapid development abilities are important because they give us a way to capture the requirements of an application...

  109. actually they do by sentientbrendan · · Score: 1

    >A complex software project doesn't compare well to a bridge. It's more like a city. Nobody goes and says
    >"Let's build a city!", lays out plans, prototypes and discusses what business go where.

    Yes, actually, they do. If they didn't, cities would be unliviable shitholes, where it would be impossible to get from point A to point B, or to hook up power and water, etc. Sometimes people even tear down large sections of a city, once they've gotten out of control and don't fit into a coherent design.

    What you are describing sounds more like a refugee camp than a city.

    Now, it doesn't make sense to document and plan around things you don't know, but all kinds of engineers from software developers to civic engineers must plan around the knowns and create a framework that the unknowns can be made to fit within.

    If your software will need to be expanded in the future in ways you can't predict, that's not an excuse for writing throwaway software now. If possible, you must design your software so that it is flexible enough to be reused in new contexts. You must take care to keep the parts loosely coupled, so that if some parts may be redesigned, the remaining parts can be left the same and reused.