Adventures in Mob Programming - Day 150

After 5 months of being a mob programmer, I have to say that I've never enjoyed coding as much as I do now.

I find that I have a "scrum master" brain and a "programmer" brain that dance around each other in my head during my work days. Sometimes I wonder whether my mob has discussed a kanban card in enough detail to uncover as many of the knowable unknowns as we can; sometimes I wonder where the curly braces go when writing an arrow function in Angular. In either case, as a mob programmer, I get to lean on my fellow mobbers for guidance and input.

I appreciate working somewhere where the "scrum master" brain is still appreciated, even though my job title is Associate Software Developer. The sorts of questions that came to my mind when planning a sprint still come to my mind when my mob is looking at a kanban board and slicing our work into consumable chunks. The best part is now I get to help discover the answers to these questions, instead of just posing the questions as an outsider.

One thing I'm coming to realize is that mob programming can be a great equalizer. It lowers the barrier of entry for new programmers, and can allow new-comers to contribute technically sooner than if they were left to their own devices. One of my favorite experiences has been inviting our UX designing into the mob with us, working together in real-time to make decisions on the look and feel of our website. In my humble opinion, mob programming what the first Extreme Programmers were day-dreaming about work being like. I hope that in the near future, mob programming can also allow more people to find a place for themselves in the tech industry.

Our industry still has a problem with blocking out folks who could be great programmers from being able to be programmers. I hold a view that my peers may disagree with - I don't think being a programmer has to be as difficult as we like to think it should be. Programming is about problem solving with others using various tools and technologies; it's not about being the smartest person in the room. Especially in this world where we can remotely work from the comfort of our own homes, we should be using mob programming to widen the net of who will be in the next generation of programmers. The world is made up of very many different types of people; our industry should be made up of very many different types of programmers.

For now, I will enjoy my renewed ardor for programming and collaborative work.



Adventures in Mob Programming - Day 8

I had the sensation that not everyone in my mob appreciates from experience how special a workplace Hunter is, and today I was proven right!

As I mentioned yesterday, today we had a visitor to our mob in the afternoon - Shreya, a friend of mine from the Women in Tech Network for Arizona Alumni group (WITNAA) that I'm member of, stopped in to see what mob programming at Hunter was like! I don't know Shreya super well yet, but I do know two things about her: one, that she is super sweet and friendly, and two, that she is whip-smart! She jumped right into our mob this afternoon and contributed well!

She asked a lot of great questions about the process in the mob programming department here at Hunter. As I expected, the other members of my mob were extremely patient, clear with their explanations, and easy-going with our visitor. It was extra fun for me to add in additional context that I may have appreciated when I first started!

Near the end of her visit, we were just chatting about the history of mob programming at Hunter as well as the processes (or non-processes) that we use here. We compared and contrasted what mobbing looks like remotely versus how it was in-person.  I shared an anecdote I had heard about how noisy mobbing was in person; my team-mate who had mobbed in-person agreed and expanded upon it. Shreya asked how we keep track of work and whether we use an Azure Devops board or otherwise - we pulled up our per-mob Kanban board as well as the high-level Kanban board for the whole team. She asked how we craft out our stories, whether we have a refinement session or not, who determines that; I aggressively pointed to myself while on mute, trying to eagerly express "we do! we get to do the vertical slicing ourselves!" while my teammates explained this further to her. I wasn't sure if they quite realized exactly what she was asking, considering her career background and frankly my own.

For the last couple minutes before Shreya left, I had to ask her a few questions about her experience in our industry - do you run Scrum and have sprints? how long are your team's refinement meetings? do you do a "scaled agile" sort of meta-planning, in addition to planning each sprint? While I believe firmly in the agile dream, I know that that's not the reality for the vast majority of software workers today, even at places with otherwise "modern" practices. I am always fascinated at the ways that corporate software shops do and don't apply agile practices, and do or don't achieve the spirit of agile in spite of/because of these practices. Asking these questions to Shreya gave me insight into how yet another software team operates, warts and all.

