| «« Week 03 Status Report | Week 04 Status Report »» |
|
About
I'm Ryan Lowe, a Software Engineering graduate living in Ottawa, Canada. I like agile software development and Ruby on Rails.
I write this blog in Canadian English and don't use a spell checker. Typos happen.
Projects
» Full-time Ruby on Rails freelancer
» Full-time with Rails since May 2005 » Former committer for RadRails (now Aptana) » I also have a few Rails side-projects in development: 1. wheretogoinTO.com Toronto nightlife 2. Hey Heads Up! TODO list and sharing 3. Layered Genealogy family history research 4. foos for foosball scoring 5. fanconcert for music fans (on hold) Hiring Rails developers? I can telecommute by the hour from Ottawa, Canada »» Email: rails AT ryanlowe DOT ca
BulletBlog
Now hosted on Hey! Heads Up -- check it out!
Syndication
Pings
Recent
Derek Lowe's (Ryan's older brother) words at Ryan's funeral
blog@ryanlowe.ca no more Forging Email Headers: Good, Bad or Ugly? Sarcastic Dictionary (Part 1 of Many) Tags Hierarchies Twisting Rails is Risky Business Risky Business? My Take on Early Alphas Whoa, it's August 2007 Closing Comments A Postscript to "Growth at the grassroots" »» All Blog Posts
Linkage
del.icio.us/ryanlowe
technorati/ryanlowe.ca/blog Aurora Roy Jim Andrew Trasker Travis Kibbee Karen Dr. Unk Ayana Van Bloggers Joel Spolsky Robert Scoble Tim Bray Dave Winer Raymond Chen James Robertson Ruby/Rails Bloggers rubyonrails.org weblog David Heinemeier Hansson Dave Thomas James Duncan Davidson Mike Clark Jamis Buck Signal vs. Noise Tobias Luetke Amy Hoy: (24)slash7 Jeremy Voorhis Eclipse Bloggers Planet Eclipse EclipseZone Luis de la Rosa Eclipse Foundation Kim Horne Billy Biggs Ian Skerrett Mike Milinkovich Bjorn Freeman-Benson Denis Roy
Archives
|
How this Developer sees the Business of Software
I don't want to give you the impression that I write open source software because I'm an altruistic software engineer. I have selfish reasons, definitely. I want to make lots of money as well -- I have no problem admitting I'm a capitalist. Mostly I want to prove I can manage a software project. What better way to do that than transparently? The disadvantage of giving away my development time for free is offset by the investment in a project that might get me into the project manager hot seat. Open source projects also make fantastic discussion topics for interviews -- which I found out last year -- because commercial companies won't let you talk about your work in detail with other people. I could talk about my open source project in detail because it is completely open. Business people might get the impression that software developers are a bit too idealistic about their work -- their art -- to realize where their paycheque comes from. Software engineers might think that business people don't understand software processes well enough to get them working for them instead of against them. This post is an exploration of these thoughts and hopefully the start of a small discussion with my readers on the business of software, as seen by a software developer. --- There are lots of ways for a software business to sell software to another business but here are quick rundowns of four major ways. Note that this list does not include internally developed software or commercially-developed open source software (like Eclipse). That kind of software, while developed in a similar way, does not have similar business-to-business concerns because the development is internal to one business. BDUFware Secure a business contract to make software for a customer. Design the whole thing on paper up front, gathering requirements from your customer. Write one or many large specification documents (note the root word specific). Over the course of many months implement the contents of those documents. Spend a few weeks testing and then deliver the product. **BDUF is software lingo for By Design Up Front. Demoware Quickly hack together a prototype to show people some neat software technology that they've never seen before. Listen to the oooohs and aaaahs at your demos. Continue to add features to this prototype until you make a sale. Once you have a customer with a chequebook in hand, spend some time cleaning up the prototype until it is ready for use in the Real World instead of in a controlled demo. Agileware Secure a business contract to make software for a customer. Pear the requirements down to the smallest amount of work that can produce an initial working product. Build that small product in a short BDUF-style iteration. After the iteration deliver the product, take comments from your customer along with new feature suggestions and incorporate them into the next iteration. Repeat over and over again until all of the customer's requirements are met. ** Agile is a classification of a group of software processes. An example is eXtreme Programming (XP). COTSware Identify a market that needs software to perform some task or is underserved by current products. Secure funding to develop this software from an investor (angel), bank (debt financing) or from your own pocket (equity financing). Develop the product with requirements gathered from prospective customers without giving your secrets away to competitors. After months of development and testing release the product to much fanfair, recoup your investment and make a profit. ** COTS more software lingo; it stands for Commercial Off The Shelf. It refers to software designed for a market instead of a specific customer, like Microsoft Office. --- Each of these approaches has software development and business advantages and disadvantages. Here's my list. Feel free to add to it in my comments. BDUFware Advantages
Disadvantages
Demoware Advantages
Disadvantages
[1] There are a few variations to the 80/20 rule, actually. This version of the 80/20 rule states that 80% of the "work" takes 20% of the time. The last 20% of the work takes 80% of the time. It all depends on how you define "work" -- but in this case it's the difference between visible work (what the demo does) and under-the-covers work. Without the under-the-covers work the product is not ready to ship, but the customer probably doesn't know this. Agileware Advantages
Disadvantages
COTSware Advantages
Disadvantages
--- That's it for now, but I'll probably be adding to this in the upcoming week. Comments? Posted at March 20, 2005 at 09:04 AM ESTLast updated March 20, 2005 at 09:04 AM EST Comments
What about if you have a fixed price contract that you have to bid on? From what I have heard, you *have* to make it a BDUFware project just so you know how much it will cost. Can you figure out a better way to do a fixed price contract? » Posted by: Jim at March 21, 2005 08:50 AMI'm not trying to solve problems, I'm just pointing them out so we can recognize them. In the Agileware disadvantages section I mention: "Business are not used to dealing with software companies in short milestones, without a definite timeline and with no definite end to the project. Businesses are not used to thinking of maintenance iterations as pseudo-development iterations in Agile processes." I don't know who is supposed to solve this problem. Is business/government supposed to learn about new development methods so they can change their business process? If so, from whom? Are we supposed to teach them at a grassroots level from the bottom up? You brought up a great point. » Posted by: Ryan at March 21, 2005 08:56 AMIt seems that "Agileware" ends up producing a better product, at least from the way you described it. But that the reason it isn't used is because businesses don't understand the value. When managed right, agile software can turn out well. When managed badly, it ends up being really bad. Saying the software is always ready to ship is not necessarily true. Agile software itself does not put an emphasis on testing. You can do agile software, building in small increments, and releasing in small increments, while still doing very little testing. Agile software does not necessary allow changes to big made later. If your architecture is too stiff and doesn't allow for changes, then they aren't going to be easy. Perhaps the reason that agile software ends up doing well, is that those doing it are interested in new methodologies, and delivering a stable product. They realize that to do this, you need to test a lot, and have an architecture that allows for changes later. Also, once you have a contract for an agile piece of software, you may end up continuing to use it, even if things are going bad. They've delivered on the first 3 out of 10 things, and you now have your data locked up in your system. If the customer at this point sees that things aren't going right, it's very hard to pull out. Wasting all that money and time, they end up with nothing. Whoever they switch to isn't going to want to continue on with the original companies program, as it wasn't done right in the first place, and they don't want to be stuck trying to fix it. Plus your data may already be locked into the system, and making it into some new format for some new system may be too big problem. Not to mention retraining all your new staff once a replacement comes along. Agile software may be better when done right, but only when done right. When done wrong, it can be just as bad as any other method. » Posted by: Kibbee at March 21, 2005 09:11 AMAgile methods do emphasize unit testing. You can't refactor code safely without unit tests and agile processes depend on the ability to refactor to be effective. Yes, even big changes/refactorings can be done safely if the unit tests are written properly. If you are not unit testing you cannot refactor safely. If you cannot refactor you are not agile and you are not using an agile process. That's all there is to it. » Posted by: Ryan at March 21, 2005 09:16 AMFor more information on Agile processes, check out the AgileAlliance website: » Posted by: Ryan at March 21, 2005 09:22 AMDoing anything properly in software requires testing. No matter which methodology you use, testing is always an important factor. Using agile development isn't a magical thing that stops managers from skimping on the testing in order to meet deadlines or save on man-hours. None of the other methods push testing aside, and say to leave it all to the end. People just tend to do that, because they don't realize the importance of testing. Also, it seems confusing to me that you put agile development practices, against COTS, which is a product more than a methodology. COTS software can be done in an agile way. MS-Office didn't start out as the massive system it is today. They started out with basic features of word processing, and over the years, have built on tons of more features. Mind you, they only come out with a new release every year or two, but each release is an iteration with new features added from customer feedback. The only difference is, is that releasing each little feature as soon as it becomes ready is impossible in an environment such as this, as it would create massive problems with different versions, and also have quite a large distribution problem. » Posted by: Kibbee at March 21, 2005 10:08 AMI think you're confusing iterative development and agile processes. Agile processes are iterative, but iterative processes aren't necessarily agile (like RUP). I'm comparing Agileware (the product of an agile process) with COTSware on a "business to project management translation" level, not on the end software product. » Posted by: Ryan at March 21, 2005 10:13 AMBTW, it is recognized that is it difficult to do COTS using an agile process because your "customer" is the marketplace instead of a company or a person. It's easier for developers to quabble over speculative markets than use a real customer's opinion of the product, which makes it easier for them to miss their mark and not satisfy the market in the best way. COTS software cannot be released as often as internal software either, which presents another challenge for an agile process. Feedback won't come back as often. Even though you could still have iternal iterations, the release milestones would be farther apart and market feedback (not just a few beta testers) is based on those releases. COTS markets seem to be best served by an iterative process like RUP and not Agile processes like XP. » Posted by: Ryan at March 21, 2005 10:26 AMI think that's where I'm getting confused. Your comparing the "product resulting from agile development", to COTS software, which implies a certain type of product, and does not limit itself to one specific development methodology. The "product resulting from agile development" doesn't infer any particular type of product, yet specifically looks at one development methodology. Agile development can really only be done on a certain subset of software. Agility is hard to do with a very large customer base, yet many projects through the use of the internet, and automatic updates, are moving in this direction. It will take them a little while for them to make it fully to agile development, but I believe this is where they are heded. » Posted by: Kibbee at March 21, 2005 10:58 AM"It's easier for developers to quabble over speculative markets than use a real customer's opinion of the product, which makes it easier for them to miss their mark and not satisfy the market in the best way." - This is so true. Thanks for this great post, Ryan. I love this summarization. » Posted by: Ben at March 22, 2005 10:19 AM |