Slashdot Mirror


Practices of an Agile Developer

Cory Foy writes ""Whatever you do, don't touch that module of code. The guy who wrote it is no longer here, and no one knows how it works." In Practices of an Agile Developer, Venkat Subramaniam and Andy Hunt put that quote as an example of something we are all afraid to hear, but probably have in our careers. They then go on to list a collection of practices which can keep you from hearing, or worse, saying that phrase. How do they do?" Read the rest of Cory's review for the answer. Practices of an Agile Developer author Venkat Subramaniam and Andy Hunt pages 184 publisher Pragmatic Programmers rating Buy reviewer Cory Foy ISBN 0-9745140-8-X summary A book to become a better developer (even without the agile part)

I was excited when I received this book. Having gotten the chance to meet and talk with both Venkat and Andy, I knew they were passionate about getting developers to understand how to deliver value to the customers. Both are proponents of Agile development in one form or another (XP, Scrum, Crystal etc). But rather than try to sell you on one of the methodologies, they laid out seven goals: Beginning Agility, Feeding Agility, Delivering What Users Want, Agile Feedback, Agile Coding, Agile Debugging, and Agile Collaboration

In the first, Beginning Agility, they lay out the basics of becoming an Agile developer. Things like Working for Outcome (in other words, don't blame people for bugs, find out how to fix them and fix the process that caused them) and Criticize Ideas, Not People. Or avoiding the pitfalls of making quick hacks without trying to understand why the hack was necessary (Quick Fixes Become Quicksand). They finish up the chapter with a key word I personally feel is absolutely necessary in software development — courage. They put this in the context of Damn the Torpedoes, Go Ahead. In other words, if the code you are working on is stinky, and you'd like to throw it away, don't be afraid to bring that up. Or if code you are in the middle of building suddenly becomes the wrong direction, stand up and explain that (being sure that in both circumstances you have alternatives for getting it on the right track).

The second chapter, Feeding Agility, discusses ways to keep the flow going while being Agile. Things like Keeping Up With Change remind us to keep our skills sharp and honed. Invest in your Team shows that if you don't bother to spread your knowledge, they'll be unlikely to spread theirs with you, and if the goal is to deliver the best product we can to our customers, that just seems counterintuitive. Of course, it is just as important to Know When to Unlearn. Sure, that ASP solution you've had for 10 years works Ok, but that shouldn't stop you from exploring other new technologies. When you don't understand something, you should Question Until You Understand and finally Feel the Rhythm that Agile brings.

Now comes the contentious part. If our goal really is to deliver the most value to our customers that we can, then it makes sense that they should be able to drive the process. In Delivering What Users Want we hit some turbulent waters with topics like Let Customers Make Decisions, Let Design Guide, Not Dictate, and Fixed Prices are Broken Promises. But, to me, this is one of the most important chapters, and they do a good job of explaining how to accomplish all that with things like Getting Frequent Feedback, Automating Deployment Early, Integrate Early, Integrate Often, and Keep It Releasable. In addition, the use of Short Iterations and Releasing in Increments helps keep the flow going and communication with the customer high.

In order to keep up with the high level of customer communication (and confidence), you are going to need assurances your system is working properly. In Agile Feedback, Andy and Venkat discusses ways to get feedback in ways other than from your customer. At this point, if you've been on traditional projects, you are probably thinking the only way you could do this is with Angels on Your Shoulders, which they explain how to get with a safety net of automated unit tests. To really get a good sense of how to keep the design clean, they use techniques such as Use It Before You Build It and running it on a build machine other than your own since Different Makes a Difference. Finally, to understand how you are really doing, you have to Measure Real Progress which you can do through Automating Acceptance Testing (using something like FitNesse). Finally, you have to Listen To your Users. Similar to the way that you should treat compiler warnings as errors, customer complaints are a sign that something is wrong — especially if it is a high number of customers experiencing the problem.

Now that you are Agile with your customer, the authors begin to target the specific code you are writing in Agile Coding. This is a list of some key tenants of good development, such as Programming Intently and Expressively and Communicating in Code (and not chiefly through comments, either!). But there are some practices that are harder, but just as important like Keep It Simple, Actively Evaluate Trade-Offs and Code in Increments.

No matter how hard we try, though, defects still creep in. Or, we don't get the chance to work with pretty Greenfield code, but are dropped in the middle of a big ball of mud. How do we get out? In Agile Debugging, Andy and Venkat cover some great techniques including Warnings Are Really Errors (mentioned above), Report All Exceptions, and Provide Useful Error Messages.

But one of the techniques was something I had not done before, and I thought was excellent — a Solutions Log (also called a Daylog). In other words, when you come across a problem, document it, and when you solve it, document it. No doubt, you'll come across that problem again, and when you do you'll be glad to be able to go back and figure out how you solved it — especially if you don't have the code you fixed it in the first time. (I have a tendency to record anything I come across that I know I will see again on my blog, and I tell you that typing a question into Google and the first result being your own website is the perfect way to make you feel like a total moron).

The final section, Agile Collaboration, is my idea of a dream team. First, you have to Schedule Regular Face Time to talk about what is going on in the project — especially if you all are working on the same code base! You have to be able to practice Collective Code Ownership (meaning anyone should have the knowledge to change another part of the system), and also means that Architects Should Write Code. To help grow the team, you can Be A Mentor, but to do it effectively you have to Allow People To Figure It Out. Some final practices are around respecting your team by Sharing Code Only When It's Ready, being available to Review Code, and Keeping Others Informed about what you've learned.

I enjoyed the layout of the chapters too. Each one starts with a "devil" which often times was saying something I've heard on one team or another. It finishes with an "angel", and a section of what it feels like to be doing the practice. Andy and Venkat also pepper the text with plenty of real world situations that reinforce just how bad software development can be.

In summary, if you want to be a better developer, but think Agile is a misused buzz word, go to your local bookstore, put a small piece of masking tape over the word "Agile" in the title, and buy this book. You won't regret it.

You can purchase Practices of an Agile Developer from bn.com. Slashdot welcomes readers' book reviews -- to see your own review here, read the book review guidelines, then visit the submission page.

172 comments

  1. Agile? by Anonymous Coward · · Score: 0

    I, like most software engineers I know, are most assuredly not agile. Lumbering, bloated, super-sized or fat perhaps, but not agile.

  2. Update on the link by Anonymous Coward · · Score: 3, Informative

    The review here inexplicably links to B & N, who offer the book at a fairly high price compared to Amazon.

    1. Re:Update on the link by Diss+Champ · · Score: 1

      Slashdot always links to B they get money that way. It's good check around whenever looking for a book- they're just telling you one place that has it, not where you have to get it.

    2. Re:Update on the link by MyNymWasTaken · · Score: 5, Informative

      Say hello to my little friend.

      Price Comparison Table

      Buy.com has it for $2 cheaper than Amazon.

  3. Code modules start with great intentions by LiquidCoooled · · Score: 5, Insightful

    Then real life gets in the way and your first gen mock up becomes live code (after the boss sees it - "but its working, why do you need to rewrite it...") and you curse yourself every time you open that code.
    We have all got our monsters.

    --
    liqbase :: faster than paper
    1. Re:Code modules start with great intentions by turbidostato · · Score: 2, Interesting

      "Then real life gets in the way and your first gen mock up becomes live code (after the boss sees it - "but its working, why do you need to rewrite it...") and you curse yourself every time you open that code."

      Who wrote the code? You!

      You can be sure *you* are the one to blame, not your boss.

      If you are working on a mockup GUI, be sure no functionallity is within the demo.

      If you are working on a mockup funtional unit, be sure is terrifying ugly so no PHB will think it's ready.

      When you are programming, as a general matter, first comes the comments, second the bound tests, third the functionality, and last (if needed) the API or the interface.

      Not only you won't have to pass through the "compile? it's production, then", but your code quality will enhance almost without you noting.

    2. Re:Code modules start with great intentions by LiquidCoooled · · Score: 1

      I don't even go near a computer whilst developing - pencil and paper is best.

      If its something I am testing and playing with in a side project I get time to craft it into a final piece and this works nicely most of the time.
      The code I am talking about is just a tiny fraction of the entire system and I've cursed myself from the moment I opened my big gob (it was just one alternative export routine) and gave a quick demo (I was expecting dev time to move it into the real project properly).

      --
      liqbase :: faster than paper
    3. Re:Code modules start with great intentions by EnderWiggnz · · Score: 4, Interesting

      Wow, just wow.

      API's first, always. Everything else is easy to change, but if you eff up the API's, you are in a world of shit when they have to change.

      --
      ... hi bingo ...
    4. Re:Code modules start with great intentions by Dunbal · · Score: 4, Funny

      I don't even go near a computer whilst developing - pencil and paper is best.

            (pulls up another pillow and offers a seat under the tree, on a hill overlooking the valley)

            (rolls up a "special cigarette")

            Man, I'm telling you. Paper and shit is all good. But, you've got to get real mellow like, and think about the problem (takes a drag on the "cigarette"). Yeah man. Mellow, and stuff. Like - what is the program for. What do I want it to do, an shit. And then after a while you can see it all, algorithms, subroutines, data structures, bounds checks. And THEN you get the pencil and paper - here, want some? (cue Indian sitar music)

      --
      Seven puppies were harmed during the making of this post.
    5. Re:Code modules start with great intentions by cmorriss · · Score: 5, Funny

      Pencil and paper?! Bah! Why get bogged down with those new age mental encumbrances.

      When I get an assignment, I immediately pack my bags for a retreat high atop the canopy in the Amazon. I hunt for food and use the blood of my kill to jot down the design of my project on the backs of baby turtle shells, each representing a piece of functionality. Then I let them loose on the ground and follow them for days. Those that live through the ordeal will have a hollowed place in my design.

      --
      10 minutes working on a sig. What a waste.
    6. Re:Code modules start with great intentions by Anonymous Coward · · Score: 1, Insightful

      Do it right first time around. Writing good code doesn't take more effort than bad ones. In the long run, you save time.

    7. Re:Code modules start with great intentions by LiquidCoooled · · Score: 1

      When painting a picture, a pencil sketch can give you an idea of the balance without wasting time.
      If you start with oils and change your mind part way through it becomes a lot more troublesome to modify.

      Coding is the same - sometimes you just want to see something working to test the scope of a plan.
      If you produce production code first time everytime then congratulations to you, personally if its something new it will go through a number of rough sketches.

      --
      liqbase :: faster than paper
    8. Re:Code modules start with great intentions by ShieldW0lf · · Score: 5, Insightful

      Good reusable code is empowering. Make them aware of it by giving that power to them. Example:

      Just last week I got asked to put some quick hacks in one of my clients sites to allow for some more discrete rights management for their client-facing site because they had one large client ask for it.

      I could have written an extra page that those clients get redirected to, some dangling crud in the database to support it and maintain it in an ever growing parallel with the rest of the system, or some other ugly hack that leads to unmaintainable code. That was specifically what they asked me to do.

      Instead I proposed that I extend the internal rights management used for employees to handle the client side of things, which was quite a bit more work, and a fair bit more expensive, but "Oh by the way, if we do it this way, I can trivially exploit this change to allow you to also discretely control rights for all this other functionality your clients are exposed to, and allow you to do it on a client by client basis in the future without needing to pay me to change the code."

      Don't just tell people that in some abstract fashion your "good coding techniques" are superior to the crufty crud that seems to work fine. Think of all the things that become trivial for you to deliver because of those good coding techniques, and make them part of the package.

      In other words, don't tell them you can take 5 days to deliver a "good" implementation that delivers the same functionality as working 2 days to deliver a "cruddy" implementation.

      Instead, tell them you can take 7 days to deliver a "good" implementation, and it will include all this extra functionality that they weren't asking for but what the hell, it's good value and it's the right way to do things too, so why not.

      If you can't find some way or another to make doing it the "right" way pay extra dividends that users can appreciate, maybe it's not really the right way...

      --
      -1 Uncomfortable Truth
    9. Re:Code modules start with great intentions by Anonymous Coward · · Score: 1, Informative

      The mock up code is supposed to become live code, you refactor constantly as you go. If you don't spend a significant amount of your time refactoring then A) you are not doing anything remotely agile and B) it's entirely your fault.

      That's the neat thing about agile, you can implements pieces of it at the team level--pulling the responsibility for certain things down a few rungs. Your refactoring time isn't scheduled separately but becomes part of your standard quoted times. Generally this should also improve your quoted time because it's much easier to work on fully factored code.

      It's not in any way lying, cheating or being sneaky--it is, in fact, just programming well. If you are not constantly refactoring your code, talking to your co-workers and interacting with customers (at least a marketing rep) whenever you have the chance, then you're really not much of a programmer.

    10. Re:Code modules start with great intentions by computational+super · · Score: 4, Funny
      When you are programming, as a general matter, first comes the comments, second the bound tests,

      third the job search after you get fired for "wasting so much time" and not being "agile enough to meet the business needs by just getting it done".

      --
      Proud neuron in the Slashdot hivemind since 2002.
    11. Re:Code modules start with great intentions by Bamafan77 · · Score: 4, Funny
      I hunt for food and use the blood of my kill to jot down the design of my project on the backs of baby turtle shells, each representing a piece of functionality. Then I let them loose on the ground and follow them for days. Those that live through the ordeal will have a hollowed place in my design.
      I think you misunderstood the chapter on "shell programming". See this is what happens when you bring these VB6-ers over to the Linux world. :)
    12. Re:Code modules start with great intentions by umghhh · · Score: 1

      Yes indeed - I just had a discussion about such crap today. I told project manager that this prototype stinks and he told me that they know and they requested from the responsible subcontractor to design things in a proper way. Sa we are all happy and hope fort he best. As always.

      But coming to TFA - what good practices have anything to do with agile programing or any other fashionable piece of crap that some 'gurus' try to sell us for big bucks? Keeping your senses and brains sharp, listening to customer as well as designers and testers etc - what is new here? Why should I pay for a book that brings nothing that common sense wouldn't tell you in the first place (if you had it available and were ready to use it OC)?

      Maybe it is good to repeat it for the slaves of fashion on managment floor or for newbies but I doubt the former understand and the later care anyway. The project manager I talked with today understood what I said. Did he change anything - no 'cause he could not, as the decisions were made elsewhere and subcontractor is doing things according to its budget and understanding of our requriements which are written (Oh gosh) in english i.e. he does what he wants and how he wants.

      Life is a tragedy and a comedy - whether you cry or laugh is your choice and just about the only one you can make.

    13. Re:Code modules start with great intentions by hotdiggitydawg · · Score: 1
      If you can't find some way or another to make doing it the "right" way pay extra dividends that users can appreciate, maybe it's not really the right way...

      Sometimes the "cruddy" implementation is all they need. Why should they lose extra time and money to functionality they don't need? To borrow from the previous buzzphrase (Extreme Programming), once the unit test is green its good to go.

      Really it depends on the client and the situation. Sometimes (as you suggest) quality, reusability and maintainability are more important than minimising time and cost. But sometimes delivering a predetermined standard of functionality/performance for the minimum cost, or in the shortest time, is more preferable. I've said it before and I'll say it again... Good, Fast, Cheap: pick two.
    14. Re:Code modules start with great intentions by Merusdraconis · · Score: 1

      "If you don't spend a significant amount of your time refactoring then A) you are not doing anything remotely agile and B) it's entirely your fault." "It's not in any way lying, cheating or being sneaky--it is, in fact, just programming well. If you are not constantly refactoring your code... then you're really not much of a programmer." Correct me if I'm out of line here, but what you appear to be saying is that you're a good programmer if you keep rewriting your code instead of getting it right the first time. Is that the case? Although you're correct in that you need to communicate with your team and the people who pay your company the moneys to do your job well.

    15. Re:Code modules start with great intentions by chromatic · · Score: 1
      Correct me if I'm out of line here, but what you appear to be saying is that you're a good programmer if you keep rewriting your code instead of getting it right the first time. Is that the case?

      No. That's not what refactoring is.

      I suppose that if you knew exactly what you had to build and could design it completely before you ever started coding and you never had to change any part of the design, ever, you wouldn't need to refactor. I've never worked on a project like that, however--at least not one longer than about ten lines of code.

      Refactoring is the disciplined and organized process of improving the design of code, especially to remove duplication and to simplify the design. Perhaps the easiest way to understand it is to imagine that you add a feature to a program and then realize that the code you just added is remarkably similar to another piece of code you already had. You could leave them both there, or you could refactor both pieces of code into a single parameterized representation. The behavior of the system remains the same, but you've generalized something that needed generalization and removed duplication or near-duplication.

      Again, if you can design the whole system completely in advance and never change the design at all, you can probably get away without refactoring.

    16. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      API's first, always. Everything else is easy to change, but if you eff up the API's, you are in a world of shit when they have to change.

            Doesn't this "constantly refactor" stuff constantly change API's?

        rd

    17. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      Then I let them loose on the ground and follow them for days.

            beats card role playing.

        rd

    18. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      ...it is, in fact, just programming well. If you are not constantly refactoring your code, talking to your co-workers and interacting with customers (at least a marketing rep) whenever you have the chance, then you're really not much of a programmer.

            Programming well would be programming to a stable set of API's. You can add supersets and subsets to them, but if you are constantly refactoring, you are constantly changing the API's, which means you've moved something and now some routine needs a parm and all the API parms above it to start carrying it.

            If you're passing object pointers around, then routines just get what they need. "Constantly refactoring" sounds like some kind of drug induced mantra.

        rd

    19. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      Perhaps the easiest way to understand it is to imagine that you add a feature to a program and then realize that the code you just added is remarkably similar to another piece of code you already had. You could leave them both there, or you could refactor both pieces of code into a single parameterized representation.

            Or you could be less jumpy and agile and use the code that's already there to start with.

        rd

    20. Re:Code modules start with great intentions by stanmann · · Score: 1

      Sketches are great, but if they're production useable, even if they aren't production ready, they'll make it to production.

      --
      Food not Bombs is a nice platitude but it breaks down when you notice that the Bombees are usually well fed
    21. Re:Code modules start with great intentions by chromatic · · Score: 1
      Or you could be less jumpy and agile and use the code that's already there to start with.

      Oh, of course. Sometimes I do that. Other times I don't, because it takes me a couple of refactorings to see that two different pieces of codes are a refactoring or two away from being a bigger refactoring themselves.

    22. Re:Code modules start with great intentions by Anonymous Coward · · Score: 0
      Don't just tell people that in some abstract fashion your "good coding techniques" are superior to the crufty crud that seems to work fine. Think of all the things that become trivial for you to deliver because of those good coding techniques, and make them part of the package.
      It gets tough when the crufty crud is the most economical, over all, though. You must acknowledge that there are cases where doing things the right way, as in "good coding techniques", isn't cost justified in the short-, medium-, or long-term. Probably the best solution there is to either hold your nose and do what needs to be done or find a more appealing project.
      If you can't find some way or another to make doing it the "right" way pay extra dividends that users can appreciate, maybe it's not really the right way...
      Okay, I guess you do acknowledge that the "right" way isn't always following "good coding techniques", after all. Sometimes, the mess that's already been created precludes anything but an ugly solution. For example, if you need to fix a problem in a poorly architected application that's slated to be replaced next quarter, a major re-engineering effort that would make future fixes cheaper probably isn't justified, even though it might in theory pay for itself in one year if the application were staying around.
    23. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      Oh, of course. Sometimes I do that. Other times I don't, because it takes me a couple of refactorings to see that two different pieces of codes are a refactoring or two away from being a bigger refactoring themselves.

            I agree with that. What that is for most of us waterfall programmers is often a tough decision as to whether to isolate some existing code and make it more general purpose. If all under new development, not a problem. If the existing code is in production, it has major impact on the business in retesting and revalidating existing production software. Out of the question for a major production app in large companies.

            The happy medium is to leverage the code in a new module that the *next* similar need can call upon, but leave the existing production alone until such time as it might need a major modification and needs revalidated anyway.

            The only thing that can be constantly refactored is that portion under new development, and too much of that and you don't have a deliverable, you have churn and constantly refactored project deadlines.

        rd

    24. Re:Code modules start with great intentions by eyeye · · Score: 1

      It shouldn't - refactoring is making the internal structure better without changing the external API.

      There are of course different levels of "internal" and if the only client of a class is another class under your control then it is fine to refactor methods that are involved in it's contract.

      All this is with the rider that you need unit tests to ensure the code continues to meet it's contract.

      --
      Bush and Blair ate my sig!
    25. Re:Code modules start with great intentions by eyeye · · Score: 1

      It might be the shortest time *now* but later when you have to add other functionality on top of your hack then you are already on the slippery slope to a ball of spaghetti - and over time your code will take longer and longer to bugfix and add functionality to. Rushing through software dev is usually a false economy.

      I work with a couple of people who will code some functionality as quickly as they can so they can brag about how it only took them a couple of hours. Over the next weeks and months you find that it has bugs, misses functionality, and is a bitch to extend. At the other end of the scale might be someone who takes a couple of days but you never have to revisit that code and when you need to alter it or add something you find it reasonably easy to do.

      --
      Bush and Blair ate my sig!
    26. Re:Code modules start with great intentions by ralphdaugherty · · Score: 1

      It shouldn't - refactoring is making the internal structure better without changing the external API.

            I would contend that nothing significant changes internally to refactor unless the API changes.

        rd

    27. Re:Code modules start with great intentions by hotdiggitydawg · · Score: 1

      Again, it depends on the client and the situation. If they explicitly specify in the development contract they want it done the cheapest and fastest way possible, and you know there is no guarantee of you getting the maintenance contract afterwards because that goes out to a separate tender, well that's the way it's gotta be. I agree with you - it is a false economy as far as the client is concerned, and they should have all the information they need to make an informed decision, but ultimately it is theirs to make.

      Of course, it makes my skin crawl too, and there's nothing stopping you turning down such a contract on principle. But if you don't build it some other code-monkey will.

    28. Re:Code modules start with great intentions by Murgalon · · Score: 1

      Overloads man, Overloads! :-)

    29. Re:Code modules start with great intentions by nih · · Score: 1

      ok, how far have you got with that urgent stock control application? i've just finished writing the comments so does it work? just look at those comments, it will be so easy to read when i come back to it 6 months after finishing so does it work? next i have to add some bounds tests so it doesn't work yet? once they are done then comes the functionality can you hear me? an last of all the API, and what an API it will be your fired do you want me to add more comments?

      --
      I'm a rabbit startled by the headlights of life :(
    30. Re:Code modules start with great intentions by GWBasic · · Score: 1
      In other words, don't tell them you can take 5 days to deliver a "good" implementation that delivers the same functionality as working 2 days to deliver a "cruddy" implementation.

      But sometimes you just don't have the extra 3 days. For example, I have very strict release cycles, yet what goes into a release is negotiable.

      For example, I currently am developing a class where the database takes about 0.25 seconds to return the corresponding row. For 99% of my program, this is fast enough because I'm only loading 1 row at a time.

      Recently, I had a scenario where I needed to return many rows quickly for a very simple report. As we're getting close to a release, I really don't have time to re-engineer this class to load quickly. Instead, I put in a crufty "Fast" version of the class for this single use case. The "Fast" class does not impact any of the existing code, which is very close to release.

      Later, I might decide that we want the regular version of the class to load quickly. This is ok, but as it does impact many parts of the system, I will save the effort for the next version so I don't blow my release cycle. Or, I might decide that I like having a "Fast" class, as it keeps ugly cruft out of the other class.

      My point is that sometimes you really don't have time to Do It The Right Way; but you can isolate the cruft enough so that it doesn't impact the good code.

    31. Re:Code modules start with great intentions by shmlco · · Score: 1

      "When painting a picture, a pencil sketch can give you an idea of the balance without wasting time. If you start with oils and change your mind part way through it becomes a lot more troublesome to modify."

      Next thing you know you'll be telling me not to do the NYT crossword puzzle in ink...

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    32. Re:Code modules start with great intentions by turbidostato · · Score: 1

      "ok, how far have you got with that urgent stock control application?"

      I'm either a project manager, in which case I don't have to answer such kind of questions, or I'm a project developer, in which case the productivity tools will show how far I got (number of code lines, diff/patches, new files, milestones achieved...) and I don't have to answer such questions either. If forced to answer such a question, my answer is usually "within timeframe" (if it's such the case, of course). And if I need to say "this feature will be in ten days, not in seven as you thought" to my boss, so I do.

      "do you want me to add more comments?"

      I'm really sorry about you. It seems you weren't lucky about your project managers *nor* you had the guts to look for them elsewere.

      If it takes a week, it takes a week, no matter how do you order it (within bounds), but doing things in the proper order is your best safeward against momentary crazyness from your bosses (as in the case I firstly was answering to). If your boss is crazy on a full-time basis, it's time to test different waters because no matter what, you'll be spoiled (so going first for half-assed functionality isn't going to work for you in the long run eiter). Of course, in order to be chooser instead of chosen, you better are high on your job abilities.

    33. Re:Code modules start with great intentions by Anonymous Coward · · Score: 0

      I had a developer working under me who sent me some PHP. When I implemented it into the project it had a small, rather insignificant bug and I asked him why he hadn't debugged it. He said, cheerily, that he didn't even have a PHP parser and had written it directly into the body of the email...

  4. You are only truly an agile developer by Timesprout · · Score: 2, Funny

    when you can limbo dance all the way to the office.

    --
    Do not try to read the dupe, thats impossible. Instead, only try to realize the truth
    What truth?
    There is no dupe
    1. Re:You are only truly an agile developer by XiaoPing · · Score: 1

      That's not Agile! That's suppleness!

      You're only truly an Agile developer if you can get into the office whilst nimbly avoiding Defect Story Cards (which may be on fire) and Changing Requirements Stories (that could be mined) hurled at you by angry testers and HCI people without getting blown up/having to do more work....

  5. Courage ... by Salvance · · Score: 2, Interesting

    This was the first book review on here that I REALLY enjoyed. Very informative. I liked the idea of developers showing courage to fight for the right path, although I must add that this is best done without getting emotional or fired up. Courage is great when it is modest and controlled, otherwise you'll just be relegated to an even darker corner and reassigned to mainframe Cobol development.

    --
    Crack - Free with every butt and set of boobs
    1. Re:Courage ... by obender · · Score: 1
      After reading your comment I realized I didn't even read the review. And your comment caught my eye only because it's next to a +Funny one.

      Now I am facing this dilemma: should I scroll up and read the review? That's like three maybe four page-ups.

      Nah, I have to set a limit. Next time I'll be reading the articles if I go on this path.

  6. My methodology is mediocrity by Anonymous Coward · · Score: 3, Funny

    So instead of:

    The guy who wrote it is no longer here, and no one knows how it works.

    It goes something like this:

    The guy who wrote it is so stupid, they promoted him, and everyone knows how it works because we all were forced to completely rewrite it.

    1. Re:My methodology is mediocrity by Anonymous Coward · · Score: 0

      There's a little more to it than that. If you can't plan something in a myopic
      several day worldview, then the big big problems never get solved. I'll take a monolithic
      requirements-design-spec-implement-test cycle over Agile any day.

      I fear that Agile leads to A.D.D.

    2. Re:My methodology is mediocrity by PianoComp81 · · Score: 1
      So instead of:

      The guy who wrote it is no longer here, and no one knows how it works.

      It goes something like this:

      The guy who wrote it is so stupid, they promoted him, and everyone knows how it works because we all were forced to completely rewrite it.

      More like: The guy who wrote it is so stupid he's no longer here, and everyone knows how it works because we all were forced to completely rewrite it.

      At least that's what I've seen in my limited experience.
    3. Re:My methodology is mediocrity by Nerdfest · · Score: 1

      Try working for a large company or the government. In these cases, the original post is quite correct.

  7. Not just for codeherders anymore by neimon · · Score: 3, Interesting

    "Things like Working for Outcome (in other words, don't blame people for bugs, find out how to fix them and fix the process that caused them) and Criticize Ideas, Not People. Or avoiding the pitfalls of making quick hacks without trying to understand why the hack was necessary (Quick Fixes Become Quicksand). They finish up the chapter with a key word I personally feel is absolutely necessary in software development -- courage. They put this in the context of Damn the Torpedoes, Go Ahead. In other words, if the code you are working on is stinky, and you'd like to throw it away, don't be afraid to bring that up. Or if code you are in the middle of building suddenly becomes the wrong direction, stand up and explain that (being sure that in both circumstances you have alternatives for getting it on the right track)." I try to teach a) help desk people b) network engineers c) operators d) everyone I can ...to do these very things. It's called "giving a shit about your work and how it affects other people." Also known as "doing a good job." 'nuff said.

  8. Re:Buy? by Anonymous Coward · · Score: 0, Troll

    I'm afraid you've made it very clear that you haven't read the book and don't understand what the hype is actually about. Please refrain from "knowing" in the future unless you can back up your opinions with some credible insights.

  9. Enjoyed This Book Myself by Rhett's+Dad · · Score: 5, Informative

    I read this about two months ago, and mostly enjoyed it. I don't remember anything earth-shattering or particularly enlightening from it, but then again I had previously read some other books that probably put a damper on what this book had to teach me:

    • Pragmatic Version Control
    • Pragmatic Unit Testing
    • Pragmatic Project Automation
    • Ship It!
    • Extreme Programming Explained
    • Art of UNIX Programming
    • Practice of Programming

    Seems like most of what the Agile book had in it was for me a rehash of the three Pragmatic books. So, to me, a good book by itself, but I'd recommend the three Pragmatic books instead of you have the time for that much reading.

    --
    Let me introduce you to my very own DMCA-protected encryption key: BC 1B 64 4A 8D DE 49 E8 C3 7D CC EE 1A AD EE
    1. Re:Enjoyed This Book Myself by kfg · · Score: 1

      I'd recommend the three Pragmatic books instead of you have the time for that much reading.

      And if you don't, guess what?

      Surprise! You're a code monkey, not a programmer.

      Which is all well and good if that is the path you chose in the first place. It's a living and someone has to do the assembly line type of work.

      But if you had something else in mind when you were 16 sitting in your room at 3 A.M. thinking "Oh, wow man!" it's time to make some changes.

      KFG

  10. Re:Buy? by bryanthompson · · Score: 4, Insightful

    Okay, that's just idiotic rambling from one who obviously has no Agile experience. Agile programming means planning for things to change, as we ALL know they do. It means designing with flexibility in mind--knowing that when plans, features, behavior, etc., needs to change, you've structured the program in a way that makes it easy to do so. It doesn't mean 'not having a plan' or free-form programming with no structure discipline, but it sure is easy to write off the entire idea by portraying it so :rolls eyes:

  11. Audio Interview With Andy Hunt About The Book by ArkieNerd · · Score: 2, Informative

    There is a pretty good audio interview with Andy Hunt about the book at http://perlcast.com/2006/07/12/practices-of-an-agi le-developer/.

  12. Feature design documents are... by Assmasher · · Score: 0

    ...all you actually need. Good code comments are nice, and explicit variable naming (instead of lazy naming) are pluses as well.

    "I have to implement feature , the requirements doc (if any) can be found at: A synopsis of the feature is: In order to satisfy those needs architecturally, I've decided to implement like because we want to avoid using because it prevents us from in the future..."

    These docs are usually a page in a half for a complicated feature that has a potentially confusing architectural design.

    The problem isn't in what you do up front or at the end, it is making a developer keep a document up to date. We're incredibly hard working about some aspects of our profession and ridiculously lazy about others ;). Every feature that is implemented at my current company results in the developer(s) producing an informal design doc that is used by the architect (myself) to look out for gotchas/caveats/black-holes and offer helpful suggestions. This usually takes about 5-10 minutes in my office. After check-in and assigning the feature as 'complete' to QA for starting the test plan, there's another 5-10 minute review using the same document and asking "So what changed? What did we forget the first time? Ok, add that to the doc, send me a copy and I'll file it..." This way if, God forbid, a dev gets hit by a truck or just up and leaves we don't have to worry about having no idea what they've done and/or what they are doing at this time. Just one of many different ways to solve this problem that doesn't require exotic or strange practices.

    --
    Loading...
    1. Re:Feature design documents are... by Anonymous Coward · · Score: 0

      Is everything done under the threat of a thorough mashing of ones ass? Sorry, couldn't stop myself.

  13. Worth a read by Taagehornet · · Score: 5, Informative

    Martin Fowler has written a few words on the subject Is Design Dead?

    Highly recommended, grab a cup of coffee ...or two ;)

    1. Re:Worth a read by Anonymous Coward · · Score: 0

      He writes books as well as working on a fruit and veg stall?

  14. what a coincidence by hitchhacker · · Score: 1


    I'm about to finish Venkat's semester long class on software engineering at the University of Houston. Actually I have a team demo in a few hours! (what am I doing on Slashdot.. hehe)

    I've been very impressed with Venkat's teaching and am convinced that Agile development models are beneficial for commercial application development. The main advantages are its adaptive planning and methods for predicting how long development is going to take mixed with customer communication.

    That said, I'm not yet convinced that it is appropriate for OSS development. He's giving a talk next week about just that, so maybe my opinion might change.

    -metric

    1. Re:what a coincidence by zurmagus · · Score: 1

      I'm in Venkat's Software Enginnering class also. When I read the opening quote I immediately recalled him saying that in one of the lectures so I just knew the name Venkat would follow it.

      He is an excellent professor (but sadly he is only teaching for one more semester) and his viewpoints on software development are always insightful. Anyone who has an opportunity to take classes from him or go to a development conference where he will be speaking should definately take advantage of it.

      Everyone can learn something about software development from Venkat, regardless of your thoughts on agile methods.

    2. Re:what a coincidence by hitchhacker · · Score: 0, Redundant


      neat.. good luck on your demo, btw. :)

      -metric

    3. Re:what a coincidence by Anonymous Coward · · Score: 0

      I'll second Venkat as an excellent speaker. His talks at the NoFluffJustStuff.com weekends are always good.

    4. Re:what a coincidence by Safety+Cap · · Score: 3, Informative
      I've been very impressed with Venkat's teaching...

      Yes, he's very enthusiastic about whatever subject he's teaching. Too bad he took so much time out of class to travel and lecture at other companies, though.

      ...and am convinced that Agile development models are beneficial for commercial application development.
      You might want to read a dissenting opinion. Having been on both Agile and non-Agile development projects, my own experience is that some Agile techniques are beneficial for some projects, but anyone who says that Agile is the magic pill that will ensure maximum productivity is both smoking and selling you something.
      --
      Yeah, right.
    5. Re:what a coincidence by chromatic · · Score: 1

      You might want to read a dissenting opinion on Steve Yegge's hatchet job on agile development. Having been on both agile and non-agile development projects, my experience is that it's very easy to criticize agile development if you don't know anything about it.

    6. Re:what a coincidence by ralphdaugherty · · Score: 1

      ...my experience is that it's very easy to criticize agile development if you don't know anything about it.

            It's even easier after reading a few /. posts explaining it.

        rd

    7. Re:what a coincidence by turing_m · · Score: 1

      If he smokes it, how will he have any left to sell you?

      Seriously though, I swear a lot of these fads are to the computer world as business books are to the PHB world, the computer equivalent of "Seven Habits" or "Who Moved My Cheese". Their primary value is not to make you more productive. Instead, their purpose is to give you something you enjoy that makes you feel like your current mode of procrastination is more productive than, say, playing games or reading slashdot.

      Have you read the Agile wiki? You could lose weeks in there learning all the jargon, or you could finish the job you know you really ought to be doing.

      --
      If I have seen further it is by stealing the Intellectual Property of giants.
  15. Re:Buy? by endrue · · Score: 3, Informative

    "Honestly... no structure, no planning, no discipline, nothing but planning not to have a plan."

    You have not accurately represented Agile Development, you have created a misrepresentation so that you can disregard it more easily. Either you do not know what Agile Development is or you are too lazy to honestly critique it.

    Please read the following Wikipedia entry for a more formal definition of the logical fallacy you have committed: http://en.wikipedia.org/wiki/Straw_man.

    --
    I meta-moderate because I care.
  16. You call that agile? by ShaunC · · Score: 4, Funny

    It's clear that to be an agile programmer, you simply have to Create Catchy Techniques and learn how to Capitalize On the Shift Key. I'm about ready to Pry Out my Eyeballs...

    --
    Thanks to the War on Drugs, it's easier to buy meth than it is to buy cold medicine!
    1. Re:You call that agile? by Anonymous Coward · · Score: 0

      I Fully Agree. Agile Development is all about Spouting On about Agile Development. The plan with any programming ideology is to make money on books, seminars, lectures, confrences, etc. Capitalize on Capitalism. I read the first book on XP ("eXtreme programming eXplained") and will admit that it was fun experimenting with it back in its early days. After skimming a few more books on the subject, I got bored. Methodologies are pretty boring. Its just more management and process.

  17. Yes, by ObiWanStevobi · · Score: 1

    Exactly. We have just a small team of coders doing various projects and take pride in modular development that makes it easy for us to use each others classes when we design a program. It's easy to do while in the safe haven of developers hands. Then it get implemented and all of a sudden X feature needs to be implemented and Y data needs to be stored in Z class (unknown before despite countless design meetings). Now we have a choice, Take the time to modify all these nice classes so they have the added capability and still work together nicely and are adaptable, or throw enough code at them to get your features working and data stored immediately (which happens to be when they want it after it has been released).

    You just can't think of everything before hand, and after the fact, you just may not have time to do things properly. Although it may save time in the long run, the short run is usually made far more important by users/bosses.

    1. Re:Yes, by ralphdaugherty · · Score: 1

      Then it get implemented and all of a sudden X feature needs to be implemented and Y data needs to be stored in Z class (unknown before despite countless design meetings).

            This is an excellent summary of reality. There was a thread on Vista yesterday which has major problems basically as a result of this.

            The theory sounds good, but the theorists from OO days on have yet to deliver any superior major achievement over what we used to do and most of us still do.

        rd

  18. Re:Good development practices... from an Indian?!? by Rhett's+Dad · · Score: 4, Insightful

    Can't imagine why you posted AC there, stud...

    My experience with bad code like that has been when a short-term employee was pulled in and forced to work with a short-term mentality... which actually all falls back to bad managers. When your boss instills the "throw it together NOW so it works (barely) NOW and move on to the next project NOW" mindset into the coding crew, you're pretty much guaranteed to be stuck with smelly code. Who the actual programmer is will have little to do with it.

    I will assume for your sake that your limited experience with short-term coders has mostly been around the intersection of "H-1Bs" and "contractor programmers" and therefore you generalize "Indian". One day you'll learn that it's the "short-term" part of this equation that hurts the code quality, and not the coder's non-code-related characteristics.

    --
    Let me introduce you to my very own DMCA-protected encryption key: BC 1B 64 4A 8D DE 49 E8 C3 7D CC EE 1A AD EE
  19. Re:Buy? by Anonymous Coward · · Score: 1, Insightful

    That would be the latter, actually. I am indeed to lazy to tell people what they should already know.

    I spent a couple days reading about 'Agile' methodologies. No, that's not enough time to learn everything about them, and no, I am not an expert. However, I do not believe I need to know every detail of 'Agile' to realize that it is a seriously flawed way to look at development.

    Yes, I severely oversimplified, and yes, that could be taken as a straw man if I based my own opinion on simply that or was attempting, with that statement, to argue 'Agile' fans over to My Side of the Fence. I was not, however, so I don't feel too bad about my logical issues in this particular instance.

    It's a comment on a review, not a full-fledged "Why You Should Avoid This Crap like the Plague" dissertation. I disagree with you, but don't really care enough to attempt to change your opinion. :)

  20. Re:Good development practices... from an Indian?!? by Anonymous Coward · · Score: 0

    Hang on... you're a racist? I will in no way take advice from a racist.

  21. The Pinkies, they say STOP! by mollymoo · · Score: 4, Funny

    Am I the only person who had to Stop Reading the Book Review half-way through because of Capitalisation Overload? There Are other ways to emphasise or to indicate a "phrase from the book" which are much Less Annoying Than Doing This.

    --
    Chernobyl 'not a wildlife haven' - BBC News
    1. Re:The Pinkies, they say STOP! by sammy+baby · · Score: 4, Interesting

      There Is Historical Precedent For This.

      (Unfortunately, that doesn't make it any less annoying...)

      XP, arguably the 600 pound gorilla of the "agile methodologies," was created by Kent Beck, Ward Cunningham, and Ron Jeffries. It was a direct outgrowth of their work the "Chrysler Comprehensive Compensation (C3) System," and information about their brand new methodology was publicized on a little web site Cunningham had put together.

      It just so happened that the "little web site" was the very first Wiki. One of the side effects here is that since each of the XP principles got its own page, it also got its VeryOwnNameInCamelCase. The weird capitalization of the rules is an artifact of agile methodologies' debt to the wiki format.

      Or something. I think.

    2. Re:The Pinkies, they say STOP! by ruben.gutierrez · · Score: 2, Informative

      Those are TOC sections.

    3. Re:The Pinkies, they say STOP! by antispam_ben · · Score: 1

      I always found john DVORAK's columns to be annoying, though I think in the one or two that I've read in more recent years, he may have dropped the habit of making every tenth word bold.

      --
      Tag lost or not installed.
    4. Re:The Pinkies, they say STOP! by Anml4ixoye · · Score: 3, Informative

      (Disclaimer: I'm the reviewer)

      Someone else already pointed it out, but those are the sections. Trust me, I wouldn't have written it that way if it wasn't.

  22. Re:Buy? by E++99 · · Score: 2, Insightful
    Honestly... no structure, no planning, no discipline, nothing but planning not to have a plan.

    According to the article, Agile implies "Let Design Guide, Not Dictate". That sounds a WHOLE lot different than "Don't Design". My understanding is that the idea is to have an ADAPTABLE plan. After all, an inflexible plan is a bad plan.
  23. arrrggghhhhh by mlwmohawk · · Score: 3, Insightful

    I just can't stand it. How many books and programming fads must we endure in our careers?

    "Agile" programming? ATF, sorry, but come on.

    Like all the other programming fads, there are elements of good standard practices that, if you've been writing code for any length of time, already do, but then they go on to preach their own brand of mumbo jumbo.

    Now, some PHB is going to want to push "agile" programming. Just stupid.

    OK, rant. THE CUSTOMER SHOULD NOT DRIVE DEVELOPMENT. There I've said it. The customer has no figgen clue about what development is or means.

    Short story: I was working at a company years ago, a VP of development wanted to be able to dial out and use a terminal programs on his PC from our office phone system. I asked him, point blank, tell me exactly what you need. He responded, "I just need to be able to connect to a modem and dial out." (exact words burned into my brain)

    So, we bought $20,000 worth of phone equipment that did just that, alowed a PC's modem to be plugged into a wall, and dial out.

    He came to my office and said, I can't use this system. I asked why? He said the modem banks weren't "hayes compatible." I looked at him, told him his exact words after being asked "exactly" what he needed, and he said (rather annoyed) "well, you should have known I needed "hayes compatible."

    Moral of the story: the user don't know squat about what they want, let alone are able to navigate the technical landscape.

    As engineers, we have to learn with the customer knows and apply it to the program, but do not confuse this with letting the customer drive!

    1. Re:arrrggghhhhh by chromatic · · Score: 3, Insightful
      The customer has no figgen clue about what development is or means.

      If the person paying you to write software doesn't get to tell you what the software should do, who does?

      I went to a fancy restaurant like that once. You pay $150 and get whatever the meal of the day is. Unfortunately, the main course was salmon and I'm allergic to fish, so I left. I heard it was nice, though I've never gone back.

    2. Re:arrrggghhhhh by mlwmohawk · · Score: 3, Interesting

      If the person paying you to write software doesn't get to tell you what the software should do, who does?

      The customer does not pay me to "write software" they pay me to provide a tool that helps them accomplish a task. It is a fine line, for sure, but an important one. It is up to me, and any other engineer, to understand what our customer knows and apply it to what ever we are developing.

      Letting the customer drive the product is a bad idea. Too often the customer is reluctant to see beyond their immediate needs, alter their thinking, or accept new ideas. So, while you are letting your customer do your thinking for you, some competitor that knows better, is building something better that will put you out of business.

      In my previous example, I let the customer drive the modem technology choice rather than spec it out myself, it it was a mistake. I should have known better than to have a system that was not hayes compatible, but the customer did not "require" it.

      Ultimately, the customer will be dissatisfied with anything they have a hand in producing, because it will be limited by their own immediate needs.

    3. Re:arrrggghhhhh by Ramses0 · · Score: 3, Insightful

      """He responded, "I just need to be able to connect to a modem and dial out.""""

      Engineer says: "B.S. - Be Specific", what is your app, what is the requirement, why do you need to dial out, what do you need to connect to, etc. And in any case, once the customer asks for "X", signs off on it, and it turns out they really needed "Y", it's best to get that over with as soon as possible and start working on "Y".

      The user actually knows *exactly and precisely* what they want, it's just that they have a tough time expressing it most of the time, and it's quite probable that what they want is not possible in the timeline / budget / etc. that they have allocated for that need.

      So, figure out what a customer *wants*, keep them FAR away from anything remotely technical, but make sure the technical decisions that the engineering team makes satisfy what the customer *wants*.

      --Robert

    4. Re:arrrggghhhhh by Harri · · Score: 2, Insightful

      The customer makes decisions in business terms, not in technical terms. It's your job to translate their business needs into technical needs - and to ask the right questions to be able to do so. You're the expert about the technology - but you're not the expert about their business.

    5. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      The user actually knows *exactly and precisely* what they want, it's just that they have a tough time expressing it most of the time, and it's quite probable that what they want is not possible in the timeline / budget / etc. that they have allocated for that need.

      I stongly disagree, I've been doing to stuff for a while, and let me tell you, I witnessed people resisting wordprocessors in the office because they thought they were more complicated, harder to use, etc.

      The customer who is used to using typewriters will NEVER be able to help you spec out a word processor.

      They DON'T understand what technology can do and thus can not fully understand how to apply it.

      This is a very detailed discussion, and probably not slashdotable.

    6. Re:arrrggghhhhh by chaotica1974 · · Score: 1

      I used to think like this as well, but as I've been on more and more projects, I've found that an interview with the stakeholder is typically well worth the time taken, even if they don't know what they want, you can provide options and allow them to pick. Hindsight is always 20/20 but I promise you that if you ask the tougher questions by learning the business process behind it, your job will become much easier.

    7. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      The customer makes decisions in business terms, not in technical terms. It's your job to translate their business needs into technical needs - and to ask the right questions to be able to do so. You're the expert about the technology - but you're not the expert about their business.

      A previous post reminded me about early word processing adoption.

      In the late 70s and early 80s, there was serious resistence to word processors, because people didn't want them. They saved paper, made tasks easier, allowed better formatting, etc. It took software engineers that knew better than their customers to bring this product to market, despite resistence to the idea.

      The same can be said about any "innovation." Your customers will never innovate. They will want you to make exactly what they do a little easier. They will NEVER see the problem differently, and thus innovatively, in such a way as to change the nature of what they do, and make it vastly easier.

      Think about word processors, spreadsheets, CAD, P.C. board layout, etc. These are things that would never have been born if engineers actually listened to the customers. They were made because we ignored what the customers said they wanted, but instead, learned what our customers knew, and applied what we know about software to their business. We revolutionized their businesses.

    8. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      I used to think like this as well, but as I've been on more and more projects, I've found that an interview with the stakeholder is typically well worth the time taken, even if they don't know what they want, you can provide options and allow them to pick. Hindsight is always 20/20 but I promise you that if you ask the tougher questions by learning the business process behind it, your job will become much easier.

      In my original post I say, point blank, we have to learn what the customer knows. We have to be smarter than the customer, we have to know what they know AND what we know. Only then can we really provide the service sor which we get paid.

    9. Re:arrrggghhhhh by Quintios · · Score: 1

      I'm probably going to get flamed for this, but I have to ask: Why didn't you test the system against his computer? Seemed like he was asking for a specific solution to his problem (the problem of not being able to dial out using HIS computer). Maybe I'm missing the point here, but it sounds like you never verified that the equipment you were installing worked with the existing equipment, i.e. you installed equipment that was not compatible because you never verified that it would work with the existing installation. Having a non-tech person telling you what he needs, without further extensive questioning, is pretty bad.

      --
      Anonymous Cowards are at -6...
    10. Re:arrrggghhhhh by Coryoth · · Score: 1
      Short story: I was working at a company years ago, a VP of development wanted to be able to dial out and use a terminal programs on his PC from our office phone system. I asked him, point blank, tell me exactly what you need. He responded, "I just need to be able to connect to a modem and dial out." (exact words burned into my brain)

      So, we bought $20,000 worth of phone equipment that did just that, alowed a PC's modem to be plugged into a wall, and dial out.

      He came to my office and said, I can't use this system. I asked why? He said the modem banks weren't "hayes compatible." I looked at him, told him his exact words after being asked "exactly" what he needed, and he said (rather annoyed) "well, you should have known I needed "hayes compatible."

      So your inability to elicit detailed specifications from a client means you should simply ignore the client? I'm not sure I follow. Did you really expect the guy to spell out in glittering detail all his very particular needs, many of which he may not think of on the spot, from a single direct question? You didn't think that a single sentence specification was begging to be fleshed out, went and spent $20,000 on the basis of that first pass spec, and then blame the customer?

      Yes, customers are very poor at being able to immediately tell you, in glorious detail, there precise needs leaving out absolutely nothing. That doesn't mean you ignore them, that means you actually spend time talking to them trying to develop the specification. In principle the goal of agile development is to do exactly that, and to help the customers imagination along by providing him with intermediary working models to help elicit the deeper implicit needs as early as possible. The aim is to work with the customer to help the customer actually understand what their own implicit specification is, and that means a certain amount of back and forth is required. It means asking questions like "why do you want this?" so you can determine what other requirements are driving things, or hidden in the basic request. If you had, instead of taking his first pass as the complete spec, sat down with the guy and tried to work out what he needed, perhaps providing examples and explaining what the current spec would mean for him along the way, you could have avoided spending $20,000 on a system he won't use.

      I'm beginning to think that working with customers to develop a specification is actually a suffciently hard job that it should be a specialised position - lord knows enough developers seem to have little in the way of an idea about it. Perhaps the task of interacting with the customer, and having the patience to carefully tease out of them exactly what their requirements are, then converting those requirements into a specification easily and clearly interpretable by a development team; p[erhaps that's a full time job in and of itself.
    11. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      I'm probably going to get flamed for this, but I have to ask: Why didn't you test the system against his computer? Seemed like he was asking for a specific solution to his problem (the problem of not being able to dial out using HIS computer). Maybe I'm missing the point here, but it sounds like you never verified that the equipment you were installing worked with the existing equipment, i.e. you installed equipment that was not compatible because you never verified that it would work with the existing installation. Having a non-tech person telling you what he needs, without further extensive questioning, is pretty bad.

      This was, in fact, over 20 years ago, but it is a lesson I remember.

      We did verify that it worked. We worked with the phone systemm company, tested it out, and we were able to dial out, just fine. It just didn't use ATDT commands. We were able to configure the terminal programs just fine.

    12. Re:arrrggghhhhh by Harri · · Score: 2, Interesting

      For sure, it's possible for engineers to invent things that customers wouldn't have imagined. But those innovations are still going to have to produce business value for the customers, or else the innovations are of no use (or nobody will pay for them, which is just as bad for the engineers).

      It's still possible to say to the customer "We can make exactly what you do a little easier, for $X, or we can provide you with the following extra benefits to your business for $Y - which would you like?". Ultimately, it's the customers' decision.

    13. Re:arrrggghhhhh by turgid · · Score: 2, Insightful

      Ultimately, the customer will be dissatisfied with anything they have a hand in producing, because it will be limited by their own immediate needs.

      ...and their own imagination.

      Can someone please inscribe this on a granite tablet and install it in the British Museum for all to see?

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

      You are getting to the heart of the matter, which is based on well-known prejudices. Techies are smarter than business people, and believe they could do their jobs 10x better than they could.

      Remember, the business majors were the $%^^offs who were out drinking on Thursday nights in
      college with easy courses while the engineers were busting their tails.

    15. Re:arrrggghhhhh by budgenator · · Score: 1

      "I just need to be able to connect to a modem and dial out."
      you should have asked, "Our digital PBX system isn't compatible with a computer modem, can we run a decicated phone line to your computer which will cost about $500.00 to install and $45.00 a month afterwards instead spending $20,000 on a bank of PBX modems?"
      People don't know what they want or need, they only know what they think they want or need, the hard part is first getting their wants and needs to coincide, then to get their real wants and needs and what they think they want and need to be the same. They hate telling you because if they clearly tell you what they want and you deliver it and it ain't right it's hard to blame others.

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
    16. Re:arrrggghhhhh by Anonymous Coward · · Score: 0

      Dont you guys get it? That was Martin Fowler, trying to make a case for Agile.

      Honestly, Agile sucks. What all these processes tries to do is to turn developers into replaceble corporate entities. I have yet to see a process that believes people are the key, not the process iteself.

    17. Re:arrrggghhhhh by Bertie · · Score: 1

      Well, if that's your idea of requirements capture, you deserved all the pain you got.

      Customers know what they want. But they can't express it. Your job is to make sure you both arrive at the same understanding of what the customer wants, and you get there by asking the right questions.

      Think about it - I hand you a blank piece of paper and say "draw me a picture". A lot of people have trouble with this - they don't know where to start, they don't know what they want to draw, they don't know what I'd like them to draw. Now, if I said to you "draw me a picture of a dog", away you'd go, because now the problem's nicely (but not excessively) constrained, and you've got a framework to work within. In the same way, you can't say to this guy "what exactly do you want to do?" and expect him to spit out a fully resolved requirements spec. You need to ask questions that he can give precise answers to.

      Your customer's idea of what he wants, and what he actually wants, may be two different things. You need to make sure you give him the latter (and don't confuse it with giving him what you think he wants, or what you think he needs, either).

    18. Re:arrrggghhhhh by Bertie · · Score: 1

      And nor should they. That's your job. Watch what they do, find out what works, find out what doesn't, and give them a new solution that builds on the strengths and alleviates the weaknesses of the old one. If the application of clever technology is the right way to achieve this, that's what you do. If it isn't, and sometimes it isn't, don't force it down their throats.

      Then give your solution back to them, watch how they get on with it, see what they think of it. Learn your lessons and roll them back into the next version. Repeat ad infinitum.

    19. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      I am amazed that no one who has responded noticed that I said you have to learn what your customer knows.

    20. Re:arrrggghhhhh by ralphdaugherty · · Score: 1

      "I just need to be able to connect to a modem and dial out." (exact words burned into my brain)

            It sounded like he knew what he wanted and assumed you knew enough to know it too. But the rest of the rant I agree with.

        rd

    21. Re:arrrggghhhhh by Anonymous Coward · · Score: 0
      How many books and programming fads must we endure in our careers?

      The average management fad passes after the consultants make two or three rounds of the circuit and can no longer sign up enough clients to cover their expenses. The few that require enough intelligence and effort to produce meaningful results fall out of favor quickly, because most companies prefer quick fixes rather than fundamental improvements that take years to bear fruit. The worst of the lot get written into corporate policy manuals, thus becoming immortal.

      Next question?

    22. Re:arrrggghhhhh by ralphdaugherty · · Score: 1

      Why didn't you test the system against his computer?

            to be more precise, test a prototype or sample to see that it meets the cuistomer's needs before buying $20,000 worth of hardware that doesn't.

        rd

    23. Re:arrrggghhhhh by ralphdaugherty · · Score: 1

      I'm beginning to think that working with customers to develop a specification is actually a sufficiently hard job that it should be a specialised position...

            I thought it was called business analyst?

        rd

    24. Re:arrrggghhhhh by Tablizer · · Score: 1

      This story is a bit fishy. You said "home PC', which I assume is an IBM PC compatible. This would put it no further back than about 1982. Two modems in 1982 did *not* cost $20k. Maybe $6k at the most, with software. If you purchased two modems, then I assume they were compatible with each other. If he already had a modem, you should have at least studied it before spending 20k to make sure the new one is compatible with it.

    25. Re:arrrggghhhhh by Anonymous Coward · · Score: 0
      He came to my office and said, I can't use this system. I asked why? He said the modem banks weren't "hayes compatible." I looked at him, told him his exact words after being asked "exactly" what he needed, and he said (rather annoyed) "well, you should have known I needed "hayes compatible."

      Moral of the story: the user don't know squat about what they want, let alone are able to navigate the technical landscape.
      No, the moral of the story is you should have asked for additional information before running off to create a solution. You weren't doing your job. Be real, somebody asks you for a modem to dial out, and you don't bother asking any questions and just assume that any old modems you can hunt up are okay? You should have been shit canned for cause on the spot.
    26. Re:arrrggghhhhh by mlwmohawk · · Score: 1

      Boy, people sure have a hard time with reading comprehension skills here.

      (1) I never said "home PC" I said his PC.
      (2) It wasn't an internal (to the PC) modem, it was a modem bank for the office phone system.

      It seems like you are assuming that he wanted to dial into the company from his house, and this is completely wrong and not supported by the original post.

      Sheesh. The event happened over 20 years ago in a company no longer in business. People are harping on the finer details and specifics are long lost to the mists of memory. The POINT was that he did not actually know what he wanted, he could not see beyond his own preconceptions, and I made the mistake of listening too him.

    27. Re:arrrggghhhhh by Anonymous Coward · · Score: 0
      "I just need to be able to connect to a modem and dial out."
      you should have asked, "Our digital PBX system isn't compatible with a computer modem, can we run a decicated phone line to your computer which will cost about $500.00 to install and $45.00 a month afterwards instead spending $20,000 on a bank of PBX modems?"
      No. You should work with him to figure out what it is he's trying to accomplish before offering a solution that may or may not fit the bill. You're jumping right in with a solution yourself, without benefit of knowing for certain what problem you're trying to solve. There's a chance that the PHB will say "sounds great" to your proposal, and you'll discover later that it either won't provide what is needed or there was a better solution.
    28. Re:arrrggghhhhh by o'reor · · Score: 1
      OK, rant. THE CUSTOMER SHOULD NOT DRIVE DEVELOPMENT. There I've said it. The customer has no figgen clue about what development is or means.
      "the customer *usually* has no figgen clue" would be a better way to put it.

      Here I am in a position where my company, as a customer, has asked a software company for a piece of software (a Java GUI for the hardware we produce, to be specific) a few months ago, with a number of evolutions on that software. The trouble was, since that company could not afford to have a man in charge for the maintenance of that specific project, the evolutions were done by 3 or 4 different engineers, all of them seemingly new to Java development.

      Recently, since my company can now afford to dedicate one of their own software developers on the task, we asked for the code and the documentation of the project, and I got into it. Some of the code and the design is pretty good, but some of it has obviously been rushed out, and some of the engineers who worked on it had no idea what they were doing (working on bit masks with additions and subtractions instead of logical ORs and ANDs ? sheesh ! and let's not talk about critical sections and semaphores...)

      So, certainly, the customer should have no say in the way the development is done. OK. But you better make damn sure that the code you deliver is clean, and has been proof-read at least once by a senior developer that knows his/her job. I'm not saying that the code should be 100% bug-free, nobody can do that in a reasonable time. I'm only saying that the code should not contain obvious goofs such as the ones I mentioned before, and that it should at least be clean and maintainable. Otherwise your customers will certainly make it clear that they will have no more business with you.

      BTW, thanks for taking the time to make well-reasoned answers to all the posts that your rant has generated. I really appreciate that.

      --
      In Soviet Russia, our new overlords are belong to all your base.
  24. Re:Buy? by Coryoth · · Score: 1
    Honestly... no structure, no planning, no discipline, nothing but planning not to have a plan.

    I'm honestly not sure what you mean. I guess you could do Agile that way if you wanted to, but it is in no way a requirement. You want discipline? Try Specification Driven Design and integrate formnal methods into your agile approach. You want structure? Try something like ESpec to provide a single workbench to structure design, development, testing, and formal verification. And as for planning, well its a matter of planning with what you have no, and being open to change - that's not "no plan". If you're curious as to why I'm picking on Eiffel as a language for agile development - I figure the percieved incongruity (that, as is apparent by the examples given, doesn't actually exist) of agile development with a fairly strict, planning oriented language like Eiffel might actually get you to pay attention and see what's going on.
  25. Re:Buy? by Anonymous Coward · · Score: 0

    That's your opinion... and incidentally, by labelling my post "idiotic rambling from one who obviously has no Agile experience," you've made it pretty easy to write off mine, haven't you? Sounds oddly familiar to something you seem to have a problem with.

    Something to think about.

  26. Re:Good development practices... from an Indian?!? by Anonymous Coward · · Score: 0

    ... pretty much guaranteed to be stuck with smelly code.

    No, that's just curry.

  27. Re:Buy? by Brandybuck · · Score: 1

    There are some good parts of Agile Development. But unfortunately, it's greatest impact has been as an excuse not to have a process.

    --
    Don't blame me, I didn't vote for either of them!
  28. Agile is for those who have mastered the basics by CaptKilljoy · · Score: 4, Insightful
    The parent post illustrates an important point about Agile clearly.

    If:
    • your team can't say yes to nearly all of the points on the Joel test
    • if you spend more time fighting fires than working on your project
    • if you couldn't honestly say your team is better than average
    • if your managment is more focused on getting it out the door than getting it right
    then Agile is not going to solve your problems. The basics of good software development have to be there first.

    Agile helps a good team become excellent, it doesn't fix the problems in a dysfunctional team.
    1. Re:Agile is for those who have mastered the basics by master_p · · Score: 1

      All is well with the Joel test, except for #9 ("Do you use the best tools money can buy?"). Because some of the best tools out there are free/open source!

    2. Re:Agile is for those who have mastered the basics by XiaoPing · · Score: 1

      Agile helps a good team become excellent, it doesn't fix the problems in a dysfunctional team.That's true, however it can help a dysfunctional team become a functioning, good team through standard Agile Review Practices and exercises. Everything in Agile is about the team and communication which means that if you were doing agile properly, you wouldn't actually get to coding anything until your team dynamic has been sorted out.
      your team can't say yes to nearly all of the points on the Joel testSteps 8 and 9 hurt though: 8 Do programmers have quiet working conditions?
      9 Do you use the best tools money can buy?
      Quiet working conditions only in that there are no jackhammers near by and you're not in the flight path of the local airport. Co-location and the ability to overhear you co-pairs is an important part of a functioning agile team.

      And it's definitely NOT all about the best tools money can buy - it's all about the right tools. Simplest thing that makes sense - and if that is an open source tool then all the better (in my view). More money for Cake and Beer during your iteration planning meetings...

      Ahem

  29. Save $10.18 by buying the book at Amazon.com! by Anonymous Coward · · Score: 0

    Barnes and Noble is selling this book for $29.95, but Amazon.com is only selling it for $19.77!

    Save yourself $10.18 by buying the book here: Practices of an Agile Developer. That's a total savings of 33.99%!

  30. Re:Good development practices... from an Indian?!? by Anonymous Coward · · Score: 0

    I will assume for your sake that your limited experience with short-term coders has mostly been around the intersection of "H-1Bs" and "contractor programmers" and therefore you generalize "Indian". One day you'll learn that it's the "short-term" part of this equation that hurts the code quality, and not the coder's non-code-related characteristics.

    I was a contractor with all different companies for 8 years. I worked with lots of contractors, American and Indian, and we often went to work on some of the same projects together. I know what that short term thing is like... nasty. But Indians always managed to write the worst possible code, and didn't give a shit. Most of the time they were just copying samples from me or another American, and copied and tweaked, not really having any clue as to what they were doing.

  31. Time For Study by blueZhift · · Score: 1

    Nice review. This just reminds me again that I need to take time out regularly to study not only new technology, new methodologies. Thanks for pointing out what appears to be a good book!

  32. Example from a real project (2005) by Seku · · Score: 1

    "... Nobody here is really sure what the code does, the programmer has left. We think that the ?answerset methods were added as part of an incomplete implementation without disabling the static behaviour which we think is of no use. If this doesn't make things clear than can we continue by phone .."

  33. Re:Buy? by Anonymous Coward · · Score: 0

    THERE is something I can agree with.

    I believe someone else in here said most of these things start with a couple good principles and build a whole lot of crap around them. It's my opinion that the flexibility of 'Agile' programming (I hate typing those stupid quotes in there, but I refuse to use that stupid buzzword without them) is mostly, if not completely, theoretical, and that the benefits it promises are mostly -- again, if not completely -- lost in execution.

    Think of the waterfall model... it sounds logical. Then you get into production, bad stuff happens, and suddenly your plan is wrecked, you're spending extra time and money to adapt your project, and the deadline you gave your customer is still there, but now it's utterly unrealistic.

    Now think of the same project, started with... 'Agility?' Now you have a goal and a direction, but no solid idea of what exactly you're building, only a set of features and how they have to interact. I have an extremely hard time believing this is a good thing. Not only is this -guaranteeing- the exact kind of "that should not do that, this should work that way" that comes with most methods, it prohibits you from looking at the big picture in any meaningful capacity (yes, I consider that a valuable thing to do).

    So that's my long-winded agreement++.

  34. Re:Buy? by bunions · · Score: 1

    > Honestly... no structure, no planning, no discipline, nothing but planning not to have a plan. This is asking for disaster, yet it's so popular that you can't avoid it on trendy tech blogs and even places like Slashdot that are supposed to be "for nerds."

    Hello, first of what will doubtlessly be many uninformed posts whose authors clearly have no idea what a typical agile process involves!

    --
    there is no need to sign your posts. this isn't usenet. your username is right there above your post. stop it.
  35. Re:Buy? by Mydron · · Score: 4, Insightful
    Your synopsis falls into the idiotic rambling category. You have no clue what agile is about.

    Agile programming means planning for things to change. . . . [Y]ou've structured the program in a way that makes it easy to do so.


    This is completely wrong. Agile recognizes that change inevitably happens but that it is chaotic and unpredictable. The mistake you've made is that you assume you can predict the change. This is precisely the mistake that Agile seeks to address. Agile recognizes that it is not likely that you (or anyone else) will be able to predict the nature of changes in the future.

    Nowhere does agile prescribe anticipating where code is likely to change. In fact, quite the opposite, agile touts the notion that you build for today. Tomorrow you refactor what you built today. Agile proponents understand that it is often a complete waste of time to build adaptive frameworks that depend on gross assumptions about the kind of changes that are predicted (rather than known).

    Agile does have a plan. The plan is: code something that works and build tests that test what you've code against what requirement the code is supposed to satisfy. The code and the test are built together using whatever information is immediately available.
  36. Am I Missing Something? by Petersko · · Score: 4, Insightful

    Short story: I was working at a company years ago, a VP of development wanted to be able to dial out and use a terminal programs on his PC from our office phone system. I asked him, point blank, tell me exactly what you need. He responded, "I just need to be able to connect to a modem and dial out." (exact words burned into my brain)...So, we bought $20,000 worth of phone equipment that did just that, alowed a PC's modem to be plugged into a wall, and dial out...He came to my office and said, I can't use this system. I asked why? He said the modem banks weren't "hayes compatible." I looked at him, told him his exact words after being asked "exactly" what he needed, and he said (rather annoyed) "well, you should have known I needed "hayes compatible."

    So you, the technology expert, bought $20,000 worth of equipment on a one sentence verbal spec... and it's HIS fault?

    Isn't this a rather collosal, and unforgiveable, failure on your part?

    1. Re:Am I Missing Something? by mlwmohawk · · Score: 1

      So you, the technology expert, bought $20,000 worth of equipment on a one sentence verbal spec... and it's HIS fault?

      Well, trying to make a long story short, it wasn't merely verbal, he did sumit a requisition, it was approved, etc.

      It didn't make a difference, he didn't even know what he wanted,

    2. Re:Am I Missing Something? by DerekLyons · · Score: 1
      So you, the technology expert, bought $20,000 worth of equipment on a one sentence verbal spec... and it's HIS fault?

      You're suprised at that?
       
      Reading Slashdot one finds an endless parade of excuses from IT workers why every failure, big and small, is not their fault. It's always the boss, the methodology, the particular shade of green on the walls of the office bathroom...
    3. Re:Am I Missing Something? by nosfucious · · Score: 1

      I'm blaming the people skills of most geeks. I.T. people tend to be less people oriented. Gross generalisation alert: For some reason the more tech you are the less people and vice-versa.

      I.T, whether programming, database management, system administration or whatever, is all about working for a business, run by people. Please them, and you'll get the job done, right. (I'm guilty of forgetting users. Occasionally I need to pour a large glass of perspective and soda).

      I remember my University days, precious little was taugh about dealing with people, only a little more on what makes buiness "tick". And some rudimentary maths and accounting.

      Solid design streaches from the top of code or wiring lay out, right through up to working with the customer/customer manager for the spec. Fail to get the spec right and you're sunk from the beginning. Good management AT THE BEGINNING helps a lot and gets this right. If the management fails, there are generally early signs, but get the hell out of that project before it starts to smell.

      A little more engineering/people management skill probably wouldn't go astray in most tech courses. The uber-geek will still be an uber-geek, but the real people would probably benefit.

      Enough perspective and soda for today thanks barkeep. I'm off.

      --
      Q:I was listening to a CD in Grip and it sounded horrible! What's up? A:Perhaps you are listening to country music
    4. Re:Am I Missing Something? by Stormie · · Score: 3, Insightful
      Isn't this a rather collosal, and unforgiveable, failure on your part?
      Well, he did say that he was working at that company. Past tense. I'd have fired his ass, too.
  37. Well, naturally. by Petersko · · Score: 2, Insightful

    "It didn't make a difference, he didn't even know what he wanted,"

    Well naturally he didn't. If he knew exactly what he wanted, he'd just order it himself.

    I don't have quite the background that some here do (6 years in support followed by 8 years in development), but even early on in my career I knew that "tell me exactly what you want" never, ever works. Even for relatively trivial things.

    I'd like to know how you found hayes-incompatible equipment though - that must have taken some work!

    1. Re:Well, naturally. by ralphdaugherty · · Score: 1

      I'd like to know how you found hayes-incompatible equipment though - that must have taken some work!

            probably IBM bisync :)

        rd

  38. Re:Buy? by Anonymous Coward · · Score: 0

    A screwdriver is a good and useful tool, and it's designed for tightening screws. However, you can also use a screwdriver to pound in a nail. Heck, you can do it in at least three ways. That does not automatically make any of them a good idea, nor does it make hammers obsolete or less effective.

    I made the mistake of seriously oversimplifying my opinion on this matter, which made it seem that I have no idea what I'm talking about. I do know more about 'Agile' development than you might assume. I still consider it a bad idea, and I believe that within a few years, this position will be vindicated by the decline of this method, which will almost certainly be relegated to the same sort of cult following enjoyed by the Atkins diet and the Rocky Horror Picture Show.

  39. Agile organizations by hebcb · · Score: 1

    There's a lot of focus on the methodologies the Developers need to focus on to achive agility. For me the biggest challenge in my current organization has not been the developers doing things the agile way but getting the customer (or in our case product development... the customer's representative) to be able to think in smaller, self-contained chunks. Some of this may be that we are dealing with a complete rewrite of an existing system... perhaps agile is better suited towards incremental improvements of an existing code-base rather than a "port" style project. In summary, our biggest hurdle seems to have been getting the product sponsors to think in smaller chunks. Not in us implementing an agile methodology within engineering but rather across the organization.

    1. Re:Agile organizations by XiaoPing · · Score: 1

      We solved this by creating an "Agile Business Analyst" the communicates with the Customer (mostly) and the Iteration Manger (therefore the devs as well - oooh happy families!) and helps them generate appropriately sized stories for the Dev's to estimate.

      This is amazingly powerful as the customer then feels a lot more secure that they're 'doing things the right way', they catch on quickly and after a while only really need tweaking and you get well defined, well sized stories with decent acceptance criteria.

  40. Mod parent up (please) by Taagehornet · · Score: 2, Insightful
    Quoting Martin Fowler

    Two of the greatest rallying cries in XP are the slogans "Do the Simplest Thing that Could Possibly Work" and "You Aren't Going to Need It" (known as YAGNI). Both are manifestations of the XP practice of Simple Design.

    The way YAGNI is usually described, it says that you shouldn't add any code today which will only be used by feature that is needed tomorrow. On the face of it this sounds simple. The issue comes with such things as frameworks, reusable components, and flexible design. Such things are complicated to build. You pay an extra up-front cost to build them, in the expectation that you will gain back that cost later. This idea of building flexibility up-front is seen as a key part of effective software design.

    However XP's advice is that you not build flexible components and frameworks for the first case that needs that functionality. Let these structures grow as they are needed. If I want a Money class today that handles addition but not multiplication then I build only addition into the Money class. Even if I'm sure I'll need multiplication in the next iteration, and understand how to do it easily, and think it'll be really quick to do, I'll still leave it till that next iteration.

    One reason for this is economic. If I have to do any work that's only used for a feature that's needed tomorrow, that means I lose effort from features that need to be done for this iteration. The release plan says what needs to be worked on now, working on other things in the future is contrary to the developers agreement with the customer. There is a risk that this iteration's stories might not get done. Even if this iteration's stories are not at risk it's up to the customer to decide what extra work should be done - and that might still not involve multiplication.

    This economic disincentive is compounded by the chance that we may not get it right. However certain we may be about how this function works, we can still get it wrong - especially since we don't have detailed requirements yet. Working on the wrong solution early is even more wasteful than working on the right solution early. And the XPerts generally believe that we are much more likely to be wrong than right (and I agree with that sentiment.)

    The second reason for simple design is that a complex design is more difficult to understand than a simple design. Therefore any modification of the system is made harder by added complexity. This adds a cost during the period between when the more complicated design was added and when it was needed.

    Now this advice strikes a lot of people as nonsense, and they are right to think that. Right providing that you imagine the usual development world where the enabling practices of XP aren't in place. However when the balance between planned and evolutionary design alters, then YAGNI becomes good practice (and only then).

    So to summarize. You don't want to spend effort adding new capability that won't be needed until a future iteration. And even if the cost is zero, you still don't want to it because it increases the cost of modification even if it costs nothing to put in. However you can only sensibly behave this way when you are using XP, or a similar technique that lowers the cost of change.
  41. My "Job Interview" Book by Anonymous Coward · · Score: 0

    I found this book used, and love it. Nothing in it is "new," of course, but the little bits of wisdom are very nicely organized and presented. I thumb through it the night before a job interview, and I always am able to pick something out that helps me.

  42. Re:Buy? by TimTheFoolMan · · Score: 1

    "After all, an inflexible plan is a bad plan."

    Rummy? Is that you? How's unemployment?

  43. Re:Buy? by Coryoth · · Score: 1

    I agree that there is hype around agile methods, and programs of "how to be agile" that suggest a wide range of practices of dubious extra merit, but package the whole thing up as an "agile methodology" etc. Then again, there is some merit to the approach, and developing early testable specifications of what you intend to develop, and against which you can verify any further code you actually develop, is probably a good thing. Whether having two people sit next to each other to code, or having trendy names for your meetings, etc. has much merit is a little less clear. Agile will undoubtedly remain around, it will just become tempered with common sense and a lot of the hype and trendy named aspects of it will get trimmed away.

  44. Re:Buy? by sofla · · Score: 1

    EXCELLENT comparison to the waterfall model. Its my experience (ymmv) that almost no one does waterfall in practice, and, equally, almost no one does _insert favorite agile methodology here_ in practice. I tend to think of myself as 'agile' (as opposed to...what, I wonder?), but that's because I tend to define it in terms of the Agile Manifesto (http://agilemanifesto.org) rather than conformance to any specific methodology.

    In my opinion, if you read the first page of the manifesto and you find that you agree with their four main points, then chances are you will be more comfortable in an agile environment than a non-agile one. If you're not in one (you'll know) and you'd like to be, pick up a book or two and see if there are ideas in there that you could use. As an example, parts of XP are really good and easy to implement, and other parts (pair programming comes to mind) tend to be less applicable to most teams. Or another example, you can adopt automated testing without necessarily doing full-blown TDD ( aka "only write code when there's a test case that fails" ).

    As far as the specific, 'formal' agile methodologies go... leave those to the consultants. zealots, PHB's and other buzzword-compliant types.

  45. Re:Buy? by Dragonslicer · · Score: 1

    Go back 20 years, and I think that was just called something like "separation of interface and implementation", "separation of concerns", or "information hiding". I guess "Agile" is easier to type, but it doesn't strike me as substantially different. The more things change, the more they stay the same.

  46. Re:Buy? by StarvingSE · · Score: 1

    How, may I ask, do you develop? Do you even develop for a living? If you don't, then you can't really make any criticism on agile methods.

    Traditional methods (waterfall, prototyping, etc) are just a carry-over from physical manufacturing. You specify requirements, design the product, produce it, sell it to customers, and provide regular maintenance. No one ever stops the assembly line in the middle of an automobile plant saying "whooooaaa hold up, our customers want 4 more square feet in the trunk and the steering wheel on the right side, back it up!." However, this scenario happens all too often in software. Make the wrong design decisions early, and requirements changes later in development can potentially be very costly. In fact, some projects just start over because it's cheaper. Software is a different beast because it is intangible.

    Agile methods aren't "planning to not have a plan." Agile's plan is to prepare for future change, and involve the customer in the development process to make sure they are getting exactly what they want. This helps ensure much higher quality in software.

    Agile is new, and it's still an immature science with less research behind it than other methods. Is it the silver bullet to software quality problems? Probably not, but then looking for one is a pipe dream. I personally believe a combination of traditional design and agile is the best way to go.

    --
    I got nothin'
  47. Looks like an affiliate link to Amazon by antispam_ben · · Score: 2, Informative

    Rather than click parent's link, this plain-text link takes you to the same discount:
    http://www.amazon.com/Practices-Agile-Developer-Pr agmatic-Programmers/dp/097451408X

    Or if you still don't trust MY link, go to amazon.com and put in the title Agile Developer.

    Fair disclosure: I have used books for sale through Amazon, though not this one.

    --
    Tag lost or not installed.
  48. Re:arrrggghhhhh - No Silver Bullet by darthlurker · · Score: 1

    http://www-inst.eecs.berkeley.edu/~maratb/readings /NoSilverBullet.html Insurance has a concept called churning. That's what these new fads sound like to me for programming.

  49. Re:Buy? by Brandybuck · · Score: 1

    Actually, most successful software uses the waterfall model. It's the only model that works, so it's why it's being used. In fact, it's the core of Agile! Waterfall doesn't have to be a two year project it can be a one week iteration. As long as you plan before you code, you're probably doing waterfall.

    Analyse, Design, Implement, Verify, Deploy, Maintain, Repeat.

    Do you try to figure out something about what the customer wants right up front? Do you design the software before you write code? Do you do a full systems verification before you hand it off to the customer? Do you go back and do the same thing for the next version? If so, you're using the waterfall model!

    There's nothing in waterfall that precludes pair programming. There's nothing in it that says you can't write unit tests the same time you're coding. There's nothing in it saying SQA can't do integration testing on every iteration.

    --
    Don't blame me, I didn't vote for either of them!
  50. Sales Engineer by antispam_ben · · Score: 1

    I'm beginning to think that working with customers to develop a specification is actually a suffciently hard job that it should be a specialised position - lord knows enough developers seem to have little in the way of an idea about it.

    There's a job title of "sales engineer" though too often the person AND the job the person fills falls way short of the goal.

    --
    Tag lost or not installed.
  51. That's a bad attitude by jchenx · · Score: 2, Insightful
    I stongly disagree, I've been doing to stuff for a while, and let me tell you, I witnessed people resisting wordprocessors in the office because they thought they were more complicated, harder to use, etc.

    The customer who is used to using typewriters will NEVER be able to help you spec out a word processor.

    They DON'T understand what technology can do and thus can not fully understand how to apply it.
    That's a really bad attitude. Granted, there are some Luddites that don't understand technology, are afraid of it, and won't be able to help you out very much. But "NEVER" is a very strong word.

    It's only natural for customers to be resistant to change, especially if what they have going for them, works. That's why, as engineers, it's partially our job for being effective communicators. Show them some examples of what word processors can do beyond typewriters. But also be honest, and be aware of the disadvantages, and be ready to have long discussions about it.

    Too often I run into engineers that are really excited about technology X and all they want to do is use it NOW NOW NOW. Anybody who says otherwise, or gets in their way, or slows the process down, is suddenly a Luddite and "just doesn't understand technology". Those engineers don't get very far in their careers, and understandably so.

    Your original post is an excellent example of how engineers should NOT work with customers. Customers rarely know exactly what they want. That's why you have to spend time (sometimes a lot) on flushing out all the details, making sure people don't make assumptions, etc. It's time consuming and not easy, but it saves a helluva lot of time and money in the future, if done right. (And your example shows it)

    Unfortunately, these are often skills not well taught in college, since the focus is often just on "can you write good code?". We need more general Software Engineering courses that teach this stuff, to reduce this "code first, ask later" mentality that seems much too prevalent these days.
    --
    -- jchenx
  52. Re:Buy? by sofla · · Score: 1

    So its true... when all you have is a hammer, everything looks like a nail.

  53. Extreme Programming - the Morning After by Animats · · Score: 1

    This is the hangover from Extreme Programming and downsizing. Welcome to deferred costs.

  54. Code modules start with great productivity. by Anonymous Coward · · Score: 0

    Well programmers should be productive.

  55. Re:Code modules start with great i by Bugs42 · · Score: 1

    Damn! Just used my last mod point earlier today, too.... You get +5 Imaginary Kudos for that. Best joke I've seen on /. in quite some time.

    --
    Programmer: an ingenious device that converts caffeine into code.
  56. That's not how reality works. by Anonymous Coward · · Score: 0

    It's very easy to say that you'll get your interfaces correct right away. But that's never the case. Anyone who suggests that it is is a complete fool.

    It doesn't matter how much thought or effort you put into your interfaces. They will be affected by change. Java is a perfect example of this. No matter how hard they tried, the developers of Java code during the 1.4.x and earlier era would have never have been completely able to ensure that their APIs would mesh well with the 1.5.x language features. Sun themselves managed to keep a decent level of backwards compatibility, but the class library is really beginning to get crufty. There are many Swing classes, for instance, where enumerations should be used. But due to backwards compatibility, they're still forced to use type-unsafe integer constants.

    Cruft is a problem that Microsoft really faced quite badly when it came to the Win32 API, just because it changed so much from the Win16->Win32 transition, because it differed between the NT and 9x branches, and because it could not take future developments into account when first developed. API cruft is one of the main reasons there's been a push to Windows.Forms with .NET.

    Agile methods face reality. They acknowledge that there will be change. And instead of pretending that API changes won't take place, they just accept that they will. Not only that, but then most take steps to ensure that the effects of any changes are mitigated as best as is possible.

  57. Strange practices? by Anonymous Coward · · Score: 0

    This way if, God forbid, a dev gets hit by a truck or just up and leaves we don't have to worry about having no idea what they've done and/or what they are doing at this time. Just one of many different ways to solve this problem that doesn't require exotic or strange practices.

    Many methodologies mandate quick stand-up meetings each morning. This lets everyone on the team know what everyone else is doing, without forcing them to read pages of documents. It sounds like your scheme cuts out the rest of the team for the most part, only focusing mainly on yourself and the developer(s) directly making the changes.

    Pair programming, as mandated by XP, also helps propagate information throughout the team without needs to resort to documentation. Frequent pair rotations allow everyone to work with everyone else, increasing everybody's familiarity with the codebase. Thus if one person leaves, or gets sick, or dies, etc., the team as a whole is still mostly aware of what that person's involvement was.

    Mailing lists, web forums, and so forth also allow for rapid developer communication. Best of all, archives exist of those, allowing for rapid future reference. Searching for information about the change somebody made to a particular feature is often far easier with digital archives, rather than trying to sort through pages of paper modification memos.

    I wouldn't consider such basic communication methods to be "strange practices". If anyting, they get more of the team involved, at least relative to your company's scheme. Often, that's the best thing to do. Then everyone has a basic idea about what the others are working on, who and what may be affected by changes, and so forth.

  58. Re:Buy? by kabz · · Score: 1

    There doesn't seem to be much between agile, and simply "being a good software engineer", which includes:

    - Building stuff fast (Usually a good thing)
    - Being ready to refactor if it all goes a bit 'Pete Tong' (Another good thing)
    - Writing clear and commented code a junior developer could maintain (Developers will love you)
    - Being always ready to assist and/or mentor other programmers where required (Bosses will love you)

    Expressed this way, nothing seems particularly contentious, though it definitely de-emphasizes the "centralized control" of the fabulously craptastic "Waterfall Method". Rrrrrr.

    --
    -- "It's not stalking if you're married!" My Wife.
  59. Re:Buy? by kabz · · Score: 1

    Yeah, you know, the car analogy fits like a glove. Look at the god-awful Pontiac Aztec POS !!!! You really think that they would seriously have sold that thing if there was *any* way they could have done another iteration, refactored, started from a blank sheet of paper etc., etc.

    In that case, GM was practically bankrupt, and they had to take whatever shit the 'waterfall' car design process spat out on the first turn of the crank.

    --
    -- "It's not stalking if you're married!" My Wife.
  60. Re:Good development practices... from an Indian?!? by Anonymous Coward · · Score: 0

    Yeah, these jackasses have to put something on their timesheet, so they jack-up shitloads of code, one module at a time. mo-fos.

  61. Re:Buy? by Kent+Recal · · Score: 1
    Erm... He said:


    Agile programming means planning for things to change


    You said:


    This is completely wrong. Agile recognizes that change inevitably happens but that it is chaotic and unpredictable.


    Well, what does it matter, imho this whole agile, XP stuff is made up by crackmonkeys anyways.

    If you want to software that works then you need three things:

    - One Architect (or a team that acts like one)
    - A bunch of highly skilled codemonkeys
    - A plan which is turned into a spec by the architect and which only changes around *pre-defined* joints

    Most projects that I have encountered failed on all three of these points and tried to make up
    by going after "agile practices", standup meetings, pair programming and all that rubbish.
    And most of them didn't even notice that not even the best process (if its worth a damn) can make
    up for the lack of any of the above. Not a bit.

    If you don't have an architect then you don't even have to start. Your software will be flawed from the getgo
    and the accumulating design failures will make your work slower and more expensive every day.

    If you don't have good codemonkeys but rather buy three "fresh'outta'college" students for the price of one
    qualified hacker (cuz 3 for the price of one is a great deal, right??) then you're doomed for the architect
    either leaving early pissed or, worse, him sanctioning that kind of staffing due to a vested interest in
    a longer chain-of-blame (which tells you all about how good of a choice he was).

    If you don't have a plan and stick to it then you're lost in either case.
    Software as flexible as a car that can be turned into a plane overnight is a pipe dream.
    You either know what you want to do or you don't. In the latter case you shouldn't even start either.

    None of that can be fixed with any kind of process. Otoh, a qualified team already
    has or will quickly develop whatever process works best for them.

    All this XP nonsense is made and picked up by the clueless PMs and PHBs crowd that's
    always in desperate need to justify their failure. Which is good. For the people who
    actually get work done. You spend your time on tweak, tune and blame the process.
    Meanwhile those with a clue just sit down and build youtube.

    Thanks, please keep writing these books!
  62. On a scale, I rate agile as a -1 methodology by Anonymous Coward · · Score: 0

    Why? Because most of the development teams can't do it right. And when they do it WRONG, it causes support personal workloads to multiply. We have our "team" testing agile right now. So far, in the last two weeks alone, they have changed their tables definitions 10 - count them, 10 -- times. Under normal development, I can expect 2 or maybe 3 in that time. We can't afford more help like this.

  63. Buy.com is a SPAMMER by Anonymous Coward · · Score: 1, Informative

    Buy.com sends me unsolicited SPAM every day. I've never bought anything there, and certainly have never entered any email address into their site. Yet I receive the SPAM.

    Do not reward SPAMMERS with your money.

  64. Re:Buy? by Brandybuck · · Score: 1

    A better way to put it would be: When all you have are nails, use a hammer!

    Software, like hardware, should be planned before implemented. You get blueprints before building a house. You get a diagram before burning the circuit. And you design your software before you write it. Twenty five years of programming life, and I STILL can't understand why people have a problem with this concept.

    Yes, you can overplan. The "classic" non-iterative waterfall model fails because of this. But just as bad is underplanning. Too many developers are latching onto Agile as an excuse to underplan. They're tired of writing requirements and getting them approved, so they advocate Agile and then pretend their skunkworks prototype is a product.

    You also test your software *after* you've completed it. No matter how much unit and integration testing you've done during implementation, you STILL need a complete systems test on the FINISHED product. This is another misuse of Agile, to excuse the lack of adequate SQA testing. You can certainly write your tests before and during implementation, but you still must perform the tests *after* implementation complete.

    Waterfall means you plan, then implement, then test. All the rest is variation on this theme.

    --
    Don't blame me, I didn't vote for either of them!
  65. Re:Good development practices... from an Indian?!? by MrData · · Score: 1

    Hey jerky, I personally know Venkat. He is a excellent developer, great author, and a first class guy.

    Your post is a waste of valuable bits.

  66. Re:Buy? by chromatic · · Score: 1
    Twenty five years of programming life, and I STILL can't understand why people have a problem with this concept.

    Perhaps the people who pay for the development of software are finally sick of not getting what they want.

  67. Re:Buy? by Anonymous Coward · · Score: 0
    Honestly I read nonsense like this and want to puke. Some people *really* can predict change and that shouldn't be held against them. Just because they happen to have more intelligence and domain knowledge than the writers does not mean an approach that favors avaliability of less knowledge and or experience is ideal in every case. Most programming patterns, pardigrams, methods...etc break down in various ways in various domains. Its rediculous reading this nonsense because all of the useful suggestions are obvious anyway and what isn't obvious or debatable may not even apply to the reader.

    If you really want to know the secret to writing great programs I will share them with you below. These secrets always work and never fail regardless of who you are or what you do.

    Try very hard not to return or throw exceptions (throw() are really gotos in costume) upon errors. Keep a return code throughout and only return in one place (at the end) throughout your function. This will help you manage allocation of resources, locks, transactions...etc with less chance of forgetting to handle something every time an error happens and you feel like bailing.

    Always check return codes always!! In fact you should have a macro in your IDE that wraps whatever your about to think about calling in an if statement.

    Always write error messages, error handling...etc code *last* but leave quick comments so that you remember to go back to each spot and write them. The reason for this is it gets you to recognize areas of similiar errors/classes of errors and treat them as groups improving overall quality and reducing overall time spent. It also prevents you from being lazy and skimping out on useful checking/messages when you have other things to think about. The second pass also provides some opportunity to catch bugs if your alert during the process.

    If you are writing code to allocate something, in the same breath write the code to deallocate it even if its hundreds of lines away from where you are.

    assert is your friend. Honestly it is your best friend, better than that hot programmer chic sitting next to you. Being assert happy to the heights of paranoia will pay off when you least expect it at first and when your like OMG I am so lucky I listened to that anonymous poster on slashdot and went assert happy because it just saved my ass you will happily go assert happy to the heights of paranioa too and recommend the same of your friends. Don't just call assert() write entire functions that apply every possible constraint you can think of to your data structures even if you know it will never happen... This will waste lots of CPU cycles keeping your hands warm in the winter.

  68. Re:Buy? by Brandybuck · · Score: 1



    That goes without saying. But these same people are the ones who refuse to read Fred Brooks. Most other industry have gotten past fantasy and into reality, but the software industry still insists there must be a magical silver bullet out there.

    --
    Don't blame me, I didn't vote for either of them!
  69. Re:Buy? by Anonymous Coward · · Score: 1, Insightful
    I'll assume you're talking Java here. I left Java a few years back after a 4-year stint on the bleeding edge of J2EE land.

    Try very hard not to return or throw exceptions (throw() are really gotos in costume) upon errors. Keep a return code throughout and only return in one place (at the end) throughout your function. This will help you manage allocation of resources, locks, transactions...etc with less chance of forgetting to handle something every time an error happens and you feel like bailing.

    Releasing resources is what try {} finally {} is explicitly for. Wrap your entire function in a try/finally block and return anywhere you want. For Java, Exceptions are definitely the easiest way to handle many kinds of errors.

    Always write error messages, error handling...etc code *last* but leave quick comments so that you remember to go back to each spot and write them. The reason for this is it gets you to recognize areas of similiar errors/classes of errors and treat them as groups improving overall quality and reducing overall time spent. It also prevents you from being lazy and skimping out on useful checking/messages when you have other things to think about. The second pass also provides some opportunity to catch bugs if your alert during the process.

    NO. Standardize your error handling FIRST and use it everywhere:
    • Catch only the specific Exceptions that can be thrown.
    • IMMEDIATELY log them somewhere with the full stack trace.
    • If you are writing software that ships elsewhere, use Java's I18n support so your messages can be translated later. (It is VERY easy for a J2EE server to log an Exception that will need to be rendered later in multiple languages for the end users.)
    • Later you can worry about creating a nice class heirarchy for your Exceptions. But always catch them and log them appropriately.

  70. MOD UP by rozz · · Score: 1

    10x more insightful than the whole agile crap you find in 20 useless books

    --
    "There is nothing more frightful than ignorance in action." Johann Wolfgang von Goethe
  71. Re:Buy? by XiaoPing · · Score: 1

    >Analyse, Design, Implement, Verify, Deploy, Maintain, Repeat.

    You've just completely left out the TDD-ness of Agile here then. Also the refactoring that makes your design Emergent. That would make it:

    Analyse, (reafctor if Needed), Design, Test (unit), Implement, Verify (test!), Refactor, Test (functional, integration), Deploy, Refactor, Maintain (Automate), Repeat.

    So, testing and refactoring all the way then? mmmm Agile.....

  72. Blah, Blah, Blah by thoglette · · Score: 1
    The same old realities that have existed for at least 40 years in software development, but This Time In New Emperor's (Agile) Clothes. But *Now* with Excessive Capitalisation.

    Move along people, there's nothing new to see here.

    The unfortunate reality is that these concepts _are_ new to an unfortunately large proportion of "hot young programmers"

    I'm currently struggling with an application which has all the hallmarks of being developed by programmers who:

    • dropped out of Uni because, hey, their skills were more valued in the real world
    • think an MS certification is more useful than a degree
    • belief "Knuth" is cussing
    • have never heard of Steve McConnell, Frederick P. Brooks, Tom Demarco, Edward Yourdon
    • Or Lisp

    I'll not name names to avoid being sued, but every bug I discover indicates:

    • an ignorance of pre-existing solutions in the problem space;
    • broken architecture;
    • the review and test plan was never written, never mind followed.
    • and that engineering governence is totally missing.
    • But, dude, relax, all bugs are FITNR. And have been for years. :-(
    In short, as an example of Good Code, it's a bucket of shit and it stinks. And no, it still doesn't do what the users want.

    Yes, I've been writing programs for over a quarter of a century. So I'm an Old Coot (tm). But I see these whippersnappers making f@#$%@ups that would have gotten me a quick slap 'round the ears. And claiming that they're doing something 3ll33t and, just, like, so, y'know, waay beyond the comprehension of anyone over 23.

    Dude.

    It's Crap, Ray, Crap

    --
    -- Butlerian Jihad NOW!
  73. Re:Buy? by Anonymous Coward · · Score: 0

    What you describe sounds more like XP which is part of Agile but is not Agile in it's entirety.

  74. Re:Good development practices... from an Indian?!? by Anonymous Coward · · Score: 0
    It's not racism. It's economics.

    Of course people from the Third World are going to lie to dumb, rich Western people if their families' welfare depends on it.

    Good luck to them.