While we were chatting, one of my teammates volunteered some super interesting information that I had suspected since I first joined the mob - the majority of his work experience was at Hunter, doing these great practices like #NoEstimates and vertical slicing and TDD and honoring psychological safety. He freely admitted that some of the stuff Shreya and I were speaking about was something he had little understanding of, and no experience with himself!

After we thanked each other for the time and said good-bye, my mob hung around for another few minutes wrapping up discussions and talking about the afternoon. Naturally, I had to ask my mob more about that subject my teammate brought up - what other experiences have you had working in software, whether agile or no? The other two members of my mob agreed with the first, that the majority of their software industry experience has been at Hunter. I took the opportunity to explain some of the pain points of some allegedly agile practices - like running scrum, having up to two hours spent planning a sprint and agreeing on what to work on next. I spoke about practicing SAFe, what a PI Planning exercise can be like, all the overhead involved, and the questionable return-on-investment with that overhead (let alone the negative impact it has on software workers). Having been a begrudging SAFe practitioner for over 2 years has greatly impacted my view on what really works in the software industry, and my journey here started with being disillusioned with SAFe as a framework.

I wonder if we can improve the experience for software workers all over if we talk more about what our own experiences have been, and how those experiences do and don't align with our ideals. Could this be a session of lightning talks, just jabber away for 5 minutes about your process and what you do and don't like about it? Could this be a workshop, where attendees get to be introduced to some of these modern ideals like TDD and psychological safety? Would more folks want to create change in their own organizations if they realize that these ideals are actually attainable, and sustainable?

I may need to chat with Shreya to see if I can do something like this with her WITNAA group. 

For now, more training! I'm at Open Agile SoCal tomorrow and the next day, so not much mobbing for the rest of the week. I plan to make one post about the conference, so perhaps no Adventures In Mob Programming until next week.

Adventures in Mob Programming - Day 7

Today was a bit of an odd day for me, but I keep reminding myself this job is so different than any other I've had that most things would still feel odd after only 7 days.

I was reassured of this during lunch with my new friend Sandra, who had actually been on my interview panel. She asked me last week if I'd like to have a "lunch-time visit," so we met over Teams for the first 30 minutes of the 12-o'clock hour and just chit-chatted. The number one thing I missed about working in an office (and that I was apprehensive about losing by working from home) was the interpersonal relationships built by being co-located. Having this lunch-time visit was a balm for that. She's been a mob programmer at Hunter for years now, so she's been helpful in normalizing this experience I'm having.

I keep forgetting that I really do get to work from home from now on. I don't have to worry about a theoretical office re-opening being scheduled and re-scheduled, the questionable inevitability of returning to a shared office. I'm working from home. My house is my workplace. I get to make that work for me. 

Today it was announced that a friend of mine from a networking group - actually, the one who put together the lightning talks on resilience in tech yesterday! - will be visiting Hunter tomorrow. I'm really excited to see another person get to learn what mobbing can be like. I think she'll be joining my mob for the visit, too! 

We had the second session of our AWS training today, which I appreciated but struggled to follow. I always find working with AWS to be confusing, because there are so many things! Have you seen that AWS Services drop-down at the top of the page? Today I learned about EventBridge, CloudWatch, Kinesis Firehose, S3 buckets, AWS Step Functions, something called SAM with a chipmunk logo - and don't forget all the associated lingo, like events, messages, event buses, rules, SNS, and who knows what else I forgot. Actually, I realize that I do know about S3 buckets, but there was so much going on in the session I forgot that I did! 

I couldn't focus much during the class and could not complete the exercises during the time allotted.

With a few meetings tomorrow, then the conference on Thursday and Friday, I already feel like I won't have very many more hours of programming with the mob this week. That's okay. I'm really eager for Friday afternoon, and the opportunity to try to level up my Angular and rjxs knowledge. Like yesterday, I continue to feel more comfortable wielding the computer keyboard when I am driving. While its maybe not quite like a bicycled, the knack for assembling logic is coming back to me.

