In a recent article I wrote about preferring Effective Software Development (ESD). I prefer being effective over being labeled as "agile" (whatever that might mean to you personally). This preference raises many questions for me. How do I define effectiveness? How do I know if I’m being effective or not? How can I become more effective? Is there any way I can help those around me be more effective? As you can imagine, these questions lead to many others.
I like the Wikipedia description of effectiveness. The description defines positive effectiveness in terms of efficacy and efficiency. Efficacy is the ability to produce a desired effect or achieve a goal. In a software development context, that might mean the ability to produce timely business value. Efficiency is the amount of effect that can be produced with a given amount of resources such as time or number of developers.
I think of efficacy as a primary component of effectiveness and efficiency as a secondary component. In fact, it’s sometimes desirable to intentionally reduce efficiency to increase efficacy. This is the idea behind having "slack" resources. The demands on a team are often dynamic and having slack resources for the peak demand times can improve the team’s overall efficacy. The challenge here is to know the right amount of slack to allow when future demands are uncertain. Of course, being highly inefficient will often not be efficacious. For example, wasting time on unnecessary or valueless activities might cause us to miss schedule milestones.
How do I know if I or my team are efficacious? I have to identify the desired effects I want to produce or the goals I want to achieve. A few examples might be:
- I want to produce something useful or valuable for my employer
- I want interesting work (learning new technologies, continually improving my skills)
- I want to generate sufficient income for my non-work goals like hobbies, travel, or retirement.
- I want balance between work, play, self development, and other activities
Of course, this list could become quite large and would be significantly different for different people. Sometimes the goals conflict and trade offs are required. Sometimes the trade offs are guided by values, but often observing the trade offs we make is a great way to discover our deeper and possibly unconscious and conflicting values. Create your own list. Are you achieving achieving those goals? How do you know? Do you judge your efficacy based on your feelings or by some quantitative method or some combination of the two?
So, are you as effective as you’d like to be? If so, that’s great. Ask yourself again every a few weeks. If not, what are you able and willing to do to improve your effectiveness? You might consider whether you have sufficient feedback. Are you evaluating yourself often (think of it as a personal retrospective)? It’s difficult to accurately predict the future effects of our actions so it’s good to get feedback frequently and adjust accordingly. Rapid feedback is a form of communication that allow us to courageously take action knowing we be able to quickly adjust our actions. This is starting to sound like the values of the first edition of Extreme Programming Explained. I don’t believe that’s a coincidence.