Monday, April 15, 2019

TestBash Brighton & Automation in Testing - A Full Week of Learning

About a week ago, I returned home from a full week of learning. I got selected to speak at Test Bash Brighton 2019, the mother of all TestBashes - feeling super honored! When I learned that Richard Bradshaw and Mark Winteringham offered their three day course "Automation in Testing" just before the conference, I decided to extend my stay by these days.

Automation In Testing

The first time I heard about this topic was by listening to Richard's talk back in 2015 at Agile Testing Days. I got intrigued, and joined Richard's and Mark's related tutorial day the year afterwards. I was super curious how their content evolved. And I did not regret it at all, to the contrary!

They gave the course for the tenth time and thus labeled it their version 1.0. Also, as we started on April 1, a nice little April's fools joke was included ;-)

Now, I don't want to spoil the contents of the course. I'd rather heavily recommend that you take it.

What I really liked was that the following things were in focus:
  • Testing and us as humans involved
  • The multiple ways how automation can help your testing
  • The manifold ways existing or self-built tools can help your testing
  • How to educate people back home
  • Many different hands-on exercises, learning and practicing together, in smaller and larger groups
The people-centered focus of the course was even greater as the participants were a wonderful group of kind people, eager to learn, open to collaborate. They made the course special!

Besides the actual content, I learned a lot about myself once more during the course. We had time to solve a problem on the second day. Our table's group worked very well together before, yet we stumbled in this challenge. Speaking for myself: I found myself pressured by the task at hand, especially by the limited time and the need to justify our decisions well at the end. I found myself not being able to make the jump from our great discussions on architecture and prioritization to actual implementation. I found myself a lot less confident in implementation than I would like to be. I found myself getting paralyzed by the fact that much of what we wanted to do existed already in the project, so what's the point of implementing it again. I found myself realizing the more stressed I am, the less I understand, also acoustically, the more solo I work, the less help I seek - the less I enjoy what I am doing. I found myself getting angry with myself. This was a real grounding experience. The good thing: The next day we found ourselves in different groups, getting a different problem to solve. And we thrived together! The whole table mobbed together, getting all tasks done by bringing all our knowledge, experience, observations and any other skill in. A wonderful experience! Now, all being said: if you have the chance, try it yourself.

The only downside of taking the course was that I missed the overlapping new conference TestBash Essentials. From what I heard from very experienced people, the talks were all super high quality and very welcome reminders of the basics we might have never got taught ourselves! Hope I can catch this new format next time.


TestBash Workshops

For the workshop day I chose two that I've wanted to attend for some time now. In Angie Jones' "Clean Coding Practices for Test Automation" workshop she guided us in refactoring a "smelly" automation project, sharing her wisdom of good practices and design patterns for automation throughout. It was great, well structured, easy to follow, giving time to practice and find the solution ourselves before discussing it. I really enjoyed it!
In the afternoon I joined Mark Winteringham's workshop "Approval Testing: Superpower Your Automation Feedback". I've heard of the approval testing approach for quite some time now, yet never got my hands on it to give it a try myself. The workshop gave me exactly this opportunity, and I was positively surprised by how easy and fast it was to add valid tests. Even though you had to run them at least once to approve the first snapshot. The workshop was well instructed and easy to follow along.
During both workshops, I worked solo. Not my preferred way of working, yet paying well into my #CodeConfident challenge. A personal achievement during Mark's workshop was that I was able to do all exercises quickly and offer my help for others!

TestBash Conference Day