We talk about why it takes courage to program in a mob, or give feedback of any sort, but I'm not sure if we talk enough about why it does - the mutual vulnerability between driver/navigator or evaluator/evaluated that is required for either to evolve. Ideally, in settings like this, giving feedback can be as transformative as receiving feedback. There is always room for growth, but every tiny step of growth is hard-fought and well-deserved, no matter how small a step it seems. Every tiny shred of insight I offer to my mob is so satisfying.

While this experience at Hunter is different than any other job I've had, I see the contrast is most stark when compared to my prior job. I'm on camera less. I'm using my brain more. I'm out on a limb more. I'm learning more technical things in the last week than I've needed to in the last year. I have less responsibility than my last job, yet somehow also more responsibility. I have core working hours to observe, but no responsibility for the calendar. I get to be a member of a team instead of outside of it. Even with all the positives of this change, change is still change - and change is difficult for mere mortals such as ourselves.

I'll admit it, I was in a low mood today. Instead of panicking about it, I took a break to let the mood pass - then, when it did, I did more work on the AWS training like I had planned. That's a success.

Adventures in Mob Programming - Day 6

Monday was a super busy day!

In addition to working a couple hours with the mob, I also had my first meeting with my director, Chris Lucian, as well as an AWS Immersion Day workshop all afternoon. This is a bit of a funny week for my team, as many of us will be attending Agile Open SoCal on Thursday and Friday, and we're having these AWS workshops yesterday and today all afternoon. Sometimes that just happens! 

While I still have a long way to go, I do feel like I'm starting to feel oriented in this environment. Its as if I were plopped on a deserted island alone, and am finally starting to understand where the landmarks are in relationship to each other. I still have a long way to go as far as technologies go, but I do feel like I'm getting my bearings.

Speaking with Chris was so illuminating! I knew that Hunter was a different sort of organization, but every chance I get to learn exactly why is exciting. One thing he shared with me is how we try to keep a very flat organization, which allows more ownership by the engineers themselves. It's palpable how much ownership engineers feel over their work and process here at Hunter, and this seems to be the foundation for that.

Monday was especially enjoyable because at the end of my workday, I got to give my very first lightning talk, at an event focused on resilience in tech! One of my good friends started an alumna organization for those who graduated from Arizona universities and went on to work in tech. I spoke on Richard Carlson's book "You Can Be Happy No Matter What: Five Principles for Keeping Life in Perspective". For my first lightning talk, I think it went great! When I have the link to my talk, I'll share it here!

If you're unfamiliar with this book, allow me to share with you the five principles:

  1. The Principle of Thoughts/Thinking - You are not your thoughts; you are the thinker of your thoughts. Thinking is a function that originates inside of us. Your thoughts are something your brain produces, whether you want it to or not, and whether your thoughts are accurate or not. You don't have to pay attention to every thought you have, and in fact you shouldn't!
  2. The Principle of Moods - Moods are part of the human condition - moods frequently change and shift, and you may notice one mood doesn't stick around for too long. Our thoughts inform our moods, so thinking of positive things may bring about a positive mood just as thinking of negative things may bring about a negative mood. As Carlson says, "when you're in a low mood, learn to pass it off as simply that: an unavoidable human condition that will pass with time, if you leave it alone and avoid giving it too much attention"
  3. The Principle of Separate Realities - All of us approach life from our own reality, our own viewpoint, our own interpretation of life. We cannot expect others to behave as we would, or see life the same way we do. So, we should instead expect that others will NOT behave as we would. 
  4. The Principle of Feelings - Feelings act as a built-in feedback loop that informs us of what we really think about what's happening around us. As Carlson says, "our feelings are to our mental health what the warning lights on the dashboard are to our automobiles." Bring your feelings to work! Reflect on the feelings you have! Honor them and pay attention to them!
  5. The Principle of The Present Moment - if you practice mindfulness or meditation, you may know this one already. Focusing on the present moment, as opposed to the past or future, helps bring about an easy, light feeling. We focus on the moment we are living in as it's happening as an attempt to stop being reactionary. The goal is to become less preoccupied with our thinking, as it colors our moods, eventually scaffolding our interpretation of reality, and can bring about negative feelings. 

