My thoughts and experiences about software development

Primary Menu

Author Ulrika Malmgren

Or “should you split up to work on parallel tasks?”

We had a few weeks of constantly changing topics. We worked a bit on one thing and then we noticed a warning from one of our systems that something was wrong, we looked into it, changed back to the first thing, had to wait for feedback before we could move on, changed focus onto something else, the feedback came in, we changed back, etc…

All of this happening while we had this rather big undertaking looming in the background on which we worked in between the other tasks. Something important that we need to get done but without being urgent. We need to get to it though, otherwise it will become urgent and then it will be stressful and hard to do a good job with it.

As we realized what was happening, with our collective frustration showing in different way, we sat down and talked about it. We uncover that we’re mostly to blame ourselves since we’re trying to be forthcoming to a lot of different stakeholders but we could actually be better at prioritizing. Since a lot of the things that we have been doing have not been urgent and could have waited a day or two, we could have had more focus on the big undertaking while bundling the odd things up for a particular day.

With the blessing of our Product Owner, we decide to clear this last attention stealer out of the way and then focus on the big undertaking for a week.

Back at the mobstation, we start working and discover that we have two things to do: add a link to the front end and add some css to that link because it shows as white on white background at the moment. We ask ourselves gingerly if we should split up for a while. One person could add the css while the others add the link. It is trivial anyway and we’ll be done quicker. We don’t usually do this but maybe this is a good situation? We really want to feel that we’re making some progress.

Everyone is apprehensive. We’re frustrated and want to move forward. But we also believe in the mob. We believe that speed isn’t the bottleneck. We value sharing knowledge over being uncomfortable.

We decide against.

And run into issues with the simple task of adding css since we’re unfamiliar with the project. And realize that what we thought should be a link would be better as a text. And the text isn’t white, so no need for a special case css.

It feels like staying true to our values was the right thing to do in this situation because it’s hardly never a simple straightforward thing in software development. But was sticks with me most is the realization that even it had been a simple and easy fix, it would have saved us at most 10 minutes.

So it’s either more difficult than you think and then you need the mob. Or it really is that easy but then the gain is minimal. The frustration was hurting so bad, all we wanted was to alleviate the pain and for that we almost made a bad decision.

What I learned from this experience is that for me, it’s not worth it to try to gain a little time by splitting up the mob even it would feel temporarily better.

Our 20+ people dev team is a remote friendly (single timezone) workplace with people living in different places in Sweden. We get together once a year for an unconference where you are expected to participate physically but we wanted to meet up once during the autumn as well. Having our weekly meetings fully remote already (we just sit at our desks with headsets if we’re in the office), creating a remote unconference didn’t feel like a huge step.

What is a fully remote/remote only meeting?

This is a meeting where none of the participants are sitting in together in a meeting room. A typical meeting requires booking a room for the onsite people and letting the the others join on video/audio link. Being fully remote evens out the experience for everyone. Having some people in a room always creates a “us and them” feeling if you’re not attending the meeting physically and the remote participants are often an afterthought.

So how was it?

Excellent! It gave me the same energy and inspiration boost as I get from a colocated unconference: problem solving with my colleagues, sharing ideas and finding inspiration. It ran ridiculously smoothly.

How did we do it?

We ran a very lightweight event with 5 lightning talks and 2 open space sessions.

We used a combination of Slack, Skype and Trello.

Trello was used to form the agenda the same way that you would do on a board/wall during a regular open space. Anyone could post a topic and then we organised them in Time slor 1, Time slot 2, etc…

Skype for Business was the equivalent of the main room. The call was activate throughout the entire day and people could join and leave. A skype meeting call doesn’t die when the last person leaves it so it could stay active for the entire time that the meeting is booked in the calendar. It also doesn’t have a upper limit of participants (that we would hit in this context)

Slack was used for the breakout sessions. The person proposing the topic would start a call in Slack named after the topic and people joined the call they were interested in discussing. Slack has a limit of 15 people in a call.

Some tips

Do

Try to keep video on if possible. It gives you those extra cues to see if someone is just about to say something and makes the connection between individuals stronger.

Slacks 15 people limit is beneficial in this context. You’ve probably attended an open space which is too large for its own good. This gave a technical limitation. Embrace it!