The big day came, and I had the honor to open the conference! In my talk "Cross-team Pair Testing: Lessons of a Testing Traveler" I shared the lessons learned on my Testing Tour. I was overwhelmed by all the positive feedback I received afterwards, both in person and on Twitter! This really added to my confidence. As this if often dearly needed, I established a habit over the last conferences. To make my own achievements visible, I started to list all the feedback I received for myself. Whenever I am having a bad day, that's something to look back into. It really helps me to acknowledge that I indeed could provide value to these people. I am also always creating a Twitter moment and add all tweets to it. I normally don't share these, yet feel free to check it out my TestBash Brighton Twitter moment to see for yourself.
The greatest thing: With my talk I could inspire many other people to go on a testing tour themselves, or start pair testing with other testers at their company. The best feedback ever!
The rest of the day, I created sketchnotes of the talks again - I found I really enjoy this style of note taking during talks. I remember a lot more from the talks, and the community really welcomes me sharing them - so thank you Marianne Duijst once more for your huge inspiration!
When it comes to Marianne, who normally creates wonderful sketchnotes herself: this time she did the amazing endeavor of live blogging the talks. Check them out to get a lot more in-depth impressions of the talks!


TestBash Open Space

Saturday came, and it was the sixth day of learning in a row. I had to admit to myself that my brain did not work well anymore. So I've spent most of the open space sessions in the hallway, in conversations with other people. That re-energized again!
The one session that stood out for me personally was the last one where I joined Jay Harris being asked all things hacking and penetration testing. Absolutely informative, learning a bunch!

Relaxing and Looking Forward

The conference was over, and there were few people left. One of them was Melissa Eaden, and we chose to go sightseeing together. We had a lovely time! If you get the chance to, speak with Mel. She is simply amazing. Extremely knowledgeable, inspiring, and simply fun to be around with.
This conference was made by the community, the people. I loved the reunion with many wonderful beings, such as João Proença, Patrick Prill, Gil Zilberfeld, Gem Hill, Claire Reckless. It was great to meet people for the first time in real life, like Parveen Khan. And it's always great to meet many new people as well, many of them on their first testing conference like Marissa or Georgia Bloyce!
I had a very great time, and am already looking forward to returning to the UK for my next TestBash - as I got selected to speak at TestBash Manchester as well! For this I will share my journey and lessons learned from my challenge of becoming #CodeConfident. This will be a brand-new presentation - so Patrick, I need you and looking forward to receiving your wonderful feedback! :-)

Friday, April 12, 2019

Calling for Diversity - Tickets for the German Testing Day

The German Testing Day 2019 will take place on June 7th in Frankfurt am Main, preceded by a pre-conference event with workshops the day before. Check out the awesome complete conference program or the one filtered for English talks.

This year I have the honor of giving the opening keynote, and by doing so I have the following conference tickets to give away:
  • two tickets including travel assistance, and
  • one ticket without travel assistance.
These tickets are intended to increase the diversity of the German Testing Day and to enable people to attend the event who would not be able to come without support. Following Cassandra H. Leung’s great example, here’s how it goes.

How to Apply

Simply let us know why you’d like to attend the German Testing Day this year but cannot come on your own. Maybe you are just starting your career in software testing. Maybe you don’t receive financial support from your employer. Whatever it is, tell us your story!

Please send an email to info[at]germantestingday.info with the subject “GTD 2019 DIVERSITY”.

We are accepting applications from today, Friday, April 12th, until 15:00 CEST on Sunday, May 5th - so go for it and send it in now!

The lucky ones will be contacted shortly after the submission deadline. We’re looking forward to reading your stories. Good luck!

Interested in the finer details? Continue to read.

Who Are We

“We” are Thomas Rinke and Lisi Hocke in particular, responsible for the selection process, and the German Testing Day organizer group in general.

What Is Included and What Not

Tickets with travel assistance. These tickets will provide entry to both the pre-conference sessions and the conference day. Furthermore you will receive up to two hotel nights in one of the conference hotels (which will be booked by the organizers). Travel costs will be reimbursed up to a maximum of 250,- Euro after providing receipts.

Ticket(s) without travel assistance. Theses tickets will provide entry to both the pre-conference sessions and the conference day. Travel and accommodation is not provided, reimbursed or covered in any way.

The tickets are not redeemable for a monetary value.

Requirements for Your Application

