My thoughts and experiences about software development

Primary Menu

Category Software development

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 want to spend as little time as possible on the things which don’t matter.

the goal of planning is deciding what to do, not how to do it

While a planning session can be a drawn out and tough experience with lengthy discussions, I like to keep the planning quick and full of energy and here’s one way of getting there.

Silence

Start by bringing up your work items on a white board or a table. *

Use categories: “do now”, “do later”, “never”, “I have a question before I can decide”

(Regarding the category “never“: some things are not relevant anymore and some you know will never be a high enough prio to make the cut. Just get rid of them, you’ll feel better afterwards.)

Ask participants to move items to in silence.

If some items move back and forth between the categories, put it in the question category.

After 2-3 minutes you will have a rough filtering of the items without much effort. In my experience, half of the items in our backlog are filtered away.

Put away the “do later” items. Read though the “never” to make sure nothing important gets lost.

Questions and Answers

Now you’re left with the questions and the “do now” items.

Go through the questions (here is where you need to bring your facilitator skills and keep it short. The purpose is to get the question “do now, later or never” answered. Be relentless!

What Now?

So, finally, you’re at “do now”. Figure out how many things you can handle in the time frame until your next planning by using your throughput or velocity.

Now you want to fill those slots. If you have many more possible items than slots, I would try to avoid going through each item on “do now” and discuss them since you want to only discuss the things which you’re actually going to do. We don’t really know for sure which ones those are yet, but we can try to narrow it down.

Here you could use silence again to prioritize from most important to least important by asking participants to move the items in silence. You could also dot vote.

Double check that none of the things which aren’t in your slots is crucial during the time until next planning.

Done!

Why it works

A common mistake is to go through items one by one. There is always something to say about an item even if we agree. Especially if there is a technical challenge in solving it.

By using physical items and silence we enable the team to quickly show consensus on the things which they are in agreement on. We visualize what we need to discuss and what we don’t.

As a former tester, I put a lot of value in discussions regarding work items, the sooner the better. But in this case, I want us to agree upon which need we need to solve first, before we have the discussions on how it’s going to be done. I would say that’s a design discuss, or something for a Three Amigos meeting.

*if you already have a physical boards, this easy. Otherwise print out your cards and use magnets or write post its for them.

The team realizes it’s time to step away from the computers and train of thoughts and head over to a conference room for the meeting. Reluctantly keyboards are abandoned, screens locked and everyone shuffling their feet like 5 year olds asked to clean up all the while the code conversations carry on well into the conference room. Until the Scrum Master interrupts.

– We have been asked to estimate this task of upgrading a component to a new version.

Everyone nods and discuss what such a change would mean and after a while dive into code on the projector. Solutions are discussed, details are demanded, implementations analyzed. The code archaeology session is well underway when someone says:

– So there are two possible solutions then?
– Yes, basically, responds one developer and continues to list which classes should possibly be modified.

The conversation carries on a little longer until the same person speaks again, carefully.

– Will the two solutions take a different amount of time to implement?
– No, that’s not likely, another developer answers while the others aren’t leaving their train of thought on the code and classes.

The person now addresses the Scrum Master instead while the developer’s discussion is getting more heated regarding the state of the legacy code they will be forced to work in.

– What kind of estimate are they asking for? I mean, what granularity, number of sprints or so?
– Yes, exactly, just to get a feeling of roughly how much time it could take, the scrum master answers.
– How long do we think it’s going to take then? This time, the person speaks a little louder, making sure to interrupt the conversation and gets everyone’s answer.
– About 2 sprint I would say, answers one person. Everyone nods and agrees and the conversation moves from bashing the old code to discussing benefits and drawbacks of the different solutions.

– If both solutions take about the same time, which is about 2 sprints and that’s the kind of estimate we are asking for, then we have our answer, right?
– You can leave if you don’t want to be here, offers a developer, clearly annoyed by the interruptions, and tries to go back the debate on which solution to choose.
– My point is that we can all leave, retorts the person, interrupting again.

The silence is tense.

– Everyone here has something they would rather be doing and we don’t even know when we will be asked to do this change. By then we will have to go through this discussion again with the same arguments and the same procedure of digging through the code because we will have forgotten about it. Our goal was to give an estimate, and we have that. Let’s go and do some work!

The conference room is left with a light, relieved step and the team is filled with anticipation of the work that will be done in the 40 extra minutes suddenly gifted to the them.

Last spring I worked as a test lead/quality coach for 3 teams that did their own testing. I experimented with different techniques to help them further improve their testing skills. I wrote this experience in March but I didn’t get around to publishing it then which I’m doing now.

I want to share with you another way of combining testing, learning and fun

At the Agile Testing Days in Potsdam/Berlin I accidentally ended up in a testing dojo session. For an hour, 4 pairs of testers tried their skills at a buggy piece of software and received feedback about their testing. It became immediately clear to me that this was a great opportunity to improve testing skills and I decided to try it at home with my teams.

I work as the sort of test lead who provides inspiration and encouragement for 3 teams of programmers who do their testing themselves. For our domain, web development, this works well. We have developed a testing strategy together and I also help them improve their testing skills. They are awesome, committed to continuously delivering value to our customers and eager to do a good job.

I planned a testing dojo of an hour and promised candy and laughs. The response was, to my relief, positive. I wasn’t sure that they would want to spend an hour of precious programming time doing testing. I chose an hour so that it wouldn’t be too long and it was easier to find a room and a time slot.

The preparations took a while because I needed to decide on a suitable piece of software and read up on dos and don’ts for testing dojos.

Finally, the software I picked was the one I had tested in Potsdam. It was crawling with bugs and this meant that everyone would find some. I thought this would be good for a first session to make everyone comfortable. It was also small enough to be constraining but big enough to allow people to try different areas. I also wanted to have something which no one in the teams had written themselves so that there wouldn’t be any awkward situations. This meant finding external software.

Setting up the environment
I created a few posters which I put up on the walls. They detailed the format of dojo and the parking rates for everyone to see.

I explained carefully the purpose of the dojo. I put the emphasis on the fact the purpose was to learn from each other. This means that both observers and testers learn and we should be gentle to each other. It’s not easy to sit down a new computer and start testing in front of everyone, there needs to be humility from the audience for this. And on the other hand, active and good observers are key for learning.

How was it?
First of all, we had fun! The overwhelming buginess of the software created a lot of reactions: surprise, confusion, entertainment, frustration and joy.

The programmers were a bit overwhelmed by the amount of bugs. This is the downside of using this test object. In a normal situation I would just send it back after 2 minutes, but this isn’t a normal situation. I encourage splitting the debrief into two parts: “what did you think of the software?” and “what did you observe about the testing that we did?” or even say “let’s agree that the software is crap, but what did you observe about the testing?”.

It was clear that this was an ad hoc session. There was no plan and a lot of randomness. A few people started trying to be systematic but bugs caused them to lose focus. We tried a bit of everything, here and there.

This was a good thing though. For the group to observe this randomness was interesting. It shows well of you can spend an hour testing without knowing much more than when you started. When answering the question “what would you do differently if you did it again?” the group answered that they would be more systematic or organized. We also tried to highlight some of the things that the participants had done successfully.

What now?
We will do it again. This time I want to start with creating a plan together and see the difference in an organized approach. After this I think we’re ready for code closer to our domain or maybe even our own code.

Conclusion
I strongly recommend doing this kind of exercise with your team or your peers. It’s fun, interesting and a great opportunity to pick up new skills.

The same way we have heard stories of kidney theft and rats in pizzas, we are surrounded by stories and factoids in our work.

Laurent Bossavit takes on a few of these bogus facts and debunks the myths. For example, the (in)famous Waterfall paper and people’s different opinions regarding it get analyzed. What did the paper really say? Was it an instant hit?

Some topics analyzed:
+ the cone of uncertainty
+ some programmers are 10 times more productive than others
+ the waterfall method was a thing
+ finding defects early is less expensive than finding them late

Despite the populistic title and simple topic, Bossavit takes on a more scientific tone in his writing. In order to really grasp some of the stories, a little knowledge of statistics is required. When Bossavit debunks a myths, he has done thorough research into scientific papers and like a detective he follows the trail of evidence to see if there is any truth to the claims. I fear that for some readers, this academic approach might not be as exciting as for others. However, it is also possible to skim through it and still get the main message.

I feel that the book is much needed. While reading it, I tried to remember when I last heard someone make the claims which are being adressed. Often, it was recently, perhaps a couple of weeks prior. Once it was even from my own mouth.

Reading this book has made me a bit more sceptical about what I listen to when people state that something is a fact in software engineering. It has also made me rethink how I express myself, talking more about my experience rather than stating things as facts. Bossavit also ends the book with a discussion, science doesn’t seem to be apprioriate for analyzing methods in software engineering, how can we work with it instead?

I really enjoyed reading The Leprechauns of Software Engineering. For me, it was exciting to follow the trail of evidence (or lack thereof) and see the claims debunked. I also think it could be good book club material with interesting discussions to follow.

From RUP, I used the “Vision document” and the “Risk list” and it felt like a great help!

Do you remember RUP, the Rational Unified Process? Have you heard how frowned upon it is nowadays? People joke about using it and tell horror stories from RUP projects. Probably the same way you’ll hear horror stories from failed SCRUM projects in the future.

I never used RUP for more than a school project but there were two things with it that I really liked and I felt a need for those today.

I’m planning a course in Agile Testing which I will be holding in February this year*. It was hard to get started, the usual “Where to start?”-paralysis. Realizing that I needed to keep my goal in mind to do a successfull course and that there were a lot things that scared me about this, I pulled up two classic artifacts.

The vision document (written on an index card) for my course is “The participant should feel the inspiration and the courage to work with quality together with the team”. After writing it down I reflected a bit on what is inspiring and what inspires courage. I need to keep this is mind when putting together the topics and exercises we’ll do.

My risk list (which also fits on an index card) includes five items like “too abstract”, “not enough time”, etc and each item has an action that I can do to mitigate the risk.

Having produced these artifacts feels good because I now have a plan to deal with my fears and I have my vision written down which will help me stay on track. When asked the question “will your course include X?” I can think of my vision and decide wether it is relevant to fulfill the vision or not.

So don’t be affraid to pick techniques from different places. Even from RUP 🙂
* This is part of an innovation program that we have at Citerus. Anyone can spend a few work hours preparing a pitch for an idea they would like to develop. I got to see my idea through which meant more available hours to get to try something new.

The first thing that hit me was the fact that a lot of the panel members and the audience argued that there were too many tools and too many options. I understand how this can be perceived as an issue but it seems like an odd argument to me. What would be the solution to such a problem? Putting a restriction on the amount of tools that people are allowed to develop?

There are a lot of tools out there and picking the right one might be hard. But the truth is that you don’t need them all to produce good software. The problem might be that people are feeling an obligation to use as many tools as possible, or tools that are too complex in themselves for a particular problem.

The show raised some other thoughts as well. We’ll see if I get them down “on paper”.