Enterprise software development isn't fun
anymore. As young geeks, we pursued a career in software development because we
enjoyed technology, especially the part where we used a programming language to
create software programs. You remember, right? Each day at work was filled with
something new, exciting, and often-times profound. But for senior technologists
with their sustainable passion for technology, software development today is
less about writing code and more about performing other mundane activities that
we not only dislike, but know are counter-productive to our end goal. But agile
development, with its proven emphasis on individuals and working software, has
the ability to make software development fun again. If we're able to bring
agile to the enterprise, we just might make software development the way it
ought to be - enjoyable, productive, and valuable.
No More Fun
Oh, what
have we done to our profession? We have branded software process in the attempt
to make software development the repeatable, predictable, and plan-driven
engineering discipline that it cannot be. Most organizations claim people as
their most valuable asset, but few actually treat people as if they are valued.
Instead, we impose standard processes that regard people as pluggable parts. We
recognize the increasing complexity of business processes and technology, yet
we fail to acknowledge that such a tumultuous environment demands adaptability.
Experienced technologists interested in career growth are often forced through
the ranks of management and organizational hierarchy to achieve corporate clout
and increased financial stability. We negotiate contracts that we know cannot
be fulfilled, create documents and diagrams that gather dust in the dark
corners of a network drive, and walk the corporate hallways ashamed of our
failures.
For many,
this
Advertisement
dramatized depiction of enterprise software development is not far from
the truth. As a result, our industry is suffering as the best and brightest
developers are steering clear of the enterprise. Some are leaving the
profession to pursue other careers, while others accept positions at small
start-ups and "Web 2.0" companies in attempts to avoid corporate
drudgery.
The
problem is only exacerbated when studying our youth's disinterest in pursuing a
degree in information technology. A recent report in the March 2007 issue of
Computer Research News[1]
shows a 70% decline between 2000 and 2005 in the number of incoming
undergraduates majoring in computer science. While computer science remains one
of the more lucrative career paths[2],
not even the pleasure of riches save it from being labeled as one of the most
boring career options[3].
Of course, to claim agile development of itself will buck the trend would be
unprofessional and misleading. But living the values of agile development will
help.
A Tale of Two Processes
Software
development is a tale of two processes. For example, many organizations looking
to increase agility find that adopting Scrum as a project management discipline
combined with Extreme Programming as a development philosophy works very well.
Yet other organizations attempt to drive development of standards, processes,
and guidelines through enterprise software process improvement groups. The
promise of a repeatable and mature software development process is very
alluring. Establishing techniques to more effectively manage change, measure
return on investment, and standardize artifacts provides value primarily to
project management, stakeholders, and those funding the project. However, they
do little to help improve code quality, architectural resiliency, and
technological innovation. Software developers in the trenches require
activities, artifacts, and practices that are specifically focused toward
improving software quality, delivery, and the rapid feedback necessary to prove
and disprove their work. This is a process that lives beneath corporate
methodologies, and once discovered, adopted, and adapted, a powerful quality
emerges that naturally aligns the development team with strategic business
objectives.
The most
successful enterprise software developers recognize early that their highest
priority is developing software that provides value to the business. To provide
value, the software system must not only satisfy the needs of the customer, it
must also be resilient, stable, and perform well. Realizing this goal requires
that developers constantly prove the software throughout the entire development
lifecycle, with quality tests and frequent feedback. The tests must come in
many forms, including unit tests, integration tests, acceptance tests, load
tests, performance tests, failover testing, and more. Feedback from customers
and stakeholders will help ensure the software system is functionally correct
while feedback from peers and automated analysis tools will help improve design
and code quality. The elegance of these two ideals is simple for all they
require is a working software system.
The
practices employed by enterprise software developers in the trenches that
directly contribute to development of quality software cannot be driven by
project management or enterprise software process improvement teams. The
process used by the development team must be driven by developers in the
trenches. It is they who understand the effort that goes into creating high
quality software. It is they who recognize the value of frequent feedback.
Certainly, there may be practices and artifacts created by the development team
that exist to provide feedback to project management, but the inverse is also
true. Project management practices must be employed that provide the
development team with the feedback they need. For instance, project management
must recognize the value of frequent customer demonstrations and must work
closely with project stakeholders to ensure they are scheduled.
Making it Fun
Putting
the fun back into software development requires trust and commitment. Software
developers must accept professional responsibility for their work. They should
create high quality unit tests, and continually work to improve test quality.
They should seek client feedback and accept their constructive criticisms. They
should stay abreast of recent technology and trends, and identify innovative
ways that technology can be used that align with strategic objectives.
Organizations must entrust their employees with the responsibility and
authority to establish the processes that will produce the highest quality
software possible. They must recognize that the technology landscape is constantly
changing, and that experimentation with new technologies is a requirement for
all enterprise developers. Organizations with corporate governance and
compliance programs must recognize the experience and expertise of their senior
enterprise developers, and encourage their feedback and involvement. The
enterprise developer in the trenches must seek involvement in these corporate
programs.
Agile
development cannot be sold, it cannot be branded, and it cannot be productized.
While you can seek help in determining which practices will help increase
software quality, speed delivery, and reduce development cost, you cannot brand
trust and empowerment. The practices that your team will find most effective
and beneficial are a product of your people and their skills, not of a product
you purchase. As software developers, we must stand for those practices we
know will help us create the highest quality software possible. It is our
professional responsibility, and once we accept the responsibility to improve
our profession one small practice at a time, we will put the fun back into
software development.
Conclusion
Software
development is a complex activity. Ironically, process improvement efforts that
strive to improve predictability and quality have had the opposite effect,
turning software development into a mundane activity that stifles innovation.
Frustrated by bureaucratic processes, little room for growth professionally,
and lack of authority to control their own destiny, experienced developers are
choosing to leave the enterprise, while younger candidates are choosing to
avoid programming as a profession altogether. In addition to a proven approach,
agile development practices stand to put the fun back into software development.
About the author
Kirk
Knoernschild is Senior Technology Strategist at TeamSoft, where he leads based on his firm
belief in the pragmatic use of technology. In addition to his work on large
development projects, Kirk shares his experiences through courseware
development, teaching, writing, and speaking at seminars and conferences. Kirk
has provided training to thousands of software professionals, teaching courses
on UML, Java J2EE technology, object-oriented development, component based
development, software architecture, and software process.
[1] Vegso, Jay. "Continued Drop in CS Bachelor's
Degree Production and Enrollments as the Number of New Majors Stabilizes."
Computer Research News, Vol. 19/No. 2. March, 2007. http://www.cra.org/CRN/articles/march07/vegso.html