Despite my adventures in mob programming and my satisfying chance to share how I stay resilient during this day and age, my favorite part of the day yesterday was my family's monthly Moon Viewing party for the full moon! Few things are more satisfying than spending time with family out in nature (or as close to nature as you get in the big city) after a day of focused work.

Its nights like yesterdays that make me happy to skip writing a blog post - however, I'm eager to get back on track today, so expect another post later!

Adventures in Mob Programming - Day 4

After getting all rested up yesterday, I was really excited for resuming mob programming today. I see the appeal of the cyclical nature of mobbing; rotating driver and navigator, taking breaks every so often.

Today was a little different than typical work-days, because there was an Agile Alliance Tech Talk that I wanted to attend! I listened along to stand-up as the Tech Talk was spinning up. I really enjoyed today's talk, titled "The Future of XP," facilitated by Cat Swetel and featuring Tiani Jones, Jesse Alford, and Wouter Lagerweij.

I love to live-tweet virtual talks I attend, so take a look at my Twitter thread here:

When the talk was over, I took a short break then jumped in with the mob.

We actually got to write some fresh, new code - a new feature for one of the products that we sell. This was also my real first chance to practice things like TDD or coding by intention - things that matter to me, but that I've never been able to try in the real world. It was a little clunky at first, but the other folks on my mob are proving to be as excellent of coaches to me as they are to each other.

As we began this work, it was another reminder that I still have a tendency to bite off a smidge more than I can chew. This was an observation I made yesterday, and I'm glad I noticed it sooner today than yesterday. This was really obvious when we wrote our first tests for the feature we wanted to create. I was thinking of the final result only - this complicated, multi-step calculation. The rest of the mob was thinking of just the first piece of this calculation, and it took me a minute to see things the way they did. To me, this feels like the beauty of mob programming - I look deeply, deeply forward to learning good practices from this mob, and eventually from everyone on the team. I already have half of a post on what we were writing! I look forward to finishing that up and sharing soon.

So far, we've been less rigorous with the role of driver/navigator - we absolutely switch driver, but allow for some wiggle-room as far as navigation is concerned. For my first week as a professional mob programmer, this has been perfect. Others may disagree, especially if they feel the structure is essential for the practice, but I find it to be an easier way to dip my toes in. It also gives me the freedom to ask questions whenever I want, as opposed to only when I'm navigator. 

Today we also had the team's weekly retro, which was engineer-led! Having facilitated 4-6 retros a month for the last 18 months as a scrum master, this was very refreshing. At Hunter, I have yet to meet a project manager. Its delightful to focus on just technical problems, and being part of a team that takes ownership over them. It was a simple Liked/Learned/Lacked structure, and at the end we decided on action items, voted on the ones that mattered most, and assigned owners to that work. I look forward to my opportunity to facilitate one as a true peer, instead of an outsider.

Another thing I look forward to is tomorrow's internal Open Space! I mentioned on Day 1 that I got a ticket to attend an Open Space conference next week, but the event tomorrow is purely internal, for the mob teams. One of the sessions is working on a code kata together, which I absolutely plan to join in. I have to keep practicing mob programming each chance I get, right???


Some resources for today:

Adventures in Mob Programming - Day 3

It's really amazing how succinct and simple stand-up can be when you're doing mob programming.

I'm on one of three mobs of a particular team, so our stand-up has something like 15 people in it, including some product folks. Our stand-up is structured with one person on each mob speaking about what their mob plans to do today based on the day before, as opposed to each individual. After all, everyone in a given mob was working/will work on the same thing!

