Approaching Software Engineering as An Evolutionary Process
A year or two ago I had an opportunity to sit down with AWS’s Marcin Kowalski in a cafeteria and discuss the problems of software development at almost-unimaginable scale. I walked away with a new (for me) conception of software engineering that is part engineering, part organic biology, and I’ve found this perspective has shifted my approach to software development in a powerful and immensely helpful way.
As Computer Scientists and Software Engineers, we’ve been trained to employ precision in algorithm design, architecture and implementation: Everything must be Perfect. Everything must be Done Right.
For smaller, isolated projects, this engineering approach is critical, sound and practical, but once we begin to creep into the world of integrated solutions and micro-services it rapidly begins to break down.
We simply don’t have time to rewrite everything. We don’t have time to build “perfect” solutions. We can’t predict the future.
Context matters. Circumstances matter. The properties and requirements of an emergent system take precedence over those of its constituent parts.