To apply, you must be able to attend both the pre-conference event on June 6th, 2019 and the conference day on June 7th, 2019. Besides that, all you need is an interest in testing and quality and your story why we should pick you.

In order to allow us to make the best selection, please also tell us your honest thoughts on how much you depend on the travel assistance.

If you win, you must also provide us with a means of privately sharing information on how to claim the free ticket. An email address is ideal for this.

What Happens if You Win

If you win, you will be provided with instructions how to register for the German Testing Day 2019 free of charge. You will need to provide us with some means of privately sending you this information, preferably an email address. This will only be used for the purpose of contacting you regarding the GTD diversity tickets.

Terms and Conditions & Data Privacy

If you get selected, you will be provided with instructions to register the German Testing Day 2019 free of charge. In order to complete the registration, you will have to agree to SIGS Datacom terms and conditions and data privacy statement. If you decide not to agree, or find that you are not able to attend for any reason, please let us and SIGS Datacom know as soon as possible, so another lucky person can be selected.

Wednesday, March 13, 2019

#CodeConfident: Serenity Cucumber Practice - Part 3

This is the continuation of the coding journal on my first public code challenge serenity-cucumber-practice. If you haven't done so already, it's advisable to check out the previous entries first.
Although this part reflects only one more step in this practice project, its impact was huge. Parveen Khan had scheduled a pairing session with me. I was really looking forward to it as we had a call end of last year where she had shared that she was on a similar learning journey as I was!

March 9

  • #CodeConfident live pairing session with Parveen Khan
  • shared our challenges and struggles, what we want to learn
  • demoed the existing project, what's included, how it works, how I got started
  • Parveen agreed to give it a try, she drove and I navigated her through
  • implemented a new scenario this way, sharing a product to a friend
  • could re-use the given step; the when step was easily done; regarding the then step, we could not yet find the correct locator as it hit the wrong element; here we ran out of time
  • we did all that in very small time frame
  • in retrospect, Parveen shared how scary but how great it was to do it herself, but now she understood what we do; she only wrote feature files so far, not more; asked lots of people to explain the concepts; only when she now did it hands-on, getting instructions she understood the connections; once again the magic of strong-style pairing! really really happy about the outcome; great practice for myself as navigator as well, felt quite confident in what we were doing
  • we agreed to have a second session, Parveen will practice as well and then we can tackle the next challenge together
  • TODO: fix, clean-up and commit

March 9 (cont)

  • fixed locator
  • cleaned up, adapt code to domain language
  • committed scenario


Meanwhile...

Shortly after Parveen and I had our session, the program for TestBash Germany 2019 got released. You can't imagine how delighted I was to see Parveen on that program! Originally, I had planned to skip the 2019 edition as my schedule is very tight this year and I promised myself to take care of myself. However - Parveen now really makes me buy a ticket! I simply cannot miss the chance to see her speak. She has so much to share we all can learn from! Oh, and if you cannot make TestBash Germany, she's speaking at Agile testing Days USA as well ;)

Sunday, March 3, 2019

#CodeConfident: Serenity Cucumber Practice - Part 2

If you've read the coding journal of my first #CodeConfident challenge, you know that I've called for collaboration. The great thing: people followed the call! Many thanks to those who gave feedback on my first public code challenge serenity-cucumber-practice. Here's how the story continues and the project evolved.