A couple of us rounded up the day by playing a little mmorpg together to get some of that atmosphere that you could get from having beers together.

Remote lightning talks has the benefit of allowing you to keep a script by your side so if you’re want to ease into public speaking, it could be a great warm up step.

Don’t

Have the people in the office sit in a room together. Everyone needs to be at their laptop with their own headset. If your office environment is too noisy for this, encourage people to work from home that day. This evens out the playing field for the regular remoters and teaches the office teammates more about the experience of working remote.

Do this as your first fully remote meeting. It requires a bit of practice and getting used to, both when it comes to the technical set up and how to behave.

Final thoughts

I would definitely recommend this as an alternative to a co-located unconference if you have some people working remotely.This experience was further argument in my book that remote teams can be as successful as colocated teams if you’re willing to let them.

Mob programming is a software development approach where the whole team works on the same thing, at the same time, in the same space, and at the same computer. This is similar to pair programming where two people sit at the same computer and collaborate on the same code at the same time.

A lot of things are being said on the benefits of mob programming and in my opinion they are probably all true. Given a team with similar values and individuals with the ability to put aside their personal preferences in order to move forward* you’ll see interesting results when you adopt it. Sure, you might feel you’re going slower but you’re being the turtle, not the hare.

I’m not going to dive into the benefits, plenty of people do that. I just want to present my team’s set up for remote mob programming. We’ve had one person permanently remote for the past 3 months and I sometimes call in from home as well. Our team is The Perfect Size of 4.

We’ve got a mob station which is an adjustable standing desk, one stationary computer with two monitors, a really good microphone, a headphone splitter, one keyboard and one mouse.

The ergonomics

Having an adjustable desk means that you can switch between sitting and standing. If you have tried standing at work, you’ll know that you’re feeling more awake and that after a while your back will be stronger. We’re happy to have the option to stand while we’re working.

The visual

The monitors are mirroring each other so that it’s easier for everyone to see regardless of where you are standing around the table. There is less of a need to have a huge font size and some programs don’t even give you the option to increase the font size on the menus so having the monitor closer makes it a bit easier.

The coding

We use Teamviewer to share our mob station’s screen and it also lets the remote party have control of the mouse and keyboard. This makes for seamless rotation when switching driver. When you’re the one remote, it’s almost as typing live.

The audio hardware

Our microphone is a Blue Yeti which is a good quality usb microphone. It has a recording pattern which picks up sound primarily from the front of the microphone (and not all the way around) which helps a bit when you’re remote and the rest of the office is chatty.

We used to not use headphones but because of sound quality we would crank up the volume on the speakers to hear the remote party properly and that would disturb the rest of the office. So we wanted to switch to headphones.

In order to do so we started using a headphone splitter which allows us to connect up to five people to the same computer.

The Blue Yeti offers the ability to hook your headphones into the microphone which means that you can hear yourself speak as well.

This is very important because if you’re three people around a table all wearing good headphones, you actually won’t hear what the two others next to you are saying. You’ll only hear the remote party. By hooking in your headphone splitter into the microphone, you’ll hear everyone equally well.

To get this to work, make sure that the Yeti is both the recording device and the audio output in your call settings.

The audio software

Being a .Net shop we’ve switched from Slack to Microsoft Teams :O

It’s working well for us and we create a Teams meeting whenever someone uses the mob station and remote people can join the meeting if they want. It’s basically Skype but embedded in Teams and it does its job.

Summary

It’s taken us some time to find our set up. We started off with working on someone’s machine and each day had a bit of set up time to get things correct. The microphone had to be moved around, etc. Getting the headphone splitter made a huge difference for us (and the office) and getting the mob station also made a big impact.

By now, getting started is quick and easy and being remote for whatever reason isn’t an obstacle for team work.

TIL: my wish to become a programmer stems from wanting to become a renaissance woman in my field.

It’s difficult with all our advances in science to be among the top in many different fields, the same way Laura Bassi did in the 18th century for example. But I think within the field of Software Development it’s (possibly, kind of, for some definition of it) achievable.

Not in the sense that I want to be recognized as the top but I want to understand this field. Like deeply understand.

I already know a great deal about testing and realize that I’m far from knowing it all. I have some awareness of where some of my gaps are. I feel that’s more than I knew when I started out, or a few years ago. Some day I might fill those gaps and probably discover new ones in the process.