Hunter specifically does some neat rotation between mobs and teams that allows everyone to work with everyone else. This sort of rotation also allows for folks to gain insight on all parts of a particular app/product, and theoretically on many apps/products. I'm really excited for the chance to work with everyone else, on all the things.

Anyway, today was actually my first full day of mob programming. Right after stand-up, we took our short break, then we dived in. We spent the morning mobbing together for about 3.5 hours trying to fix an issue with a CI pipeline, then in the afternoon we mobbed for another 3 hours wrapping up the pipeline issue and getting started on a chunk of new work. 

So far, these are my favorite things about mobbing:

  • The chance to listen to fellow mobbers, process what they're doing, and learn from it
  • Getting to ask questions immediately when something is u
  • Feeling helpful and useful with even limited domain knowledge (since all members of the mob get to share the domain knowledge)
  • Taking deliberate steps that all members of the mob are on-board with

There were a few times during the day where some old mental patterns came to play - fears of "I will not be able to solve this problem!" or "I have no idea what's going on, and never will!" or "These people probably think I'm totally stupid!" 

These were the sorts of thoughts that would fill my brain while coding alone, which would become so noisy that I couldn't focus, eventually proving all those negative thoughts right. The whole reason why I wanted to try mob programming is to avoid this type of negative setting. I'm a believer that I am not my thoughts, and that I shouldn't take my thoughts too seriously - however, this is easier said than done. Today, when I found I was too in my head, I tried instead to focus on the three delightful members of the mob, and what we were doing collectively. I'm sure there are moments where I did sound pretty stupid - these days, my goal is not to clam up so as to avoid those moments, but instead to lean into it and actually try to learn something.

I can already tell that my biggest hurdles to becoming a great mob programmer will be focus/attention and learning to learn

While working from home offers some incredible benefits (especially for a privileged person like me with fast internet and a spacious, quiet home) it can become super easy to lose focus on the task at-hand. Part of this may also be my neurodivergent brain, but I'll be honest - there was a moment or two when I was startled to discover I was staring into my phone when I should have been paying attention to the mob. Tomorrow, I plan to keep my phone far away from me, and probably dig up my fidget toys to play with instead.

As far as learning to learn, this one is a bit more tricky. Many software jobs I have held in the past didn't have cultures that encouraged learning or growth; it was the status quo to stay-put. If we're being real with ourselves, I would imagine many software shops are actually this way. This seems to me like the antithesis of true Agile spirit - since how can we be consistently improving if we're not, like... actually improving?

My antidote for my exhaustion after a hard, full day's work of mob programming? Taking a bubble bath. 


Adventures in Mob Programming - Day 2

I'll admit it - the transition from Mac to Windows is going a little clunkier than I had anticipated.

What's the shortcut key to take a screenshot of a single window? Why are the menu bar buttons on the top right and not the top left?? Will I ever stop accidentally doing Magic Mouse gestures on my very dumb Logitech mouse???

However, even if there were minor annoyances/adjustments, today was a very delightful day.

Stand-up was casual and easy-going. I got an impromptu overview from the product owner for all the acronyms and components. It lasted about 40 minutes, and someone told me it's not usually that long. I don't typically see an issue with a longer stand-up as long as folks are benefiting from communication together - but it was still refreshing to know this team doesn't typically have drawn out stand-ups.

After stand-up, we took a short break then went out into the mobs. I had to install AnyDesk in order to see what everyone else was looking at, but once I figured it out the process was easy - someone spins up a teams meeting, shares the remote address, everyone remotes in, and away we go.

I still feel a little helpless when I get the navigator role. Part of this is simply because I'm new to mob programming - but I know part of it is a smidge of self-doubt. All I can do is take a deep breath and try to slow down a little more. Its my way of practicing taking many more much smaller steps in a non-technical way. After all, MMMSS can be applied to more than just coding; it can be a good reminder to stop before taking that big, risky leap and instead determine a safer place to deliberately step to that will actually get you ahead.