February 7

  • received the following code review feedback from Peter Kofler:
  • "The Java language `assert` should not be used in tests. It can be disabled (is disabled by default) and does not give a good error message. I recommend using `assertEquals(expected, actual):` I see Serenity comes with AssertJ includes. I recommend using that. Open http://thucydides.info/docs/serenity-staging/ and search for assertj."
    --> switched from Java assert to use AssertJ assertions (http://joel-costigliola.github.io/assertj/assertj-core-quick-start.html); now understood why the Java asserts did not provide me as great messages as the Groovy asserts we use at work (note to myself: should have questioned that earlier...)
    --> "Thanks a lot! I already wondered why the asserts did not provide me a decent message. Switched to AssertJ assertions now, definitely a way better option :)"
  • "You do not have to create a branch for a work in progress test. Instead mark it as pending. E.g. Cucumber's "@wip" in the feature file ignores the scenario. Here are some options https://stackoverflow.com/q/3064078/104143"
    --> added option to ignore certain features & scenarios, excluding the tag from the Cucumber test runner
    --> "Thanks! I am aware I don't have to create branches to try things out. In this special case I decided to go for a branch as I was already suspecting that my approach is flawed and won't work. I only wanted to keep the work for reference and to receive feedback on it. Still, I now added the option to ignore single features or scenarios, something I was aware of but had not included here. Thanks for the hint!"
  • "All methods in this file are too long. Maybe split out chunks of coherent logic into helper methods. E.g. line 125-132 could go into a `createProductJsonItem()` method. Also building the request should go into another method. The remaining top level method will be easier to understand."
    --> did not think of this as this was "only" playground code - and yet it still makes any code harder to read, even if it's throw-away code; so, split parts into helper methods
    --> "Good point, thanks! I've now split parts into helper methods."

February 25

  • first #CodeConfident live pairing session with João Proença
  • I showed the project status, shared the struggles with the remove item from cart scenario
    • João: let's first see what it really does; inspected the add to cart button
    • we learned we can simply use the URL call sent on adding an item to the cart ("http://automationpractice.com/index.php?controller=cart&add=1&id_product=1&token=e817bb0705dd58da8db074c69f729fd8"); learned that the token parameter is not needed, but this call only works in case you have a session first, so need to access the page in general in the same browser session first; --> we implemented this approach and it worked! :D
    • there are still problems with it, like the usage of a hardcoded product id; we are depending on its existence; João would rather use the product name or something; using a proper API to create our test data would be best
    • João is using a lot of subcutaneous testing for his product, using an API that's exactly called as the UI calls it, would increase testability here a lot
    • test data management is a really complex topic; they first tried the approach to set up the complete data before any test suite run, which turned into a big monster; now they are offering methods to create test data on demand when needed for each scenario; we use the latter approach at work, too
    • I learned what I missed when searching for a solution myself: the exploratory mindset when approaching an automation problem, I already jumped to approaches I knew
  • another problem João sees: usage of product ids in the feature files is not nice; would rather use the product name
    • João explored the URLs found in the source, could not find something suitable; "?name_product=Blouse" or "?name=Blouse" were not working
    • ideas: we could 1) maintain a sort of dictionary in the code to map id and names, 2) use any product randomly but we would loose deterministic characteristic of the test, 3) hide the product id to lower levels as we don't care which one is used (in our product we often use the third approach)
  • I shared my challenge to hover over category menus
    • João would try an implementation to hover over the element then debug the test and see what's really happening; would probably need to wait that submenu is displayed, would check that style is changed to block
    • afair the problem was finding the element to hover over; João: maybe the element did not have the hover, seems the <li> has it
  • retrospective: for João it was a really cool session, these kind of exercises always trigger interesting discussion, e.g. around test data management, that the Serenity session offers to pass over variables between steps, and more; was really productive for him; Lisi: was really cool, the biggest learning was to see João's approach how to tackled these challenges, realized I got stuck in my boxes when tackling different challenges but should rather combine all skills I have; the short coding part together was nice too, would like to see more of that in future sessions, but also had really interesting discussions, was eye-opening overall; João: I'm not coding all the time, I'm not the person for that, rather trying to figure out shortcuts like calling the URL, I saw the URL and found it interesting so I tried things there; it's really about combining the skills to the problem, it's not just coding
  • TODO: commit solution, hide product ids, try again hover scenario, add update quantity scenario
  • TODO: update blog post / create new one, including code review from Peter and session with João; ask both first whether they are okay with that!
  • TODO: select next challenge
  • reflection before session and afterwards: we did it now quite similar to Angie Jones' proposal: http://angiejones.tech/hybrid-tests-automation-pyramid/
  • realized that the needed URL was only given when inspecting the "add to cart" button on the search page, not on the product page itself!


