Friday, November 22, 2019

Agile Testing Days 2019 - About Community, Becoming MIATPP and Keynoting as Learning Partners

Or: A week full of surprises, wonder and joy.
Or: A big, huge thank you.

Returning from Agile Testing Days 2019 and a week of vacation, my heart is still full of joy and gratefulness. It was a long conference festival week. I learned a lot, I shared a lot, and we had many insightful and inspiring conversations. Brace yourself: this is going to be a long post with lots of tweets to illustrate my memory of things. Dear all, and especially dear future me: be invited to immerse yourself (again) into these wonderful Agile Testing Days 2019 as I experienced them.

Saturday: Back Home in Unicorn Land

The last years I used to arrive on Sunday, just before the tutorial day. The tutorials always provided lots of value to me, so I simply wouldn't miss them. This year, however, a handful of two-day tutorials had been announced, among them two that I simply couldn't resist. The "Quality Coaching Masterclass" by Anne-Marie Charrett, and "Exploring systems quality in a distributed world" by Abby Bangser and Benjamin Hofmann. Both of them were super tempting as well as fitting to my current challenges and knowledge gaps. In the end, I decided to join the latter tutorial as I was very curious to explore the world of observability, a quality aspect that has gained more and more awareness and importance over the last years. I wanted to experience hands-on how increased observability helps our efforts to learn more about our actual product in production, in my case from a testing perspective.

Having booked a two-day tutorial, I needed to arrive already on Saturday. Knowing that my learning partner Toyer Mamoojee and I were having the closing keynote at the end of the conference week, I realized this would be a challenge. Six days of conference craziness in a row...? Well, challenge accepted! Still, I knew I had to be careful not to overdo things. I was close to catching a cold already the weeks before, so I prepared everything for that case and promised myself to take good care of myself this year throughout the week, especially when it comes to catching more sleep compared to other years. I knew there was a crazy week ahead of me, and I was looking forward to it.

After arriving at the airport, I welcomed the opportunity to share a ride with Janet Gregory, Gitte Klitgaard and David Corrales and enjoying first conversations, getting into the conference mood. What an amazing feeling to enter the hotel lobby for the fifth time after my very first Agile Testing Days in 2015. Every year it's more and more like coming home!

The best thing of arriving on Saturday was to have an additional dinner opportunity with the community. Lots of people were already there and I thoroughly enjoyed my evening with great conversations.

Sunday: Tutorial Time!

