|
|
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.
|