February 25 (cont)


February 26

  • hid product ids from shopping cart scenario steps, don't care which product it is
  • TODO: try again hover scenario, add update quantity scenario
  • TODO: create blog post with code review from Peter and session with João
  • TODO: select next challenge

February 27

  • aimed to implement hover scenario
  • tests suddenly get ignored and therefore skipped! found it's related to the tags used to mark parts to be ignored; as soon as no scenario is ignored the tests run; found that ignoring single scenarios still worked, but ignoring a whole feature file will lead to the not ignored one to be skipped! updating Gradle dependencies, rebuilding project, restarting, etc. did all not solve the issue; updated Serenity libraries to latest version --> now feature level tags work again!
  • found that TightVNC can auto-scale the window, more useful for my case than TigerVNC on Windows
  • found a way to navigate to the desired category (not elegant, but it's working)
  • found that the assertion failed and yet the scenario was marked as passed! IntelliJ warned that the assertion result is indeed ignored; using a JUnit assert the assertion throws... lesson learned: sometimes it helps to walk away, take a break, then have a look again; this way I found that I set a bracket at the wrong spot so I did not really assert for something
  • cleaned up
  • TODO: add update quantity scenario
  • TODO: create blog post with code review from Peter and session with João
  • TODO: select next challenge

February 28

  • implemented update quantity scenario
  • got annoyed by rewriting camel case to snake case, so installed this plugin to switch easily: http://plugins.jetbrains.com/plugin/7160-camelcase
  • speed of implementing very first attempt heavily increased the last days when practicing more regularly :)
  • remembered how to wait for expected condition
  • remembered how to cast different data types in Java
  • remembered regex for numbers
  • realized code style inconsistency, having step definitions in snake case and all other methods in camel case; unified it in favor of camel case
  • TODO: create blog post with code review from Peter and session with João

What else, what's next?

A few more pairing sessions had been arranged already. We will decide on the challenges to tackle together when the sessions get closer. In case you'd like to become a part of my journey, feel free to schedule a session with me as well.

Although I had not planned to do so this year, Angie Jones triggered me to submit to Test.bash(); - and in the end I could not resist any longer. The topic? My code-confident challenge of course. Fingers crossed!
Besides that, my Test Automation University course "The Whole Team Approach to Continuous Testing" is finally recorded and about to go live soon - which means I have my focus back on becoming code-confident. I'm about to choose my second code challenge these days, so stay tuned for more!

Thursday, February 21, 2019

European Testing Conference 2019 - Designed for Us

Last year I got selected to speak at European Testing Conference together with my learning partner, Toyer Mamoojee. It was such an inspiring experience that I knew I had to come again in 2019. And yet again it was amazing!
For this edition I was joining the conference as participant - nothing to do for me than learning together with great people of many different roles and perspectives, all interested in testing. After speaking at many conferences this was a really relaxed experience that I really enjoyed for a change.
Here are the sessions I attended, including my sketchnotes.
As always, I tried to get the most out of the event, not only attending all session slots (I felt I also had the energy to do so), but also making good use of the breaks to talk with people old and new, and of course using the time after the official program was over. After experiencing a lot of conferences during the last few years (a lot more than I ever imagined, thanks to my speaking challenge of 2017), I learned that the unofficial socializing part of a conference is usually the most valuable time spent. Attending sessions is great and a good learning experience, and yet exchanging knowledge and new things learned with my peers is unbeatable.