The first tutorial day arrived and it was time for Exploring systems quality in a distributed world by Abby Bangser and Benjamin Hofmann. Already on this very first day I was really happy about my decision in favor of a two-day tutorial. It was simply amazing. Abby and Benni, together with a third supporter, had created a distributed system as our practice playground. They provided the product as our system to explore, the infrastructure its services were running on, and also a whole set of open source tools allowing us to learn more about the system as it was running. They introduced us to major aspects and concepts regarding observability and showed us how we could find out more about the system. I loved that we were a small group with two instructors, and that they chose not to spend the tutorial time on lecturing yet rather on many hands-on exercises for us. Lots of time to explore! I love this part most in workshops and tutorials. If I can make my own steps and gain my own experiences, I will understand a lot more, learn a lot more and take a lot more with me than by listening only. As a bonus: I sat next to Areti Panou who I had met at Romanian Testing Conference and TestBash Manchester this year. (Follow her! She's awesome.) We had a great time learning together.
The first tutorial day was closed by the keynote The challenges ahead by Jan Jaap Cannegieter and Derk-Jan de Grood. They prepared people for the topics they saw coming and gave pointers how to make the best out of the offered conference program. Let's learn and adapt to what's coming!
Originally I had planned to join the meetup organized for this evening and observe the teams taking part in the Xtestathon. In the end, however, I was too tired for that and chose to have dinner with a smaller group of community friends in beautiful Potsdam instead. The night out with Viktorija Manevska, Marianne Duijst, Johan Sandell and Areti was refreshing and energizing. The week could come!

Monday: Tutorial Luck and Speakers Reunion

The second tutorial day came and it was just as amazing as the first one. This time Abby and Benni decided to have us live through a bunch of evolutionary steps, starting out with a system with low observability and then adding more and more in as we went. What a great chance for us to use our newly gained skills from the first day and deepen our understanding by practicing. I guess all of us are now craving the final level of observability for our own systems at home!
In the evening we listened to a very special keynote: Being Lucky by Stephan Kämper. He shared his story how he set himself up for luck, even to the extent of surviving cancer. Stephan showed us how we all can contribute to our own luck. A truly emotional and inspiring keynote that truly deserved the standing ovations Stephan received.
Another highlight of this day: the reunion of six members of our "power learning group"! I finally met my dear friends and learning peers in real life again: Toyer Mamoojee, João ProençaViktorija Manevska, Dragan Spiridonov, Mirjana Kolarov - too sad that Simon Berner, Dianë Xhymshiti, Lilit Sharkhatunyan and Pooja Shah couldn't make it this year. At one point we will get the whole group together for sure!
What better way to close the day than going for speakers dinner? I had the pleasure to be a speaker at Agile Testing Days for three years in a row now, and this dinner was always special. It's amazing me to see how many people I already know these days, people that I didn't dare to approach just a few years ago. These days I can even connect my own connections! Like having Michael Kutz getting to know our power learning group. (By the way, Micha took my Test Automation University course while traveling to the conference, how awesome is that?) Time was flying and soon it was time to go home and rest before the main conference started.

Tuesday: Lean Coffee, Conference Rush, and a Community Award

Tuesday started - traditionally as every year for me - with a lean coffee session with Lisa Crispin and Janet Gregory. As we had more people than would fit on two tables, I decided to help out facilitating and open a third one. I've done this so many times now I'm not even anxious about it anymore, a big achievement for me! :D We had great conversations at our table including different perspectives and everyone took new insights and ideas away with them.
Then it was time to open the main conference. For those who haven't been at Agile Testing Days yet: the program is huge, there are lots of options for everybody and fear of missing out is high. This can easily become overwhelming, so I've decided to use my strategy from last year again, which means: keynotes and workshops only. I was well aware that this way I'd miss out on a lot of fabulous talks (and I did...). I don't regret this decision for my own mental health (less context switching and less sketchnotes to create) as well as my personal learning style (I prefer learning by applying new knowledge hands-on). While I still don't regret this decision in general, I really regret I was not listening to my fellow power learning group members João and Mirjana and their talks, and didn't create a sketchnote for them. The same goes for a few other dear community friends, as well as the new voices I'd have loved to support. I'm truly sorry for that. I hope I find a better mixture next year.
  • Keynote: More Than That by Damian Synadinos. What an energized opening keynote. I really agree to the message - we're all more than whatever label is put on us. Let's "un-just" and rediscover ourselves! The presentation was impressive, yet extremely fast and therefore hard to follow.
  • Workshop: A Lawful Thing To Test by Han Toan Lim. GDPR applied - or so I thought. Unfortunately I misinterpreted the workshop abstract as it was rather an introduction to exploratory testing on the example of testing for GDPR compliance instead of focusing on the latter and providing more detailed guidance.
  • Keynote: Influencing without Power by Marianne Duijst. Powerful advice for everyone how to influence even if you're not in the position of power. I especially related to "take the loss" - sometimes there's no sense in continuing a lost battle. Instead it's better to calm down first and then come back to the discussion on another day.
  • Workshop: Confident fast-pace delivery of microservices by Alex Schwartz. Alex made our working groups research important concepts and terms and explain them well to each other - a great technique, that alone was teaching us a lot. It was only such a pity the conference wifi broke down every other minute. This way we could do a lot less hands-on ourselves as expected and had to fall back to demonstrations instead.
  • Keynote: Where Next for Tech Ethics? by Cennydd Bowles. Thought-provoking! Great advice what to do to change our current situation to the better when it comes to ethics in tech. An immensely important topic.
Knowing that Toyer's and my session was coming up end of the week, we wanted to rehearse our paired keynote also in real life and not only remotely as before (obviously). So we decided to skip lunch and do it during the lunch break. It went well, and I was relieved on that regard. However... during the afternoon workshop my brain stopped working and I really grew hungry. And this at a conference where we get loads of delicious food at all times! Yet the workshop breaks weren't synchronized with the food breaks, so in the end I had to beg a few nice sponsors for candies - and they gladly helped me out (thank you so much). Time to prepare for the party!

After retreating to my hotel room, I realized that the recording of my TestBash Manchester talk "A Code Challenge of Confidence" was published and made accessible for anyone having a free Dojo account. I was super happy about it as I wasn't sure if I would get another chance to give the talk again.

Even more great news: I received the confirmation that I made the program for Agile Testing Days USA! Even with a talk and a workshop. I'm so much looking forward to see the American edition of this great conference and to visiting Chicago for the first time.

Now it was finally party time. This year the theme was "80s Glam & Rock". I'm not a fan of wearing costumes myself, so I decided to just go with a simple shirt themed with what I love that roughly fits the 80s. The good thing: no one reprimands you for not being in costume! I love this. It's super fun admiring the costumes of others AND feeling comfortable and safe at the same time. By the way, my former colleague Barbara Stecher won the best costume award, the second year in a row! Absolutely amazing and so well deserved!
Now, this party also includes the award ceremony for the MIATPP - probably the most unpronounceable award title ever - the "Most Influential Agile Testing Professional Person". The last year I was stunned that I got into the top 10 list, even the top 3! Couldn't believe that I got voted for at all. I mean, this community award went to such amazing people in the past, my absolute heroes! You know, the big names. Many people told me throughout the year they would vote for me again and I felt flattered and extremely honored. Still, what came - came completely unexpected to me. Because I won this year. (Me? Yes, me.)

I cannot even explain the moment when I realized it was really me. I sat there with my lovely power learning group friends, having Abby and Melissa Eaden on my other side. We enjoyed our dinner and then it was time for announcing the award winner. This year it was up to Lisa and Janet to go up on stage and announce the lucky one. They started sharing rather general statements and comments about the winner. They added more and more details, yet still I was unaware. And then they shared that this person has listed "sociotechnical symmathecist" in their Twitter bio. At that point my jaw dropped and I couldn't believe it. I was certain no one else in this room (besides Lisa) had listened to Jessica Kerr's keynote at Mob Programming Conference 2018 that inspired me to add this title to my Twitter bio. Lisa and Janet continued, yet I couldn't listen anymore and my whole table already celebrated. Abby ensured me that it was really me. João even recorded a video of the moment. And suddenly Toyer was behind me, asking me to stand up, accompanying me to the stage and handing me over the award. What an incredible moment. What a feeling. I was speechless. I only could think of all these people who had voted for me. Me! Me, who had received so much support and encouragement from the community myself. The only thing I could do the last years is to pay it forward! And this is exactly what I will continue doing. Learning myself, sharing what I experienced, supporting others. My biggest thanks go out to all those who supported me, who followed me on my journey, who believed in me. It was such an honor to receive this community award through the hands of two of my biggest idols, Lisa and Janet, and my most amazing learning partner Toyer - and then getting celebrated by our lovely power learning group. Not to forget all those other wonderful people who ensured me I really won and I could really just accept this as a fact. Because I deserved it. I'm still not too sure about the latter point, yet I'm doing my best to embrace it.

You can imagine how many late night conversations I had with so many amazing people. They also shared why they wanted me as MIATPP and why they thought I deserved it. Some said that it's about bravery; that I'm great at publicly sharing what I do and inviting people to follow along on my journey; that I'm the every day hero people long for - if I can do it, you can do it, too. You can't imagine how happy I was to hear this feedback! This is exactly what I'm trying to show. I'm not a super human, I'm just a normal person who received support, took their opportunities, put lots of effort in - and shared what I learned over the last years. I'm far from perfect, there's so much more to learn! And that's fine.

The whole evening was incredible. Returning to my hotel room, I allowed myself to have a look at Twitter - and saw it had completely exploded. Slowly the truth started to sink in. I really had won this award! To never forget this incredible moment and all the wonderful feedback I received, I gave myself permission to retweet all of the congratulations and kind words people shared on Twitter. I tweeted that I won, I pinned it to my profile. I learned a lot how to acknowledge my own achievements better over the last years, yet that's as far as I wanted to go. Plus adding here some of my personal highlights. ;-)

Wednesday: Wonderful Workshops & Power Dinner

You can imagine the last night was very short (yet it was so much worth it). Waking up this morning, seeing the award on my hotel table, the fact I truly had won became clearer and clearer. Still, it was another conference day, which means a lot more to learn! And it was an awesome day, too.
During lunch time, I enjoyed a great conversation with Søren Wassard, one of those people I met already five years ago at my first Agile Testing Days back in 2015 (which also happened to be my first conference ever). I will have a chance visiting him and his company next year and share my knowledge around mob programming, testing and everything. So much looking forward to it!

After a quite sleepless night, I grew tired in the evening. Being at the conference all around the clock can be exhausting, so Toyer and I decided to give ourselves a break and also spend some quality time together with our amazing power learning group members. They didn't need much convincing! ;-) So we dismissed the scheduled evening program, and off we went to Potsdam to have a fantastic dinner together. We really missed our beloved other members and already discussed plans for a get together with all of us.
Returning back to the hotel, we - naturally - ended up in the lobby. This let me finally and properly say hello to Thomas Rinke who joined the conference mid day. Thomas is a lovely human I heavily appreciate - and he never stops surprising me! This time he gave me a gift: the book "Leading Quality" by Ronald Cummings-John. A book that Areti had just recommended me on Monday. That got recommended by Lisa on Twitter shortly after. And here it was in my hands! Thomas, your skills are amazing. Thank you so, so much!

Thursday: On Safety, Mental Health and Allyship

Phew, Agile Testing Days is indeed a testing festival rather than a conference. It's a conference, too, with all that comes with it; yet also a festival. It's so much about the people and all these amazing inspiring conversations that we really have to take care to get enough self-care. And Thursday is usually already hard if you've been there the whole week. So, I had a slow start, yet managed to arrive just in time for the keynote.
  • Keynote: Humans by Zoë Rose. Well yes, us humans. Ruining things since forever. Zoë showed what and how we are lacking and what we need to increase: diversity, inclusion, motivation, communication.
  • Workshop: Improv(e) Your Testing! by Damian Synadinos. My dear friend Patrick Prill said I needed to meet Damian. One more reason to join his workshop! He shared lots of principles and advice from improvisational theater and how we can apply them as well in testing. I would have loved to get hands-on experience with them, yet unfortunately time did only allow a demonstration. Still, I took along a lot of advice for life in general, for work and collaboration, and testing itself.
  • Keynote: Testers, are you really engaged? by Smita Mishra. A wonderful keynote. Smita shared her observations of everyday life in two great stories, connecting them with testing. I loved listening to her!
  • Workshop: Becoming aware of psychological safety by Gitte Klitgaard and Morgan Ahlström. This was another tough workshop - mentally tough. Gitte and Morgan managed to create a safe space for everyone to talk about safety, to experience discomfort while still being and feeling safe, and to share difficult stories with each other. I had a wonderful group. Thank you Clare Davies and João for listening, sharing, and being there.
  • Keynote: Let's Talk About Men's Mental Health by Kevin Harris. What an important topic. What a story. What courage to share it. Kevin went through hell, and managed to share his story on stage. Emotional, touching, and triggering. Especially to talk about mental health, finally. No matter their gender. I can only say it again: thank you.
One day to go until Toyer's and my closing keynote - which meant it was time for another rehearsal! This time we had my former colleague Barbara as our audience, asking great questions in the end (thank you!). Things went well again, so finally we both had the feeling of being prepared for the great moment the next day.

Then there came another highlight for me: the Women and Allies Evening Gathering. It was a highlight already the last years. I have to admit, in the first year the name nearly put me off, yet I gave it a try. I didn't regret it. I learned so much, it really opened my eyes, having me face a reality I didn't want to acknowledge before. Since this first time I went to this gathering every year, hoping to learn more and more how to become a better ally for underrepresented people. I am a woman myself - but besides my gender, I'm as privileged as one can be. I only realized that a few years ago, so now it's my turn to learn how to speak up - not to speak on behalf of others, but as an ally. Bad behavior also has a huge impact on myself.

This year Thomas proposed a similar topic like we had two years ago, and I jumped on it: harassment. #metoo. How to speak up and address bad behavior. How to be an ally. We instantly had a small group, and it grew steadily throughout the evening. We even continued talking after we had to move out of the reserved room. I so much appreciate these people for sharing their perspectives, stories, worries and concerns. I learned a lot about myself again. Once more I needed to tell myself: do it. Create a commitment for yourself, decide who you want to be - then follow it and hope people will join in.

Friday: Our Story, Our Community

The day of our keynote arrived! Finally, and I was still feeling quite healthy. So far so good. Still, I felt tired, so I decided to grant myself a bit more sleep by skipping the first keynote.
  • Workshop: Being the Blockchain by Filip Joele. Great workshop! By having us play a game, mimicking a blockchain, Filip managed to get us the experience what a decentralized system really means, how important it is to agree on rules, and which impact they can have. Awesome.
  • Keynote: Uncomfortable Questions about Testing Addressed by Maaike Brinkhof and Göran Kero. I was really looking forward to this keynote. Maaike and Göran did an amazing job (and I know a paired talk is not easy, especially as a keynote). I loved how they really addressed these very uncomfortable questions we testers have to face these days. I could so much relate to their personal stories. Great way to get all of us thinking about our own cognitive biases. In the end, we're all human.
  • Open Space - Help and get help. As always before a talk, I could not focus anymore on any other session. Therefore I decided to join the open space for some time and then take a break. We had a great discussion around the question and answers parts of conference talks and how we could design this better for a healthy conversation we all can learn from.
Then finally it was time for I can’t do this… alone! A Tale of Two Learning Partners - the closing keynote of the conference by Toyer Mamoojee and myself. Although Friday evenings tend to show rather low participation rates as most people left already to travel home (and I can't blame them), we were happily surprised and super grateful that quite a lot of people stayed for our keynote. It was an incredible moment for us two to share our story on stage. We got inspired three years ago, on this very keynote stage, to become learning partners. It has brought us so far! Our journey included our first year's public speaking challenge that brought us back and back again to Agile Testing Days where it all began. We shared our second pact including Toyer's technical workshops and my Testing Tour. This year I've become code-confident and Toyer focused on growing his leadership skills. Overall, we had so many benefits out of our learning partnership. Personal growth, visibility, promotions, and more. We both had each other's backs so we could dare even more! We really hoped we could inspire people through our story and get them thinking - "who could be my learning partner?" Maybe they met them already! Maybe they are still to meet them. We hoped they will be on the lookout, keep their eyes open and grasp their chance when they get them.
The most amazing thing: our hopes were answered! Besides the three learning partnerships we could strike with our workshop last year, we now learned that even more learning partners found each other. There are seven more learning partnerships we know of already. We're super curious to hear more about their endeavors and what they will learn on their journeys!
After our keynote, we received our speaker gifts. I know that the conference organizers are always very good at personalizing their gifts, yet when I read the card and then unpacked my gift I was blown away. They got me my own volleyball with my name on it! How awesome is that?!
The conference was over. Time to go for a final dinner. A great bunch of awesome people was still there, and I really enjoyed hanging out with them that night. Being able to reflect on the week together with them, having further intriguing discussions, and enjoying our time together. After a great dinner we ended up for a last time in the lobby. Special thanks to Anne Colder and Vincent Wijnen for our wonderful conversations on one of my passions: computer games! I could feel they loved them just as much as I do, and also consider them a wonderful medium to tell stories and express art. Amazing.
The only downsides? Well, it was the last evening, the post-conference blues was about to come. And: my flight home got canceled due to strikes. Well, I tried to make the best out of it and booked a late check-out instead to sleep in as long as possible. Self-care, you know.

Saturday, Again - Time to Go Home

So, sleeping in it was. As I had the last evening flight, I took things very slowly. When it was finally time to say goodbye, it was quite sad to sit alone in the lobby. To not see unicorn toilet paper everywhere anymore. Unicorn land needs to wait one more year again. (Wait, only half a year, Agile Testing Days USA are coming first! :D).

Leaving for the airport I nearly couldn't follow-up with all the messages I received meanwhile. It was a long week. I got back home late. There was a lot to follow-up on. And yet I was tremendously happy. So long, and thanks for all the fish. See you all again next year!

Sunday, November 3, 2019

On Having Become #CodeConfident

For 2019, I've once more made a pact with my learning partner Toyer Mamoojee. This year my personal challenge was to become code-confident. To learn about my hypothesis, the experiment I designed and who influenced me to embark on this journey, please read the origin story. Now that the challenge is officially over, it's time to look back and forth.

Why This Challenge

Why did I pick this challenge? This question followed me throughout the year. Here are the reasons I discovered on my journey.
  • Programming is a skill that many people benefit from; no matter their role. I think this is the case already now, and presumably even more in the future.
  • Many of my peers in the testing community program every day.
  • People say coding skills are essential for us testers. Even to stay "employable" and get new jobs. Whenever I heard this, I felt I don't belong and that soon enough everyone will see that, too. Even worse, many people consider you only technical when you're able to code. I absolutely don't share these viewpoints, but still felt the need to prove myself that I am not only able to read code but also write code myself. It was about time to conquer this fear of losing my face by showing how much I don't know yet and to see for myself how much I can increase my programming skills in a certain time frame.
  • I feel I „specialize in generalizing“ (as Patrick Prill likes to say) - so I wanted to upskill as a generalist. To strengthen my strength by adding coding to my toolbox.
  • I wanted to be able to help my testing better through automation and tool creation.
  • I wanted to understand our product architecture better, how things work together, where they tend to break, where the risks are.
  • My knowledge is quite broad yet scattered, and never really deep. I have lots of bits and pieces of knowledge and often try to puzzle them together to see the bigger picture. I wanted to see how far I can go with this when it comes to coding. The good thing: I realized I don‘t have to know everything to belong. The main key is to keep yourself aware of your contributions and the value-add you bring, and then to keep going and learning new things, adding to that toolbox you bring.

Continuous Practicing

In the beginning I found the very first steps to be the easiest and the hardest at the same time. If you want to know more, read about my first steps until picking my first coding challenge. As soon as I published my first ever GitHub commit, things started to roll.

As I started out on this coding journey, I soon felt the urge to blog about my experiences and lessons. At the same time I wanted to avoid spending too much effort on blogging and rather put it into practicing. I decided to experiment with a new lightweight blog post type in the form of a coding journal, documenting my raw notes while coding. My hope was was that these kind of posts will serve three goals.
  1. Act as learning journal for myself, making my learning journey visible helping me acknowledge what I achieved
  2. Provide context for anyone who would like to check out my repositories and maybe provide feedback and support
  3. Potentially provide a source of learning and inspiration for anyone else following my journey
So I had finally started, I blogged about my journey - next thing to do was to call for collaborators, people to pair with me hands-on or provide feedback on my code. Once more I learned about the joy of doing things together when you put trust in each other. Compared to my Testing Tour last year, I did a lot on my own as well. However, I wouldn’t be where I am without my wonderful collaborators, so here’s a huge shout out to these great people!
Not mentioned above but never forgotten are my dear teammates supporting, encouraging and teaching me during work time. Thank you.

Besides those that paired with me, this wonderful community was a great factor and motivator on my journey by providing dearly needed encouragement! Like Angie Jones who recognized my growth in her technical workshops - which meant a lot to me! She even triggered me to submit to Test.bash();. Without her I wouldn’t have presented my lessons from this challenge at TestBash Manchster. Also, during the code-related workshops I attended this year I realized people thanked me for helping them - which made me realize I was indeed able to help them!

After getting started with my first challenge, I decided to go from more familiar topics to the least familiar ones for me. So I came up with the following plan.
  1. Start with automated testing through the UI (though these tests might actually be the most complex, starting with something familiar made perfect sense to me);
  2. Then go a level deeper to API testing;
  3. Then to unit testing;
  4. Now cross over to writing features myself, first implement a small backend feature;
  5. Then implement a small frontend feature.
I hoped afterwards I would already be ready to start my proof of concept project.

Last but not least: while working on my challenges, I had to keep an eye on my self-imposed constraints.
  • Pause criteria - play computer games at least once a week
  • No online courses or tutorials - at least not for the actual practice scope
  • Time - at some point I realized I had to speed up, especially for the TestBash Manchester talk
The great news is: I fulfilled the promise to myself to have at least five repositories of practice projects published on GitHub - even in five months!

Time to Tackle the End Game

As I had hoped, I was now ready to build an application myself. I pondered for a long time what I could do as my final proof of concept app. In the end I decided to create a learning journal. An app that would help me tackle my challenges, based on what I learned so far - and other people could use the same approach. A place to define a challenge, a hypothesis, the experiment. A place to track your progress, to evaluate your results.

So this it was! I created “Journey” - a learning journal application. I wanted to use a similar tech stack to what we have at work. In the end not as similar as I intended yet still really useful for practice.

However, there‘s a twist to it. I decided to kick-start the project so I wouldn’t have to deal with the whole setup. I chose a tool called Jhipster which allows you to generate apps from scratch. Great, right? Well, this approach had upsides and downsides to it. First and foremost: I felt guilty, like I cheated by doing this jump start; while being well aware that at work we also used code generators in the beginning of a project, like the Spring Initalizer or the generated snippets by Angular. It was great to already have a running base to work on; yet the project was bloated from the beginning, with features added that I did not need (like user management or auditing). When you start something from scratch, you know everything (or most of it); with this kick-start, I felt I immediately entered a legacy project, I had to learn how things work together. Yet after all it was still valuable for practice and learning! So I decided to move on with it.

Based on the generated code I then introduced my own entities, created views, modeled what I wanted it to do. What you can do with it is you can define your challenge, and you can create journal entries for your challenge, tracking your progress. Just that, serving as proof of concept. The project is absolutely not finished yet. There's so much more to do, and so much more there could be. It would be a great playground to practice all kinds of testing as well. Though my challenge is done, I can still continue work on it - which feels amazing!

Let's Evaluate

First of all: I could prove my hypothesis true. I did practice, I paired up, and in the end I did develop a small product.

Even more: My whole year was under the focus of coding. At conferences I chose courses, workshops, and talks according to my goal. I attended sessions about mutation testing, automation in testing, clean code practices, approval testing, Python for testers, Jest, and more.

The outcome was indeed actual confidence! End of August I finally realized how much I had worked on code at work over the last weeks. I found myself writing unit tests for our new frontend, to help my developers with our safety net here and to understand our product architecture better to see where it breaks. We were experimenting with mutation testing. I even did some refactoring myself! I finally realized it was the result of having become code-confident (past tense!). To illustrate that, for example I found myself having inner dialogs like the following:
"Okay, now I’m tackling the split of this dialog component into two. Or - nah, maybe someone else should do it, they could do it more efficiently. Or maybe we do it together! Pairing is great. Well, let's have a short look at it first. Oh, that looks like more than I thought it would... Well, whatever, let’s try anyways."
And I was able to do it! In addition, by doing so I understood our application a lot better. The thing is: I would have been capable of doing this before already - yet I didn’t dare to do so. I hesitated, found excuses.  Now I am not afraid anymore to try and to learn by doing. I know there’s a lot more to learn - and that’s fine!
All this made me think. I could stop now with confidence - yet what about if I dare even more? Step even more out of my comfort zone? When preparing my TestBash talk about this whole challenge, my original idea was to have no slides at all, just code, walking people through. Well - obviously I still had slides in the end, I did not dare go without them (yet!). Still I wanted to dare even more. So I decided to do some live coding on stage to show my confidence. I considered that this might go horribly wrong - yet at least I would have tried it. I thought, even if I failed I would have succeeded as I would have dared; and I would have learned what not to do in these situations. ;-) So I prepared for it. I chose my proof of concept project Journey as my target app. I chose a super small change to make it less scary, to not take too long, something that would still allow me to narrate what I am doing at the same time. Small steps, right? Also, I chose a frontend change so people could see the impact right away without me having to restart the app. So that's how I did it - and it worked out!

Plenty of Lessons Learned

There are a lot of lessons to take away from this journey. Let's start with the lessons learned when working with code.
  • Learn how to go in small steps. And then even smaller steps.
  • Googling is a real skill - if you know what to look for it will save you lots of time.
  • Read things carefully. Documentation, exceptions, what methods expect - don't skim over them but read them properly! Sometimes you really need to read everything to get the information you need.
  • Keep maintenance in mind. Would a method now take more than three parameters? Then it's time to refactor as it's getting too big to keep it in the head. One method, one purpose; keep it small. Shall we extract a method for a line that's used in two places? It might not be worth the effort, yet should be consistent. The most elegant solution might not be most readable one, find the middle way.
  • Test the tests. I encountered this classic several times: a test that's constantly green but not checking the right thing (or no thing at all). Sigh.
  • Learn IDE shortcuts by heart; especially for all features you constantly use.
When it comes to code review:
  • Get feedback early and incrementally.
  • Don’t take it personal.
  • Learn from it.
  • Thank people for their feedback.
  • Respond to each feedback.
  • Need to discuss? Then rather discuss in person.
  • Stay patient.
  • It’s scary but worth it!
And finally, I also learned a lot on the personal challenge itself.
  • Learning by exploring is really valuable (and very close to our everyday work). I have a hunch, thought, that it might be best combined with some more structured training.
  • In the end it’s all about practice, practice, practice. It's not about doing things perfect from the start, but about daring imperfection and getting feedback to improve.
  • Pair up for success. (Obviously.)
  • Follow your energies and don’t forget to take breaks. Tired days are not helping. For a private project you have the luxury of leaving a problem for a while and follow your energies instead to keep the momentum. After a while you can either come back to the problem or leave it there (if it’s just for practice); at work we often have to push through, yet defocusing can still help there as well.
Overall, I learned a lot! But I also struggled a lot. My biggest struggle increased my empathy for my developers. Not only the kind of work they do as problem solvers, or having your own work reviewed, but especially when it comes to testing.

When developing I caught myself just wanting to make things work and then move on. The sad truth is, I postponed errors. I sometimes did not test a change at all, neither using exploration nor automation. I just wanted to move to the next change and the next and the next… I really should know better and yet did not care! (Still can't believe this. Super embarrassing.) I really had to remind myself of switching between development and testing modes, or rather intertwine them. This is not easy and I will need to continue practicing. Now I know better how they feel and how difficult it can be to not jump to the next feature.

What else?

Besides this challenge: I‘m finally enjoying my hobby again! As I promised to myself, I played a computer game each week since 2018, December 16th. :D Yet honestly, I struggled to achieve even that. I did not play too much each week. The sad truth is, I dearly needed this personal limit to take better care of myself. So, I'm still working on finding a better balance. We should not put our personal lives behind our personal development.

Now that I survived puzzling bits and pieces of knowledge together to create something myself - I can go back to school! :-) I wanted to fill my theoretical knowledge gaps and get a deeper understanding of the languages, or at least revisit the basics. To begin with, I finally did a bunch of more courses offered by the Test Automation University. By doing so, I discovered that I knew a lot of these things already! This kind of confirmation is a really encouraging. Also, this made me revisit some important concepts that I had heard of already yet never really memorized. As a side effect, I know now that these courses are very worth recommending, they are well taught and provide a wealth of easily accessible, free knowledge. If you haven't done so already, check them out.

At work, I continued to contribute in new ways, using and practicing my coding skills a lot more. This feels so good! Especially as researching real problems open up so many opportunities to learn more.

Oh, and I'm sure there will be another personal challenge for 2020! :-) I'm already thinking about it. Yet no matter what I might choose, I already made a decision to continuously offer pairing sessions, on various topics. Over the last years this proved to be extremely beneficial to all parties. In case you're up for it, feel free to check my availability for the next period on Calendly and book a session with me.

In Summary

If you want to go on your own journey and tackle your own challenge, then break it down so it becomes testable and therefore achievable. Explore using the knowledge you already picked up on your way, and practice! Yet always remember: take care of yourself first.