Wednesday, December 1, 2010

Refactoring - a #Reverb10 reflection

#reverb10 December 1 One Word.

Encapsulate the year 2010 in one word. Explain why you’re choosing that word. Now, imagine it’s one year from today, what would you like the word to be that captures 2011 for you?
(Author: Gwen Bell)


Years ago, interested in my then-boyfriend's work, I read a book from his shelf called "Extreme Programming." This is a book about software development for software developers, but it is more than that - it is a philosophical treatise. I was struck, at the time, that despite technical language and limited scope, the approaches described held significant application to human systems, change management, and personal development. One key concept is "refactoring."

Here's the Wikipedia definition:
Code refactoring is the process of changing a computer program's source code without modifying its external functional behavior, in order to improve some of the nonfunctional attributes of the software.
In general, functional attributes define what a system is supposed to do, whereas non-functional attributes define how a system is supposed to be. Behaviours and Values. 

Software is very human in some respects. There is no bug-free software. Period. It's full of old processes and dead ends that used to try to do something, errors in logic, outdated functions, cobbled together ideas from many people of varying competence and vision, and other weirdnesses. The result is instances of spinning wheels, confusion, and sometimes, total and complete shutdown - but only under certain circumstances and demands.  Software isn't complicated - it's complex. Like life. Like us.

And, software is in use - it's not optimal to take it off line (any more than I can go hide out in a monastery for a year). It's not practical to start over. Instead, Extreme suggests refactoring the system - an ongoing, disciplined approach that identifies particular areas of concern, and allocates time to systematically analyze and understand just what the implications might be for changing or removing something that seems problematic (as well as how to do it). There are always side effects. 

Essentially, refactoring involves reflection, understanding, and trial-and-error tinkering with a system within safe spaces and times, in ways that are invisible to the external world. When it's important to take specific areas temporarily off-line, it's done in a planned way that provides detours (preferably invisible) for external needs. The rest of the system continues to function.

Complex systems will always be flawed, just like grass will always grow back when you mow it. I will always be flawed, and I am always growing. I am as complex a system as they come. When I look back over 2010, I realize that I am becoming more skilled at refactoring myself. I create spaces when I need to go offline. I don't try to tackle the whole system at once - I prioritize, and take the time to really understand. All my processes are inextricably linked and hopelessly tangled, and I am untangling the worst ones, often freeing whole sections by undoing a single knot. I am tinkering daily.

How?  Exercise. Music. Yoga. WRITING. Present play with my kids. Intimacy with my husband (this doesn't just mean sex). Connecting on Twitter. Reading outside my zone. Conversing with my universal, sometimes out loud. Laughing. Appreciating. Contemplating the abundance I have in my life, and my outrageous good luck before I go to sleep. 

How? Crying. Freaking out. Facing my own dark pockets where hatred might find a cool place to grow. Feeling despair. Feeling afraid. Feeling futility. Letting my universal be sad with me and comfort me. 

How?  Making a little time and space every day, sometimes throughout the day, to feel deeply and think about what I'm feeling. Checking in with myself regularly. Creating reminders that help me to stop and remember who I am. Checking in with my touchstone people when I start to crumble. 

How? Giving myself permission to be just as I am, and encouraging myself to specific, achievable improvements. Failing, and trying anyway.

How? Practicing presence. Practice.

I'm reprogramming myself, slowly, often painfully, to keep my mind more open, my heart more open, my skin thicker and my core clear and centred enough to withstand the assaults of unskilled "users." These are just a few of the "non-functional attributes" that I want to embody in my system architecture. I'm finding my dead-end paths and disruptive processes, and slowly picking away at removing them safely.

Refactoring tries to make the system more resilient and extensible, easier to read, and more clear about its individual decision points and functions, without impacting functionality. It's a bonus if refactoring improves functionality. 

I always did want to go for the bonus marks.

(the word for 2011? Still thinking...)


  1. i love this kind of hopping - from one context to another. and i agree: reprogramming is absolutely a philosophical treatise. we are deliciously complex beings, our processes inextricably linked and hopelessly tangled. such wisdom to take it a bit at a time, know your own process, your own tangles, your own salves and remedies. this is a fine word for 2010, and a fine post. just the kind of crackerjack, whipsmart writing i've come to look forward to from you, louise. xo

  2. wow. that is my word, for this. that is life: refactoring.
    loving this, and you.

  3. This is so very clever and thoughtful! Thank you!
    What a brilliant word to walk away from 2010 with.

  4. The Writer and the Tech-Geek inside me got all tingly over this post! Brilliant!

  5. Loved it! Sounds like 2010 was full of complicated, but worthwhile work for you. I wish you an operating system that runs smoothly and happily in 2011!

  6. I'm overwhelmed with your responses on this post! I'm already glad I'm trying out #reverb10 - can't wait to catch up on some of the other posts...

  7. I love this idea of practicing presence. I'm playing around with this one concept in my head. We can be in a place, with people, be around, but not necessarily present. It takes practice. To be present. I love this.

  8. Thanks for this elegant reminder that neither starting over nor going offline is optimal (if they were ever even optional). I think "refactoring" will be my second word for 2011 :).

  9. I was already in love with you, now you have added to your awesomeness. I love the concept of refactoring. You and Becky @bsfirstpages are my inspirations. You both show amazing courage in facing fears and pain. I have been in the mode of "don't wanna" for a long time. In 2010, through twitter and the amazing friends like you who I've made there, I have opened up more than any time in the past two decades.... maybe ever. But then I run and hide from the feelings. My word for 2010 is pain. My word and goal for 2011 is "refactoring." Thank you so much for sharing yourself and your journey. Love you! *Big squishy hugs*


Note: Only a member of this blog may post a comment.