I’ve also come to understand and learn about teams and coaching. Here, I’m not as far advanced as I am in testing. It’s an incredibly vast area but barely scraping the surface has given me powerful insights already.

Coming into the world of programming and making (more) sense of how systems programmatically fit together will give me another piece of the puzzle. So far, I’ve been approaching it from the outside perspective. I’ve seen programmers struggle and I’ve helped best I could but I haven’t experienced it first hand. This is of course the most crucial piece of the puzzle since without the act of putting the software together, we’re not doing Software Development.

Not that the software has a raison d’être in itself. If we can solve the problem without software, that’s even better. I just want to contribute when the software is designed to make someone’s life easier. For example, it can be that streaming a movie is easier than going out to rent it or that new entrepreneur can charge for her goods easily.

My best guess is that my journey will take me through a few more different roles within Software Development. Or maybe rather than roles, performing other activities than testing, coding and coaching. It wouldn’t surprise me if I find myself iterating over those activities to deepen my knowledge.

It’s in that sense I see this change of career path as a part of becoming a renaissance woman. Rather than specializing in one or two fields of Software Development, I want to see as many perspectives as I can.

I find myself driven by one main question “how does it all fit together?”

I’m looking for a job as a programmer. Even though I’ve been working with software development for 10 years, I’ve never written production code for money. There has been the occasional helpful tool, automated testing and such but never anything a user has seen. After a year as an agile coach, I’m dying to dive into programming!

What I’m looking for is a team where I’ll spend most (all?) of my time working together with the team members and where people share my love for quality. I want to spend my time pairing or mob programming. I don’t know what kind of programming I want to do, I’m just ready to explore.

Even though this will be the first time I dive into production code programming, I’m not a Software Development rookie.

What I bring to a Software Development team

knowledge and understanding about testing. What it is, what it isn’t.

experience as a team coach

knowledge and understanding (and love!) of Kanban principles

problem solving intuition

pushing on to finish: I have the endurance to get things done. I mean really done with all the details.

I have basic understanding of git, terminals, unit testing, java, python, ruby, cucumber, selenium. This means that I’m able to do some basic programming projects without spending too much time on Stack Overflow. 😉

I feel that my Master of Science in Information Technology studies have helped me reach good intuition about problem solving and troubleshooting which I’ve been developing ever since. I have to be honest, I do love a good troubleshooting from time to time. KTH also boosted my self confidence. After all the operating system, parallel computing and message passing labs, I feel that there is nothing I can’t conquer.

From my time as a tester I’ve learned many ways in which things can go wrong. Testers quickly learn that their work is not done until the i’s are dotted and the t’s are crossed which means that there is no room for sloppy work. You need to fire up IE7 even though no one in their right minds wants to use it.

As team coach, I’ve developed an arsenal of techniques to help a team from slicing work into meaningful pieces to getting to know each other’s personal values. I’ve also experienced what benefits a pull system can bring to a team. I believe these to be helpful for any team.

My Software Development values

(If we don’t match in values, there is no point in going further than this)

one small thing at the time: it’s just better and faster. Not everything can be highest prio.

get feedback quickly: we need to know if we’re on the right track. Let’s not plan in details too far ahead.

working together: it’s better for quality and creativity. It’s a waste of time to not pair.

take time for improvement: you need to carve out time for improvements and use it well. This is as important as features.

So there it is: junior developer but senior team member. What do you have for me?

“Skill in writing is one of the things I look for the most in hiring, because I feel that clear writing represents clear thinking, regardless of someone’s background, or whether they’re a designer or coder or whatever.

The ability to communicate effectively and clearly in written form is not only super important in a distributed company, but I think reflects well on how they approach life in general.

Part of the reason I started blogging and started working on WordPress was because I love writing.

If I can become a better writer, perhaps I can become a better thinker.”

I feel that my writing reflects my thinking a lot. I’m a slow writer, an email takes me ages. I pick my words carefully, delete, rewrite and keep going until perfection or until I say to myself “come on, you’re just cancelling your subscription, this is probably good enough”.

I wonder if the process shows in the results. I also wonder how my favourite colleagues do in this regard. Would I have hired them based on their writing?