The Economics of Software Development: some ways to explain agile software development techniques with cost models and risk management approaches. Even some graphs and a tiny bit of calculus! Good if the audience wants to have some more-compelling ways to explain agile software development to colleagues and decision-makers. Technical, but not about code.
The Selfish Team Player: how to take care of yourself so that you can give more to the team, including how some agile software development techniques and approaches help us do this better. This is a kind of inspirational talk that focuses on the individual person and what they can do to work with less stress in order to perform better for themself and their employer.
Programming Is the Easy Part: a big overview of how to be a more-effective programmer, focusing on two parts: (1) how to “master” programming using techniques from XP, (2) programming was the easy part, so how to use other techniques (some from Agile and some not) to manage the work and to interact better with people. This is much more of the “big picture” and inspirational kind of talk, where each person in the audience probably sees some different place where they want to learn more.
Call Girls Service Tilak Nagar @9999965857 Delhi 🫦 No Advance VVIP 🍎 SERVICE
J. B. Rainsberger - The Selfish Team Player
1. The Sel�sh Team Player
I mean team player in a positive sense: someone who genuinely cares about the team’s results, who
decides their next step based on what provides great value to the team, who celebrates the team’s
successes as though they were their own individual successes. How do we attracts such mythical
people? How do we become them?
I mean selfish in a positive sense: not creating a martyr of oneself out of an abstract sense of duty to
the group, but rather understanding the limits to what one can give to the team and taking care of
oneself in order to be able to sustain giving energy to the team. Not altruism (give until long past
where it hurts) and not hedonism (reinvest all your energy in yourself), but reasonable self-interest.
And I don’t mean objectivism, but merely to lean away from arbitrary moral pressure. I mean to
merely acknowledge that one is not superhuman.
Help yourself so that you can help others.
The Problem
Most people’s personal bottleneck is their energy.
A bottleneck is the part of a system which limits the throughput of the entire system. Every
system either has a bottleneck or it has infinite throughput. No system has infinite throughput,
therefore every system has a bottleneck.
Most people’s personal bottleneck is their energy. If not now, then eventually.
People who have excess energy tend to volunteer for projects until they reach past their
capacity to do work. They overcommit.
When a person notices that they have overcommitted, they believe that time is the limiting
factor, so they work as much as they can for as long as they can to try to do everything.
Most people can’t sustain this pace. (If you can, then you don’t need to be here listening to
me.) Typically, they use more energy than they replenish.
Gradually, if they run long enough on an energy deficit, they fall behind on some of their
commitments. Breaking their commitments causes them emotional pain, which further
drains their energy.
A guilt/shame spiral develops: they commit to more projects in order to give themselves
new chances to meet their commitments so that they feel better, but this tends to lead to
more overcommitment. Their guilt/shame increases, reducing the amount of energy
available to try to meet new commitments, but they try to do that anyway. The result is an
Notes on The Selfish Team Player 1 of 11
2. amplifying feedback loop of draining energy.
If this loop continues long enough, the person burns out.
Even before burning out, if the loop continues long enough, then the person becomes
mostly incapable of helping others create great results. The person becomes mostly
incapable of acting as an effective team player. Many dysfunctions result.
Of course, the situation involves significantly more complexity than this, but most people have
experienced this pattern or knows someone else who has experienced it.
I would like to talk now directly to the people in the audience who have experienced this pattern or
are now realizing that they are experiencing it now.
“The Solution”
You need more energy. You can’t avoid this point. It is your bottleneck. Maybe your only path to
improving the situation goes through generating more energy. No matter which tricks you use, they
must result in replenishing your energy.
You probably have a common constraint: you can’t just shut off the world and recover for 6 months
to 2 years. Moreover, even if you did, shutting off the world might not give you enough energy back!
People are social animals and they tend to derive energy from contributing to their community, so
isolating oneself too long (in the name of recovery) will probably eventually result in draining energy!
What can you do? I propose to build a self-regulating system based on these two ideas:
Become more aware of how you use and replenish energy.
Learn and apply tricks to help you replenish energy when you need it.
I believe that most programmers in particular don’t even think about the first one of these and don’t
think of their work practices as instances of the second one of these. That’s why I teach the tricks
that I teach in the way that I teach them.
Three Areas of Improvement
I will talk directly to the programmers in the room now, but only because some of my advice relates
more directly to programmers than other people. The rest of you can still benefit from most of what I
propose, but perhaps not all—or at least, you might have to find different practices to achieve similar
Notes on The Selfish Team Player 2 of 11
3. results to the programmer-oriented ones.
I propose three general areas of improvement that tend to lead to increases in available energy:
Programming practice: writing code, design, architecture, testing
Planning and doing work: scheduling and prioritizing, but also focus and concentration
Communicating with others: interacting harmoniously, resolving conflict, influencing others
ethically
Most people can practise the communicating with others tricks with any spare time available. The
universe also tends to provide numerous opportunities to communicate poorly with others and learn
from it, so even if you do none of the other things, you can almost certainly benefit from those tricks.
At the same time, most people feel more comfortable talking about more “practical” tricks first, so I’ll
start there.
One Common Pattern
A programmer decides to improve at programming, so they read articles and watch videos and
generally choose to experiment by adopting some change in their work. At that moment, they risk
falling victim to The Learning Trap: learning requires investment in time and learning typically
demands room to fail, but the programmer already doesn’t have time to do anything more than
they’ve committed to, so they end up changing nothing.
First, I propose reframing the situation in two important ways. You don’t have enough energy to do
everything that you want to do and you have too much to do. Nothing you do will create time, but you
can do things to replenish energy and you can choose to do fewer things! This reframing helps you
justify doing (selfish) things that replenish energy. And although it seems impossible now, I am willing
to wager my own money you that you can do fewer things and get away with it.
Too Much To Do
Although this is another complex area, I have found several key points related to the problem of “too
much to do” that give you a place to start doing less.
Significant items fall through the cracks, then return to your attention when they become urgent
unplanned work. You intended to do something else today, but you are forced by some urgent
commitment to do this instead.
Notes on The Selfish Team Player 3 of 11
4. Fearing the problem of significant items falling through the cracks, you try to hold these
significant items in your head. You already have some urgent items in your head. You also have
some intention to do something productive today. All this makes it very hard to focus on one
thing and do it well.
Most people, fearing that they have too much to do, try to do everything more quickly, hoping to
barely satisfy everyone waiting for their work. This scattered attention tends to result in more
mistakes and lower-quality work, generally satisfying their “customers” less than they’d hoped.
This creates a guilt/shame spiral that amplifies the problem.
This guilt/shame spiral tends to lead people to overestimate the negative consequences of
not doing a given task. Most people in this situation hurt themselves trying to satisfy
“customers” by doing busywork that doesn’t really need doing. They end up wasting the
precious energy they have out of fear of disappointing people, even when they do not
represent the last line of defence.
Most people, trying to do more than they can do in a given day, become utterly unavailable to
respond to truly urgent-and-significant matters that carry significant negative consequences
and for which they are, indeed, the last line of defence.
If this sounds familiar to you, then I propose two ways to improve the situation: greater
concentration on a single task and a more-honest assessment of your current capacity to do
work. The tricks I propose require some courage to implement, but they typically lead to better
results. In some instances, they make it clear that you can’t stay in the work environment you find
yourself in right now.
I encourage you to combine a practice like Pomodoro Technique or Monotasking with the ideas in
Getting Things Done. The ideas in Getting Things Done can help you figure out how much capacity
you truly have and practices like Pomodoro Technique or Monotasking can help you complete work
sooner by taking advantage of the awesome power of concentration and focus.
Get Started
Read “The Two-Minute Rule” and start using it now. You don’t need anyone’s consent to start doing
this. Apply this especially to email and instant messaging channels. Ruthlessly assume that you
overestimate the urgency of requests that come to you.
Spend one afternoon trying Pomodoro Technique or Monotasking or some other style of working in
short bursts of time. Keep in mind the value of the breaks: not just resting your mind, but also taking a
moment to re-evaluate whether you need to switch tasks or continue what you’re doing. While you
practise this, you will experience some interruptions, and in those moments, apply the Two-Minute
Notes on The Selfish Team Player 4 of 11
5. Rule. Train the people around you to only interrupt you when they are absolutely certain that you
are the bottleneck right now in what they’re doing. This takes time, but it improves over time.
You will feel uncomfortable stopping when the timer tells you to stop. I encourage you to persist. You
are developing two key skills: concentrating and focusing on the current task, recovering quickly
from interruptions. This creates an amplifying feedback loop of greater effectiveness: more calm,
fewer mistakes, greater resilience, more efficiency, and even greater responsiveness!
To help you do these things, use the Inbox Technique. While you work, always have a place to write
things down. When something comes into your head or someone tries to interrupt you, write that
down in the inbox. Even if it’s something that you’ll do in the next 20 minutes, first write it down in the
inbox. The inbox stores these nagging items so that your mind can freely concentrate better on the
current task. When you finish a work session, check your inbox. When you finish the task, process
your inbox more thoroughly: delete, do, delegate, schedule, or defer.
If you practise these simple things for a while, you might notice a few benefits:
Completing smaller tasks sooner than before.
Feeling less distracted, more focused, and more confident about the quality of your work.
Some interruptions that seemed urgent at the moment take care of themselves within a few
hours, so you didn’t need to do anything about them.
You feel more available and more ready for the relatively small number of truly urgent issues that
come up.
All this helps you replenish your own energy: you use your energy more wisely, you focus your energy
on more of truly-meaningful work, you feel better about the results, you feel more in control of your
work, and you feel more confident about the results. This creates an amplifying feedback loop of
good feelings that increases energy over time.
What To Do With More Energy?
Since you have more energy, do less work, do that work more efficiently, and make your “customers”
happier, you can choose to reinvest that spare energy in a variety of ways:
Rest and recover. No, really!
If your office has a “Nap Room”, then use it!
If you have grown used to shoving “job” out of your mind while at home, then enjoy less of
the feeling of needing to do that. Feel more at peace not thinking about your job while at
Notes on The Selfish Team Player 5 of 11
6. home. Focus your energy on your family, your hobbies, your pets, or whatever else makes
you happy.
If you have developed coping mechanisms for forgetting about your job, then maybe you
don’t need them as much as you used to.
Teach your co-workers what you’re learning.
If it helped you, then maybe it helps them!
If you do this long enough, maybe you become a great consultant! Not everyone wants this,
but many people don’t realize that they could do it.
Use the extra energy to learn new techniques that will help you work more effectively.
Programmers practise TDD to improve their design skills and reduce their bug rates.
Product explorers practise Talking in Examples to reduce gaps in understanding about the
features we’re trying to build among the people trying to build them.
Everyone learns to automate more of their routine work so that they can spend more time
on novel work that usually delivers more value and feels better to do!
TDD and Evolutionary Design
Test-Driven Development is one way to do Evolutionary Design, which means building just enough
design now to solve the current problems with confidence that you can guide the design to evolve in
the direction of the next problem to solve. How does this skill help? It allows the programmer to avoid
over-solving a problem, wasting precious energy on writing code they don’t need in a way that other
people will have difficulty understanding later.
I teach TDD differently to different people, depending on the bottleneck they experience in trying to
deliver software features:
Bugs/support calls/checking that the code behaves correctly -> Focus on test-first programming
to build the habit of thinking about describing correct behavior precisely.
Design/maintainability/readability/ability to change the code later -> Focus on refactoring to
build the habit of gradually reorganizing the code to fit the current problem and to make it easier
to change code over time.
Rework/going “the long way”/recovering from changes in direction -> Focus on tiny steps to
build the habit of making design decisions easier to change and to feel more comfortable
keeping options open to change the design as we learn, which leads to smaller bits of rework just
as they’re needed instead of large amounts of rework at inopportune times.
As you learn these techniques, you feel like you are doing just enough work right now to solve the
current problem while providing just enough options to do future work without “painting yourself into
Notes on The Selfish Team Player 6 of 11
7. a corner”. You deliver features steadily over time at a pace that you can sustain and with significantly
less stress. When urgent unplanned work comes, you have the energy to deal with it, because you
also know how to (and take the time to!) reorganize and recover before getting back to regularly-
scheduled work.
I teach TDD because it acts as a way to learn all these skills a little at a time over time in a way that
you can really understand them. It provides thousands of opportunities to see “bad code” and “better
code”. It provides thousands of opportunities to ask “Do I really need to do this yet?” and “How bad
would it really be if I waited to do that part?” A programmer practising TDD learns many of the
lessons of Getting Things Done in an environment of constant deliberate practice. They learn these
things quickly and in an environment where they care deeply about the results.
A programmer who develops these skills delivers better results to the team with less stress and
sustains their energy better over time. That programmer is better able to handle emergencies when
they happen. That programmer remains calmer and helps the people around them to stay calmer.
The People Stu�
Most people should try to improve how they interact with others. Many people—especially
programmers—never learned ways to improve their interactions with others. We became interested
in computers because we understood them; people confused us. I started to improve my interactions
with others using three key techniques.
1. Communicating in E-Prime
2. Debugging Interactions with the Satir Interaction Model
3. Meditating
I started writing in E-Prime because I wanted to change my impulse to judge others. I felt that my
impulse to judge others interfered with other people’s ability to trust me and work with me. One
summer day in 2008 I started writing as much as I could without using the verb “to be”. It felt weird, I
sounded weird, I got used to it, I found other ways to formulate my thoughts, and I gradually started
judging people less harshly, less quickly, and less often. I can’t speak in E-Prime, because I still rely on
speech patterns I developed in my youth, but I continue to write almost exclusively in E-Prime. I make
fewer absolute statements, I facilitate open discussion better, and people find it easier to discuss
difficult matters with me. I work better as a coach and as a friend this way. I also put much less strain
on my relationships, which drains less energy from everyone involved.
I started using the Satir Interaction Model to debug bad interactions. The model gives me some
Notes on The Selfish Team Player 7 of 11
8. points to “check” as I review a bad interaction in my mind. Did I mishear what they said? Did I skim the
email too quickly and get the wrong impression from it? Did they really mean this when they said that
or did I understand something else? Most importantly, it reminds me of the power of interpreting
what other people are saying, writing, or doing. From this, I learned about The Fundamental Irony of
Interaction: you object most strongly to their response, but given their interpretation, they will
almost certainly feel perfectly justified in their response. If you want to change their response, don’t
object to it directly, but rather seek to influence their interpretation of the situation. This model first
helped me to understand other people better. It led me to become curious about what makes people
behave as they do. Gradually I became more curious about what makes me behave as I do. From here,
I realized that this model helps me understand and influence myself more than it helps me
understand and influence others.
I began meditating as a desperate attempt to manage depression symptoms without returning to
medication. I have noticed that when I meditate, I find it easier to take a moment to check my own
interpretations in a situation before I respond. I have noticed that when I don’t meditate for a few
days, I find it easier to do the things that tended in the past to make interactions worse, not better. I
have also noticed that when I meditate, I find it easier to bring even more concentration and focus to
my work. I find it easier to say “No” to people with compassion both for them and for myself. For a
variety of reasons, meditating helps me use my energy more wisely and replenish it more quickly. The
act of meditating itself replenishes my energy. I started with 10 minutes per day for 10 days, then
decided to try to continue. I have experimented with it for 3 years and, while I don’t manage to do it
every day, I have used some of the other tricks in this talk to gradually increase its priority and to
increase the chances that I do it every day. I can’t feel sure that it helps, but I feel quite confident that
it works better than whatever I was doing before. I feel more energy, and even the feeling of feeling
more energy leads to having more energy.
A Conclusion
Consider one path to greater effectiveness: start by getting your personal workload under control,
which gives you more energy to devote to improving technical aspects of our work, which creates an
amplifying feedback loop of more energy and less stress and more-effective production. As you
begin to feel some relief and some space to do more, integrate some of the tricks to improve your
relationships with other people. All these things together create a bigger amplifying feedback loop or
more energy and less stress and more-effective production. The more you do this for yourself, the
more you will feel able to give to your co-workers and your employer. You will truly feel better-
equipped to help others if you help yourself.
Notes on The Selfish Team Player 8 of 11
9. Contact Me
Talk to me: https://tell.jbrains.ca or https://ask.jbrains.ca or https://mastodon.social/@jbrains or
https://www.twitter.com/jbrains
Read more: https://blog.jbrains.ca and https://blog.thecodewhisperer.com
Work with me: https://experience.jbrains.ca or https://book.jbrains.ca
Learn on your own: https://tdd.training
References
Patrick Lencioni, The Five Dysfunctions of a Team. A model for how a group becomes a team. We
start with building trust and we end by genuinely caring about our collective results. Notice that
“attention to (the team’s) results” comes last and not first.
J. B. Rainsberger, “A Proven Path to Effectiveness”. One example of how to combine tricks from two
areas to build a programmer’s capacity to deliver features. As the programmer builds spare capacity,
they tend to feel significantly better about their work and about themselves as programmers.
Julie Morgenstern, Never Check E-Mail in the Morning. The detailed tricks in this book are probably
out of date by now, but the basic message endures: don’t start your day by diving into email without a
plan, because if you do then, then you’ll probably waste significant amounts of precious time and
energy.
Tom DeMarco, Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency. Some
arguments in favor on not letting yourself (nor your organization) become 100% busy.
Patrick Lencioni, The Truth About Employee Engagement. You don’t need to be a manager nor
executive to appreciate the ideas in this book. You might become more aware of the nature of your
engagement (or lack of it) at work. “Engagement” is just another way of describing how much energy
you bring to your work, either how much you have to offer or how much you choose to give.
About Getting Things Done
Maybe you don’t have time to read a book about how to build slack into your system. No problem!
Start here.
J. B. Rainsberger, “The Two-Minute Rule”. If you can’t handle a request in 2 minutes, then plan it. And
Notes on The Selfish Team Player 9 of 11
10. 2 minutes is less time than you think. Literally 2 minutes.
J. B. Rainsberger, “Get Stuff Out of Your Head… Now!”. How to get started with the Inbox Technique
to help you improve concentration and focus while working on a task.
J. B. Rainsberger, “Getting Started With Getting Things Done”. A 5-page guide that gives you the
mechanical core of the Getting Things Done technique, in case you still don’t feel ready to read the
book.
David Allen, Getting Things Done. When you are ready to learn the entire system, including how to do
the mechanics, and what happens after you’ve practised this for a while. The real value lies in your
behavior changes and mindshift, and not just in writing specialized to-do lists!
J. B. Rainsberger, “You Ain’t Gonna Do It”. One example of a behavior change/mindshift that can
come after practising Getting Things Done for a while….
J. B. Rainsberger, “Stop Future Work From Hanging Over Your Head”. Some tricks for getting future
work out of your head while you try to do one thing at a time.
Building Slack
J. B. Rainsberger, “You Can Start Enjoying Work More Today”. An example of how to invest in your
own energy so that you have more to give to the people you work with.
J. B. Rainsberger, “Q: Why Are You Taking All These Breaks? I Never See You Working!” If the idea of
working in short bursts and taking frequent breaks makes you nervous, then this might help.
J. B. Rainsberger, “Refactoring: Where Do I Start?” One of my first struggles to build slack into my
system: I wanted more time to refactor, but I felt pressure to do less of it, not more. I finally chose to
invest in my own slack so that I can deliver better results to others, and this articles describes how I
started.
About Communicating With Others
J. B. Rainsberger, “Why I Try to Communicate in E-Prime”. Why I started, what I expected, and why
you might consider it.
J. B. Rainsberger, “Stop Controling Your Reactions to Others’ Behavior”. An introduction to the
Notes on The Selfish Team Player 10 of 11
11. Fundamental Irony of Interaction and how to deal with it.
Dale Emery, “Motivation”. A model that helps me better explore various ways to interpret other
people’s choices to do or not do things. Of course, it also helps me better understand why I choose to
do or not do things.
J. B. Rainsberger, Speak Peace in a World of Conflict. I resisted the idea of nonviolent communication
for years before finally looking at it seriously. It had seemed cultish and disingenuous from the
outside. Although I don’t communicate nonviolently as a natural impulse, I have adopted the idea of
examining my own unmet needs closely to better understand my own behavior.
Notes on The Selfish Team Player 11 of 11