Home
Consulting
Training
Training Schedule
Articles
Downloads
Resources

Efficient Software Development

      It seems like I can't go a week without getting into a discussion about outsourcing.  Since the bubble burst, there has been constant pressure on managers to cut cost and increase efficiency.  Management is doing exactly what they should be doing, ensuring that they are getting the most for their money.  If they didn't, the entire company would be in jeopardy.  Unfortunately, the easiest solution is to simply outsource to a cheaper alternative.  Although this is typically easier said than done, it does work in many cases.

    Fortunately for software developers, outsourcing is far from the only answer.  I have now consulted on a number of projects that were in danger of being outsourced and so far, none of those projects have left the building.  Why?  The answer is simple; we made the project unattractive for outsourcing.  We did that by doing exactly what management wanted:, increasing our own productivity, decreasing time to market, and reducing overall development costs.

     We kept the projects in-house by creating an agile team that re-used commonly available, standard software and tools.  It's a simple statement, but it contains some very important ideas.

     First, let's focus on the team.  Much smarter people than I have bandied about the term agile, but here's what I think of when I think of an agile team.  An agile team is one where the members work together. An agile team takes communication very seriously.  They employ good source code management techniques, sharing all their code and working on the code as a common code base, not a set of individual components.  An agile team takes testing very seriously.  An agile team delivers early and often, forming a solid partnership with QA, marketing, documentation, support and the final customer.  An agile team takes responsibility for the project as a whole, wanting more than to just develop great code, they want to deliver great software.  In short, an agile team keeps their project in house because you couldn't imagine this kind of commitment elsewhere.

    Software reuse is the second part of the above statement, but it's just as important. When I say re-use, I mean many things.  

    First, programmers need to know the language they are using, not just parts of it.  Without a full understanding of the language, programmers waste countless hours writing code that they could get for free by simply knowing the language.

    Second, programmers need to know what's available from third parties.  A software engineer's job isn't just to be a good coder, you also have to be aware of what you can re-use.  Can you imagine an electrical engineer deciding to build a fax machine from scratch?  Of course not, but that's what software engineers do every day.  Without awareness of what's out there, how can you be an efficient programmer?  For every hour you spend re-inventing the wheel, that's one less hour you have to spend getting your product to market.  That doesn't even take into account the fact that re-invented software also re-invents the bugs and necessary debugging steps to remove those bugs.  Reused software has other people working on it, other people finding and fixing bugs.  The cost is shared among all of the users of the code.

    Third, your in-house code base needs to be accessible to all in-house programmers, not just other members of your immediate team.   Unfortunately this is rarely done, which makes no sense.  Why should the Apache code base be more open to you than the code the guy in the next office wrote?  Open code within the company offers the same advantages of open source on the Internet, with the added advantage that you're all in the same company, with similar domain issues.  If someone already wrote a toolkit that does 90% of what you need, then you should start with their source code, not start over.  If you change the code, then it's your responsibility to insure that your enhancements are available to the next programmer.

    An agile team that re-uses code becomes a set of efficient developers.  Instead of seeing their project outsourced, they see it expanded and new projects added to their plate. 

    The concepts of the agile team have formed the basis for our mission statement.

  

Our Mission Statement

 

    To ensure that customers know the features of the languages they use. To educate customers, using consulting and training in the latest re-usable frameworks, APIs, and toolkits.  To further help customers to employ tried and proven best practices that insure efficient development. 

 

1135 Pauline Blvd. Ann Arbor MI 48103 - (734)-657-0267 - service@emeraldsoftwareinc.com