In the afternoon, there were a couple meetings - a retro where the team discussed experiments they were trying, to determine whether to adopt them as working agreements or not, and a discussion on a design decision the team wanted to make together. I also had an onboarding meeting with three of my new colleagues (two of them fellow women, yay!) who shared with me the Manifesto for Software Craftsmanship and discussed the Satir Change Model

I have never been more reassured than when one of the delightful women who interviewed me reassured me that the entire team knows to lean into the change that happens with a new member joins a team. After all, its not the same team as before, its an entirely new one! Why not embrace it?

I even received some excellent advice from that woman - time as the navigator can simply be used to ask questions and become re-oriented! I'm going to ask so many clarifying questions now!

Throughout the day, I noticed and appreciated all of the little things put into place so that we as programmers can "not think" - or, to reduce our cognitive load. I have always found this concept so fascinating, even before I got into this industry. How can this be routinized? What mental model can simplify this concept safely? What can be chucked behind the curtain so I don't have to look at it again? Maybe it has something to do with being an anxious person, where I need to clear all of the psychological clutter before I can even begin to focus. I'm always delighted to learn that something I assumed was a "me" thing is actually shared by my fellow human beings.

What I still can't get a grasp on is Microsoft Teams! I find it SO annoying that I can be in a meeting, caught up on the chat, but the main Teams window will have a little notification bubble directing me to... that same meeting chat but in a different place???

Oh well. I'm sure there are many other minor annoyances that will make themselves known in the coming weeks. I'm just delighting in the fact that I get to be a mob programmer. Tomorrow I should get to spend more time with the mob, and I'm very excited.

Anyway - I have some studying to do!


What did I study today?

Adventures in Mob Programming - Day 1

Today was my first day at Hunter Industries!

I'm over the moon that I get to go back to coding - especially in a mob setting. But that's the whole reason why I decided to quit being a scrum master and go to Hunter!

If you had told me a year ago that I would get the opportunity to work at home as a programmer on a team whose purpose is to constantly collaborate, I would have never believed you.

I was shipped all of my equipment and hardware last Friday in two giant boxes. Not only did they send me a laptop (all I was expecting) I also got a keyboard, a mouse, a truly giant monitor, a dongle to connect everything to my laptop, and even an HDMI cable and ethernet cable! While the ethernet cable is too short to reach my router, it was such a wonderful touch. 

One thing that really stood out to me as I onboarded remotely for the first time was that the folks at Hunter are really easy to get ahold of. An HR person emailed me last Wednesday to tell me I'd be receiving some Hunter swag, and I asked her about when I'd receive my laptop. She immediately knew how to answer my question and did so in a really friendly, accommodating way. Earlier today, when I realized I didn't have a link handy for uploading my I-9 documents (a weirdness of onboarding remotely) she sent the link to me almost immediately! 

The new employee orientation was super smooth. I was on Microsoft Teams (which I had never used) on my new Windows machine (been in Mac world for the last 2 years) and everyone else was in-person at the San Marcos office. I appreciated how the facilitator specifically checked with me that I was following along, that I could hear the videos she played, asking about working from home, making me feel included even though I wasn't in the room. She explicitly told me the best way to ask questions during the orientation - just unmute and speak out, as opposed to chat! - which was a great way to level-set right off the bat.

I was surprised to open my brand-new Hunter Industries email and find I had 435 emails - about 340 were AWS alerts, and about 50 were NPM notifications, and ~20 were invites for meetings that happened before my start-date. This was a little off-putting, but also a peek into how many notifications to expect on a daily basis! I'll let you know if I end up getting more of these alerts!

My favorite part was that I was offered a free ticket to Agile Open Southern California next week, because my manager can't attend himself. I'm a huge fan of conferences generally, and especially virtual conferences in distant locations that I wouldn't otherwise be able to attend. I look forward to sharing what that's like! This will be my first open space conference, so it will be interesting to see what that's like virtually. 


Curious about mob programming?