Expanding and Contracting
Series: reflections May 02, 2013
I’ve been thinking about the concept of expansion and contraction lately.
At a Developer Level
Developers (okay, at least me…) seem to follow an Expansion/Contraction Cycle.
We pick up a new idea and explore, expanding our abilities.
If I have toyed around with Ember.js, I may be capable of doing a client-side MVC app — but am I really suitable? Am I the right person for the job? Is Ember.js even the right tool for the project?
Hopefully, this expansion is accompanied by a phase of contraction — culling down the less successful concepts.
It is great to learn new stuff, but make sure you periodically survey what you’ve found and determine which parts are really valuable.
At a Company Level
There has been some discussion at work recently about standardizing some development processes. Not any big top-down bureaucracy stuff, but rather making a more deliberate effort to default projects to use techniques and practices that we’ve found to be beneficial.
I was again reminded of the cycle. A team tries out a new way to track project progress or a different way of doing code reviews — they expand their capabilities. Each project does some exploration to find alternative ways to do things.
One team tries two week sprints, another tries a new work management tool. We can now generate real-time burndown charts based on git commits — but is that the best way to communicate project status to the client?
There is strain on the teams from increasing capability without keeping an eye towards suitability. People thrash around trying to figure out the Right Way to enter a bug into the system. We become dogmatic about processes that no longer provide value.
Both phases of the Expansion/Contraction Cycle are necessary.
Without expansion, you will hover around a local maxima — expending large amounts of time and effort for minimal gain. Without contraction, you drift around in a sea of endless options and have only surface-level knowledge of anything.
Near the phase transitions, tension occurs.
Ever feel like you are just jumping between tools and concepts and can hardly keep up? Maybe you aren’t cut out for this programming thing after all? You are near the end of expansion phase — it is probably time to take stock and dive into the most promising items.
Do you feel stagnant? Bored? In your own little bubble? You are at the end of a contraction phase — go try out that new framework or grab that book you’ve been meaning to read.
It is okay to feel these emotions as you ride along the cycles.
By being aware of this cycle, you can accelerate the transitions to keep from being stuck in either phase for too long.