The great thing about European Testing Conference is that they design the conference so that plenty of these kind of informal learning opportunities and networking chances are available, the space for that is created by intention. You only have to seize the moment! To get further impressions about this very special atmosphere, check out the following links.
One conference was over, and the next one started! I felt really honored and lucky to get the opportunity to attend #ET19 just the day after European Testing Conference. This was my very first peer conference, and also one about a topic very dear to my heart: exploratory testing. For now, I can only say so much: it was great, and it was a lot to take in! I still have to process everything. In the meantime, check out Marianne Duijst's awesome #ET19 sketchnotes.
Last but not least, here are some of my favorite #ETCmoments of 2019! I'm already looking forward to the 2020 edition of European Testing Conference!

Thursday, February 7, 2019

#CodeConfident: Serenity Cucumber Practice

As announced, I plan to publish my coding journal for each GitHub repository I create within my #CodeConfident challenge. I've just finished the scope of my first challenge, so here are my related notes; as raw as they are, in chronological order. My hope is that they 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 repository and maybe provide feedback and support
  3. Potentially provide a source of learning and inspiration for anyone else following my journey
Here's my journal for my first GitHub repository serenity-cucumber-practice. Want to provide feedback on it or pair up with me on further challenges? I hereby call for collaboration!

January 13

  • start from Serenity Cucumber starter project (https://github.com/serenity-bdd/serenity-cucumber-starter)
  • set up remote Chrome running Docker  
  • install TigerVNC for Windows 
  • revise scenario 
  • adapt step definitions -> still successful (gradlew clean test aggregate) 
  • create first page object and try to open it -> not compiling, packages to import "don't exist": "error: package net.serenitybdd.core.pages does not exist" 
  • TODO: fix issue

January 14

  • followed instructions to have page objects in main>java, which resulted in lots of fruitless searching why I got a "error: package does not exist" and the class and import could not be added to the classpath by IntelliJ; tried lots of things until realizing the resolved dependencies are shown in External Libraries for each module in the packages sidebar (always checked in the projects view); move of page object to another place solved the issue
  • "error: package net.serenitybdd.core.pages does not exist"  -> realized it has to be in test as only there dependencies are resolved by gradle build  
  • Selenium Grid setup in Docker is working as usual  
  • TODO: Clean up and do first minimal commit

January 15


January 17

  • generated SSH key and added it (all of https://help.github.com/articles/connecting-to-github-with-ssh/) -> worked like a charm, IntelliJ saves passphrase
  • discovered https://desktop.github.com/ -> could delete old branch via UI
  • first version of add item to cart scenario
  • cleaned up a bit
  • revising package structure: learned I need to put everything into one custom package, otherwise test runner fails
  • TODO: improve first scenario, then implement second

January 20


January 24


January 26


January 29


January 30

  • cleaned up branch
  • split different test version into methods to keep code for feedback and be able to switch between them easier
  • none of them is working, need feedback
  • TODO: implement 2 other scenarios on master to finish scope and ask for feedback

February 5


February 6

  • several potential scenarios to try
  • tried to go for categories; stumbled across finding a good selector for menu element, was not interactable
  • switched to extend the search feature by further scenarios; added view product page
  • tried to add view product preview and again element was not interactable; found I was using the mobile site not the website for locating it!
  • learned how to use actions to mouse over the element then the next element is interactable
  • learned how to switch to an iframe (https://www.guru99.com/handling-iframes-selenium.html)
  • merged latest master into branch
  • TODO: write blog post with learnings, ask for feedback

Calling for Feedback

That's it so far, good enough for now! Your feedback is appreciated.

Thursday, January 24, 2019

#CodeConfident: Getting Started with My Challenge

As soon as I made my challenge for 2019 to become code-confident public, I started thinking about how to tackle it. Drawing on the lessons of my past challenges, I created a Trello board to brainstorm and make things visible. From that starting point until my very first GitHub commit it took me quite some time. On the one hand I was facing other challenges at the same time and I still cannot fully focus on coding yet. On the other hand I honestly did not know how to get from a few familiar first steps to starting for real; and yet things evolved and finally all pieces fell into place.

Kicking Things Off

At work, we started out some months ago revising our legacy test automation through the UI in an incremental way. As it's work related and confidential I can only share generic lessons. Nonetheless, the frequent pair programming sessions are continuously increasing my confidence already, plus I get the feedback I desire to improve.

Still, kicking off my public learning journey was not that easy for me. Starting from my Trello board I added several lists. I brainstormed potential challenges I could tackle, courses and other resources to learn or get inspired from, people that might provide feedback or potential pairing partners, practice sites and last but not least my next todos.
As Calendly turned out to be massively useful when it comes to inviting people to pair up with me, I added a new event there. I read a bit more about licenses and how to properly use them when starting on GitHub. And I read really inspiring posts!

Then there was nothing left than the scariest task so far: decide on the first small challenge and start. I got stuck on that one for a while. Originally, I planned to finish another challenge I have and only afterwards start my coding challenge. However, this way I would have abandoned my challenge for several months which did not leave me with a good feeling. So I decided to mix things and follow my energies when it comes to deciding what to work on right now.

When really considering actual challenges to start with, I realized how comfortable and convenient it would be to just follow the guidance of a course instead of having to make decisions on my own and deliberately wander into the dark. At the same time I already presumed I would learn more by exploring.

Then I realized that defining a fixed scope and setting concrete goals for myself when to stop one coding challenge and move on to the next one was crucial for me to get started at all. My whole challenge is not about perfecting things or choosing exactly the best approach, the goal is practicing and this way eventually becoming more confident when coding.

And finally: If I would start with something I was more familiar with it would be less scary. I mean it would be scary enough to put something out there publicly, right?

This finally freed me up! I picked my first challenge. I made my first commit on my very first public GitHub repository. I nearly did not dare to celebrate it - and then still did it anyway the next day. Didn't regret it so far.
I haven't made much progress on my first coding challenge so far yet, and still I received lots of really encouraging feedback. Thank you everyone who supports me here! It means a lot to me.
Something came to my mind while setting everything up. Many people recommend to spend your time and energy and focus on working on your strengths, not on reducing your weaknesses. I feel more and more that my strength is being a generalist who can fill the gaps. Considering that, I'm indeed working on strengthening my strength right now. Even more important: I'm feeling good about it.

Coding Journal

When designing my challenge, I deliberately limited myself by defining pause and exit criteria for it. Therefore, I wanted to keep track of them early on. As they were depending on calendar weeks, I came up with just creating a new Google calendar and adding a new entry every time I managed to keep going with my challenge by granting myself free time to play a non-casual computer game. As I used Google calendars a lot already, this was a fast, easy and convenient way for me to get the quick visual overview I needed for monitoring.

After doing so, I realized I could also keep track of when I am actually working on things and document what I learned today, what were the next steps to go, and so on. So I added these to the same calendar as well. Yet again, doing one thing triggered another idea.

One of my goals was to spend less time writing lengthy blog posts. They were really valuable for me last year, this year, however, I wanted to use more time to work on hands-on challenges instead. Still, I'd like to preserve my lessons learned for my future self. My first reason why I blog is for my own learning, and only the second one is sharing my learning journey with the rest of the world in case someone cares. So I decided to try out a lightweight approach this time: For each GitHub repository I create, I plan to blog about what I learned on my way as sort of coding journal. Just the raw notes as they are, in chronological order. They might not be easy to follow for readers this way and yet will depict my learning journey as it went.

Only recently I came across a great blog post by Amy Williams about why you should keep a code diary and it clearly reflects my intention here. Give it a read and see for yourself.

Keeping Going

I'd like to spend a bit more time and go a few more steps on my own, then I'll call for collaboration and invite for feedback and hands-on pairing. Also, I hope to be able to focus more on my coding challenge from March on as other things will have been clarified until then. Well, that's at least my hope; I never know what might wait around the corner that will make me adjust my plan.

In conclusion, the challenge is clear. I can only grow more confident by practicing more. The good thing: I have the capacity to practice during my free time and the opportunity to practice at work as well. I consider myself lucky and I'm eager to make good use of it.