I was reading this book the other day called: Practices of an Agile Developer, and as soon as I started reading chapter one I find myself totally identified with the analogy that author makes with surfing and software development, I love analogies specially ones that are clever and actually do make sense and this one is just awesome. Here is what the book have to say with respect to software development and surfing.
Instead, software development is more like surfing—it’s a dynamic,
ever-changing environment. The sea itself is unpredictable, risky, and
there may be sharks in those waters.
But what makes surfing so challenging is that every wave is different.
Each wave takes its unique shape and behavior based on its locale—a
wave in a sandy beach is a lot different from a wave that breaks over a
reef, for instance.
In software development, the requirements and challenges that come
up during your project development are your waves—never ceasing and
ever-changing. Like the waves, software projects take different shapes
and pose different challenges depending on your domain and applica-
tion. And sharks come in many different guises.
Your software project depends on the skills, training, and competence
of all the developers on the team. Like a successful surfer, a successful
developer is the one with (technical) fitness, balance, and agility. Agility
in both cases means being able to quickly adapt to the unfolding situ-
ation, whether it’s a wave that breaks sooner than expected or a design
that breaks sooner than expected.