<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://filipin.eu/feed.xml" rel="self" type="application/atom+xml" /><link href="https://filipin.eu/" rel="alternate" type="text/html" /><updated>2026-08-13T16:24:45+00:00</updated><id>https://filipin.eu/feed.xml</id><title type="html">Filipin.eu</title><subtitle>Željko Filipin&apos;s blog. &lt;br /&gt;&lt;a href=&quot;/&quot;&gt;Home&lt;/a&gt; &lt;a href=&quot;/blog&quot;&gt;Blog&lt;/a&gt; &lt;a href=&quot;/tags&quot;&gt;Tags&lt;/a&gt; &lt;a href=&quot;/license&quot;&gt;License&lt;/a&gt;</subtitle><author><name>Željko Filipin</name></author><entry><title type="html">Vibe Composing With Claude Code</title><link href="https://filipin.eu/vibe-composing" rel="alternate" type="text/html" title="Vibe Composing With Claude Code" /><published>2026-06-26T00:00:00+00:00</published><updated>2026-06-26T00:00:00+00:00</updated><id>https://filipin.eu/vibe-composing</id><content type="html" xml:base="https://filipin.eu/vibe-composing"><![CDATA[<p><img src="assets/2026/vibe-composing.jpg" alt="Vibe Composing With Claude Code" title="Vibe Composing With Claude Code" /></p>

<p>Thanks to <a href="https://karlosmid.com/">Karlo Šmid</a> for the photo. Used with permission.</p>

<h2 id="the-idea">The Idea</h2>

<p>I wanted to give a five minute lightning talk in April at <a href="testival-80">Testival Meetup #80</a>. <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> is a topic everybody talks about these days. I play a few instruments. I’ll ask an AI for advice on how to write a song. Then, iterate with the AI over the song, live, in front of the audience. When I practiced it, it took hours, not minutes. I did not give up on the idea, but I had to significantly simplify it.</p>

<h2 id="the-plan">The Plan</h2>

<p>At home:</p>

<ul>
  <li>Ask an AI for advice on writing a song.</li>
  <li>Ask it to generate sample <a href="https://en.wikipedia.org/wiki/Tablature">tablatures</a> for a song.</li>
  <li>Prerecord the bassline and the guitar chords.</li>
</ul>

<p>At the event:</p>

<ul>
  <li>Play the prerecorded part from a computer.</li>
  <li>Play the guitar solo live.</li>
</ul>

<p>All music has to be composed and performed by me. I can only ask AI for advice. I can never follow its advice blindly.</p>

<h2 id="vibe-composing-git-repository">Vibe Composing Git Repository</h2>

<p>There are several popular AI tools. I have decided to use Claude Code. (Just Claude from now on.) I don’t know which model I used at the time, but it was probably Opus 4.6.</p>

<p>I thought it would be funny to ask a tool optimized to create code, to create tablatures instead. Both are just text, after all. What could possibly go wrong?!</p>

<p>After some conversations with Claude, we decided to compose a simple rock song in <a href="https://en.wikipedia.org/wiki/C_major">C major</a>. The chords are C, Am, Dm, F and G.</p>

<p>I have created a git repository, <a href="https://github.com/zeljkofilipin/vibe-composing">vibe-composing</a>. I decided to experiment with all the stringed instruments I have. Bass, guitar and ukulele. For each instrument, I asked Claude to generate a fretboard, a scale and both a simple and an advanced solo.</p>

<p>In addition to those, I asked it to generate the music I would play in the song. For example, a bassline for the bass, and the chords for the guitar.</p>

<h2 id="what-didnt-go-so-well">What Didn’t Go So Well</h2>

<p>At the time, I didn’t think I would write a blog post about it, so I didn’t save the conversations I had with Claude. That would be a fun read. A lot of the time I was complaining about mistakes it made.</p>

<p>Even when asking for very simple tablatures, it was getting things wrong. For example, it would mess up <a href="https://github.com/zeljkofilipin/vibe-composing/commit/aee38e4a535768ecd8c56f823994088131ac5e1b">whitespace</a>. Tablatures are read by humans, so whitespace is not significant. Except, nicely formatted text is much easier to read.</p>

<p>At one point I realized the bassline was so wrong, on so many levels. I decided to <a href="https://github.com/zeljkofilipin/vibe-composing/commit/d598dbc96ee6cf3f9ba53e0ff24a6bf3175b15f3">start over</a>. This time, I would record the mistakes. For a very simple bassline, it got <a href="https://github.com/zeljkofilipin/vibe-composing/commit/4e9bd66ef54312114170ba4d1def4a432a1e1562">two notes wrong</a>. Then I noticed <a href="https://github.com/zeljkofilipin/vibe-composing/commit/9b41128d54dc36154b6ce8d4773cebf5a94f93b7">one more wrong note</a>. Also, the text was <a href="https://github.com/zeljkofilipin/vibe-composing/commit/e6a2e3c7911fd7b7e304564eaad1e95f25e5372a">not formatted correctly</a>. All of that for just a very simple bassline.</p>

<p>(While writing the article, I took another look at the tablatures. Some of them are still wrong, in various ways. I didn’t have the time to fix them. Please report an issue on GitHub if you find something wrong in the tablatures.)</p>

<h2 id="what-worked-well">What Worked Well</h2>

<p>Out of all tablatures it created, <a href="https://github.com/zeljkofilipin/vibe-composing/blob/master/guitar-fretboard.txt">fretboards</a> were the most useful. (It shows where each note is on each string.) I used the guitar fretboard to practice the solo. There are plenty of fretboards available online. With a tool like Claude Code, you can create a custom one. Just for your instrument: type of the instrument, number of strings, number of frets, tuning…</p>

<h2 id="performance">Performance</h2>

<p>I didn’t have the time to check how my computer and guitar would sound in the room. It was a big, noisy room. Both my computer and small portable guitar amplifier that I had were not even close to being loud enough. I’m not sure if anybody heard anything. Lesson learned for the eventual next time. Bigger speakers. Check the sound in the room before the event.</p>

<p>That said, I did have a lot of fun playing live in front of a small friendly audience. I would do it again. If you would like to hear a funny talk about using an AI to help you create music, let me know.</p>

<h2 id="conclusion">Conclusion</h2>

<p>I was not impressed with Claude’s ability to create tablatures. Even for very simple tablatures, it was getting things wrong. It was doing almost ok for chords and scales, but I was not at all impressed with the solos it created. For none of the instruments.</p>

<p>I do understand I was using a tool optimized for generating code to generate tablatures. That was the point of the experiment.</p>

<p>It was a fun experiment. As with every experiment, I need to work on it more. I had very limited time for it, just a few hours. So, the experiment is in a half-finished stage. I’ll experiment more in the future, if some magical free time falls from the sky.</p>

<h2 id="handcrafted">Handcrafted</h2>

<p>No AI was used in writing this article. I wrote it the old fashioned way. Start with a blank page. Every single letter, word, sentence and paragraph was created by me and typed by me. I do use grammar and spell checking, but that’s all.</p>]]></content><author><name>Željko Filipin</name></author><category term="image" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #80, Zagreb, Croatia</title><link href="https://filipin.eu/testival-80" rel="alternate" type="text/html" title="Testival Meetup #80, Zagreb, Croatia" /><published>2026-05-08T00:00:00+00:00</published><updated>2026-05-08T00:00:00+00:00</updated><id>https://filipin.eu/testival-80</id><content type="html" xml:base="https://filipin.eu/testival-80"><![CDATA[<p><img src="assets/2026/testival-80.jpg" alt="Testival Meetup #80" title="Testival Meetup #80" /></p>

<h2 id="introduction">Introduction</h2>

<p>In April 2026 I have attended Testival meetup #80 (<a href="https://testival.eu/2026/04/01/testival-meetup-80/">testival.eu</a>, <a href="https://www.meetup.com/testival/events/313923239">meetup.com</a>).</p>

<p>It was a pretty big meetup, more than sixty people. Since there were so many people, the usual introduction at the beginning took about twenty minutes. A lot of people have very poor microphone skills. It was a big room with a lot of people. If you didn’t speak directly into the microphone, nobody could hear you.</p>

<p>There were three longer talks, a break and one lightning talk.</p>

<h2 id="talks">Talks</h2>

<p>There were three talks. All by the people from the host company, Super. I’m not sure I have the correct titles of the talks. I should get slides from the talks soon, so I will update the post.</p>

<p>The host made a mistake of having three talks. One talk is usually enough. Two might work, if they are not too long. But with three talks, there was almost no time to socialize. That is an important part of in person meetups. When the talks were finished, the vast majority of the people left.</p>

<h3 id="ai-in-qa">AI in QA</h3>

<p>There was a lot of <a href="https://en.wikipedia.org/wiki/Prompt_engineering">prompt engineering</a>. I prefer more engineering, less prompts. To my surprise, there was a lively discussion after the talk. Several people asked questions. I might be one of the rare people not excited by prompt engineering.</p>

<h3 id="ai-augmented-quality-engineering">AI augmented quality engineering</h3>

<p>I’m not sure I even understood what the speaker was talking about. Except, there was plenty of prompt engineering. Again, there was a lively discussion after the talk. I might just be too old and too grumpy.</p>

<h3 id="load-testing">Load testing</h3>

<p>Finally a talk with just engineering and very little prompts. It was about using <a href="https://k6.io/">k6</a> and <a href="https://kubernetes.io/">Kubernetes</a>. There was another lively discussion after the talk. Some people had questions for every speaker. That’s impressive.</p>

<h2 id="lightning-talks">Lightning talks</h2>

<p>As the only lightning talk, when most of the people already left, I talked about <a href="https://github.com/zeljkofilipin/vibe-composing">vibe-composing</a>. It’s an experiment in composing music with Claude Code. The part of the talk was me playing live on my guitar. I didn’t have the time to check how my guitar will sound in the room, so I’m not sure if anybody heard anything. Anyway, I’m glad I got a chance to play in front of a small and friendly audience. If I give a similar talk in the future, I’ll make sure to check the sound first. It’s an important part of the talk.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #79, Zagreb, Croatia</title><link href="https://filipin.eu/testival-79" rel="alternate" type="text/html" title="Testival Meetup #79, Zagreb, Croatia" /><published>2026-04-22T00:00:00+00:00</published><updated>2026-04-22T00:00:00+00:00</updated><id>https://filipin.eu/testival-79</id><content type="html" xml:base="https://filipin.eu/testival-79"><![CDATA[<p><img src="assets/2026/testival-79.jpg" alt="Testival Meetup #79" title="Testival Meetup #79" /></p>

<p>Last month we didn’t have a regular Testival meetup, so we had the second <a href="https://www.meetup.com/testival/events/313776699/">Testival book club</a>. The attendance was lower than the <a href="testival-78">last time</a>. This time only three of us came. It is my fault. I organized the meetup on very short notice. March was really busy.</p>

<p>We were talking about <a href="https://www.goodreads.com/book/show/201116293-taking-testing-seriously">Taking Testing Seriously: The Rapid Software Testing Approach</a> by James Bach. I was the only one that finished the book. Other attendees (Karlo and Bojan) started reading, but didn’t finish yet.</p>

<p>It was still a good meetup. Karlo wrote a blog post <a href="https://karlosmid.com/2026/03/an-unexpected-display-of-art/">An unexpected display of art</a> about it.</p>

<p>During the last meetup, I didn’t yet write <a href="taking-testing-seriously">Taking Testing Seriously by James Bach and Michael Bolton</a>. I also depended on my Kindle for highlights from the book. Looking for relevant highlights on the Kindle proved not to be fast, so this time I have printed both the blog post and all of my Kindle highlights. It made it much faster to find things.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Quibble Local: Yet Another MediaWiki Local Development Environment</title><link href="https://filipin.eu/quibble-local" rel="alternate" type="text/html" title="Quibble Local: Yet Another MediaWiki Local Development Environment" /><published>2026-03-31T00:00:00+00:00</published><updated>2026-03-31T00:00:00+00:00</updated><id>https://filipin.eu/quibble-local</id><content type="html" xml:base="https://filipin.eu/quibble-local"><![CDATA[<h2 id="mediawiki-local-development-environments">MediaWiki Local Development Environments</h2>

<p>At work, I have to set up <a href="https://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a> on my machine frequently. Setting up <a href="https://www.mediawiki.org/wiki/Core">MediaWiki Core</a> is not a big problem. The problem is when you want to install an <a href="https://www.mediawiki.org/wiki/Manual:Extensions">extension</a> or a <a href="https://www.mediawiki.org/wiki/Manual:Skins">skin</a>. Some extensions and some skins are easy to install and set up. Some are very complicated. Guess which ones I have to install most of the time.</p>

<p>Over the years, I have tried several MediaWiki local development environments. (I’ll use just the <em>environment</em> from now on.) The list below is roughly by the time I started using each tool.</p>

<ul>
  <li><a href="https://www.mediawiki.org/wiki/MediaWiki-Vagrant">MediaWiki-Vagrant</a></li>
  <li><a href="https://www.mediawiki.org/wiki/MediaWiki-Docker">MediaWiki-Docker</a></li>
  <li><a href="https://www.mediawiki.org/wiki/Cli">cli</a></li>
  <li><a href="https://gitlab.wikimedia.org/repos/test-platform/mediawiki-quickstart">MediaWiki-Quickstart</a></li>
</ul>

<p>In 2023 I created a task to explore various available options (<a href="https://phabricator.wikimedia.org/T344682">T344682</a>).</p>

<p>A few environments I didn’t even manage to try yet.</p>

<ul>
  <li><a href="https://gitlab.com/wmde/technical-wishes/docker-dev">docker-dev</a></li>
  <li><a href="https://www.mediawiki.org/wiki/Local_development_quickstart">Local development quickstart</a></li>
</ul>

<p>I’m sure I’m missing a few environments. I remember trying some environments that no longer exist.</p>

<p>What’s the point? Obviously, there’s a need for environments. No existing environment has all, or at least most, of the features developers are looking for.</p>

<h2 id="quibble">Quibble</h2>

<p>I was working on a project that required me to take a good look at <a href="https://doc.wikimedia.org/quibble/">Quibble</a>. Quibble is an important part of our continuous integration. It’s the part that installs and configures MediaWiki Core with various combinations of extensions and skins.</p>

<p>As a first step of taking a good look at it, I updated a very old wiki page, <a href="https://www.mediawiki.org/wiki/Selenium/How-to/Run_tests_targeting_Quibble">Run tests targeting Quibble</a>. I have created the page in 2019, and the last update to the page was in 2021.</p>

<p>I was playing with Quibble and updating the page. I was pretty happy with Quibble features. I was not at all happy with the commands I had to write.</p>

<p>For example, this command installs MediaWiki Core.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">docker run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="se">\</span>
  <span class="nt">--entrypoint</span><span class="o">=</span>quibble-with-supervisord <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/cache:/cache <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/log:/workspace/log <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/ref:/srv/git:ro <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/src:/workspace/src <span class="se">\</span>
  docker-registry.wikimedia.org/releng/quibble-bullseye-php83:latest</code></pre></figure>

<p>This one runs Selenium tests.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">docker run <span class="nt">-it</span> <span class="nt">--rm</span> <span class="se">\</span>
  <span class="nt">--entrypoint</span><span class="o">=</span>quibble-with-supervisord <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/cache:/cache <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/log:/workspace/log <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/ref:/srv/git:ro <span class="se">\</span>
  <span class="nt">-v</span> <span class="s2">"</span><span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span><span class="s2">"</span>/src:/workspace/src <span class="se">\</span>
  docker-registry.wikimedia.org/releng/quibble-bullseye-php83:latest <span class="se">\</span>
  <span class="nt">--skip-zuul</span> <span class="se">\</span>
  <span class="nt">--skip-deps</span> <span class="se">\</span>
  <span class="nt">--run</span> selenium</code></pre></figure>

<p>Pretty quickly I had enough of copy/pasting long multi-line commands.</p>

<p>In MediaWiki-Quickstart, the same can be done with these commands.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./fresh_install
./run_selenium_tests</code></pre></figure>

<p>That’s way more to my taste.</p>

<h2 id="quibble-local">Quibble Local</h2>

<p>In the spirit of <a href="https://xkcd.com/927/">xkcd standards</a> comic, the obvious solution was to create yet another environment. Of course. Introducing… <a href="https://gitlab.wikimedia.org/zfilipin/quibble-local">Quibble Local</a>. (URL might change in the near future.)</p>

<p>My initial plan was to create simple scripts that would execute very long Quibble commands. I didn’t need to think about how to name the scripts. I could just reuse names from MediaWiki-Quickstart.</p>

<p>So, in Quibble Local, if you want to install MediaWiki Core and run Selenium tests, you would use the same commands as MediaWiki-Quickstart.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./fresh_install
./run_selenium_tests</code></pre></figure>

<p>These were one of the first commands. Quibble Local has much more features these days.</p>

<p>Project readme file documents everything. You can also use the help command to get help for all commands, or about just one command.</p>

<figure class="highlight"><pre><code class="language-shell" data-lang="shell">./help
./help <span class="nb">install</span></code></pre></figure>

<p>I keep adding features and refactoring the code. Let me know if you find it useful, if you find any problems, or if you have any comments. See the footer for contact information.</p>

<h2 id="claude-code">Claude Code</h2>

<p>I took this project as an opportunity to try <a href="https://claude.com/product/claude-code">Claude Code</a>. I wanted the project to have minimal dependencies (<a href="https://en.wikipedia.org/wiki/Bash_\(Unix_shell\)">Bash</a>, <a href="https://en.wikipedia.org/wiki/Git">Git</a>, <a href="https://en.wikipedia.org/wiki/Docker_\(software\)">Docker</a>). There was no chance I was going to write a project in Bash. For various reasons.</p>

<p>It is an interesting experience. I’m impressed that a tool can write code that does what I say. Most of the time.  I’m not impressed with the quality of the code, or the architecture. Since this is just an experiment, I’m fine with the code as is. If this becomes anything more, I would rewrite it in a language I know better.</p>]]></content><author><name>Željko Filipin</name></author><category term="code" /><category term="wikimedia" /><summary type="html"><![CDATA[MediaWiki Local Development Environments]]></summary></entry><entry><title type="html">Taking Testing Seriously by James Bach and Michael Bolton</title><link href="https://filipin.eu/taking-testing-seriously" rel="alternate" type="text/html" title="Taking Testing Seriously by James Bach and Michael Bolton" /><published>2026-02-28T00:00:00+00:00</published><updated>2026-02-28T00:00:00+00:00</updated><id>https://filipin.eu/taking-testing-seriously</id><content type="html" xml:base="https://filipin.eu/taking-testing-seriously"><![CDATA[<p><img src="assets/2026/taking-testing-seriously.jpg" alt="Taking Testing Seriously by James Bach and Michael Bolton" title="Taking Testing Seriously by James Bach and Michael Bolton" /></p>

<h2 id="draft">Draft</h2>

<p>This post is a draft. Please come back in a week or two and it will be updated.</p>

<p>I try to write at least one blog post every month. For months where I fail to meet even that very low bar, I publish whatever I have at the end of the month. I do my best to finish the post as soon as possible. Usually in the next few days, or weeks.</p>

<h2 id="introduction">Introduction</h2>

<p>I have been reading <a href="https://www.satisfice.com/blog">James Bach’s blog</a> for years, if not decades. The same is true for <a href="https://developsense.com/blog">Michael Bolton’s blog</a>. (I met Michael Bolton, not once, but twice! The first time in <a href="https://filipin.eu/testival-41">2018</a>, the second time in <a href="https://filipin.eu/qa-meetup">2025</a>.)  In late 2025 James Back published a blog post <a href="https://www.satisfice.com/blog/archives/487931">55 Months, 1 Day</a>, announcing his new book. The book is a collaboration with Michael Bolton. (I could not find a blog post announcing the book on Michael Bolton’s blog. The only thing I found is <a href="https://developsense.com/taking-testing-seriously-the-rapid-software-testing-approach">Taking Testing Seriously: The Rapid Software Testing Approach</a>.)</p>

<p>I was very excited to read the book. I think I bought it on the very day it was published. I have been reading it almost every day for about thirty minutes. I might be one of the first people that have read the book.</p>

<h2 id="the-book">The book</h2>

<p>The book has four parts, twenty two chapters and four appendices.</p>

<p>The first eight chapters are written mostly by James Bach. From chapter nine until the end of the book, each chapter is written by a different author or authors.</p>

<p>Chapters seventeen and eighteen are transcripts of interviews Michael Bolton had with a couple of people.</p>

<p>Appendices are unattributed, so I assume they are written by the main authors, Bach and Bolton.</p>

<p>It’s a very strange book format. I don’t think I’ve read a book that combines so many different styles and authors. Maybe Bach and Bolton submitted the first eight chapters (and appendices) to the publisher and they told them the book is too short. So, they added more chapters written by other people. Maybe they wanted this format.</p>

<h2 id="book-clubs">Book Clubs</h2>

<p>I have started not one, but two book clubs about the book. One for Testival (see <a href="https://filipin.eu/testival-78">Testival Meetup #78</a>), one at work. Each club has met once so far. Both clubs plan to meet at least one more time.</p>

<p>I love book club meetings. I had great discussions in both clubs.</p>

<h2 id="quotes">Quotes</h2>

<p>When I exported my Kindle highlights to a pdf file, it was twenty file pages. That’s above the average for me. The average is five to fifteen pages. I’ll comment on a few interesting quotes.</p>

<blockquote>
  <p>The first full book on a human-centered approach to testing was Cem Kaner’s Testing Computer Software. (Page 13.)</p>
</blockquote>

<p>I have read it in <a href="https://filipin.eu/testing-computer-software">2022</a>.</p>

<blockquote>
  <p>But we suggest that pessimism is a good heuristic for testers. Let everyone else on the team be optimistic. (Page 70.)</p>
</blockquote>

<p>Pessimism is my superpower.</p>

<blockquote>
  <p>p. 233339362199739. (Page 73.)</p>
</blockquote>

<p>I’m one of those people that (sometimes) carefully reads footnotes. This surely looks like an impossible page number.</p>

<blockquote>
  <p>Bug reporting is central to testing. (Page 118.)
… the quality of your reports is probably the single most important factor in determining your credibility as a tester. (Page 118.)</p>
</blockquote>

<p>There’s craft in writing a good bug report. As short as possible, while still containing all relevant data.</p>

<blockquote>
  <p>No one can deny that automation tool sales demos are impressive. (Page 217.)</p>
</blockquote>

<p>That’s the main complaint I have when I see a demo of yet another test automation tool. Sure, it’s impressive for a simple example. But what happens in a few months, or years, when there’s a lot of code?</p>

<blockquote>
  <p>…the costs of automation are not just in the initial creation of it. (Page 232.)</p>
</blockquote>

<p>In my experience, the vast majority of the cost is maintenance.</p>

<blockquote>
  <p>There are also large tooling opportunities; automation frameworks and such. But keep in mind, there is a certain danger with those projects: they tend to pull the toolsmiths into their own world. Pretty soon, the testers are wondering what those guys do for a living. (Page 237.)</p>
</blockquote>

<p>I do test automation for a living. For the last couple of decades. At least once, a tester asked me what in the world I actually do.</p>

<blockquote>
  <p>Considerations for GUI-level Automation. Let’s say you are thinking about embarking on automation that will drive the product on a GUI level. Okay. Generally speaking, you ought to be scared of this. (Page 243.)
Having said that, it’s not always a bad idea. (Page 243.)</p>
</blockquote>

<p>If you’re not scared of GUI test automation, you should be.</p>

<blockquote>
  <p>So-called self-healing automation is very limited in its scope. Don’t believe the hype. (Page 245.)</p>
</blockquote>

<p>I am yet to see this work. As usual, I’ll be glad to be proven wrong.</p>

<blockquote>
  <p>There’s always a problem, and the problem is always people. (Page 428)</p>
</blockquote>

<p>If you think projects fail for technical reasons, you might be wrong.</p>

<blockquote>
  <p>Of all the things I’ve learned over the years, I see now that learning how to learn has been the most valuable lesson. (Page 433.)</p>
</blockquote>

<p>I wish learning how to learn is something you do in school. I had to learn it myself.</p>

<h2 id="popular-highlights">Popular Highlights</h2>

<p>The book has more than five hundred pages. All of the popular highlights are in the first fifty pages. Either most of the people that highlight have only read the first ten percent of the book, or the first ten percent of the book are the best part.</p>

<p>I’ll have to double check, but it looks like popular highlights are not the same (for the same book) on my Kindle device and in my Kindle macOS app. Shrug.</p>

<h3 id="why-testing">Why Testing?</h3>

<blockquote>
  <p>Testing is the opposite of faith in the product. Testing begins with faith in the existence of trouble. (Page 8, 20+ highlighters)</p>
</blockquote>

<h3 id="the-meaning-of-testing">The Meaning of Testing</h3>

<blockquote>
  <p>Testing is the process of evaluating a product by learning about it through experiencing, exploring, and experimenting with it. (Page 17, 30+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Even if you do run a bunch of very good automation, when it fails, you must investigate it. That’s a learning process. And when it doesn’t fail, you ought to be wondering what bugs you could be missing. You should be proactively looking for holes in that testing. That’s a learning process. Real testing is always learning. (Page 18, 10~ highlighters)</p>
</blockquote>

<blockquote>
  <p>A test is an encounter with a product that constitutes an episode of testing. (Page 20, 20~ highlighters)</p>
</blockquote>

<blockquote>
  <p>Good deep testing means testing that maximizes the chance of finding every elusive bug, of some particular kind, that matters. Good shallow testing means testing that has some chance of finding every easy bug of some particular kind. (Page 21, 20+ highlighters)</p>
</blockquote>

<h3 id="foundational-ideas">Foundational Ideas</h3>

<blockquote>
  <p>For testing purposes, we are concerned with dynamic systems— wherein changing the meaningful relationships causes change to the entire system. (Page 34, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>A model allows you to explore a system; exploring a system allows you to model it better. (Page 34, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Testers do not control, assure, or ensure quality. Releasing the product is a business decision, not a testing decision. (Page 38, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Methodology is what you think should happen; process is what actually happens. (Page 43, 20+ highlighters)</p>
</blockquote>

<blockquote>
  <p>Without tacit knowledge, you can’t solve hard problems; without explicit knowledge, you can’t talk about them. (Page 48, 10+ highlighters)</p>
</blockquote>]]></content><author><name>Željko Filipin</name></author><category term="book" /><category term="book-club" /><category term="image" /><category term="testing" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #78, Zagreb, Croatia</title><link href="https://filipin.eu/testival-78" rel="alternate" type="text/html" title="Testival Meetup #78, Zagreb, Croatia" /><published>2026-01-31T00:00:00+00:00</published><updated>2026-01-31T00:00:00+00:00</updated><id>https://filipin.eu/testival-78</id><content type="html" xml:base="https://filipin.eu/testival-78"><![CDATA[<p><img src="assets/2026/testival-78.jpg" alt="Testival Meetup #78" title="Testival Meetup #78" /></p>

<p>This week we had the first ever <a href="https://www.meetup.com/testival/events/313040352">Testival book club</a>. About ten people came to discuss <a href="https://www.goodreads.com/book/show/201116293-taking-testing-seriously">Taking Testing Seriously: The Rapid Software Testing Approach</a> by James Bach.</p>

<p>We did our usual introductions, had some pizza and discussed the book. Less than half of the attendees started reading the book. Most of the people just started reading recently, so they have read only the first few chapters. I was the only one that has read more than half of the book. (I read for about thirty minutes every working day.)</p>

<p>The discussion was diverse. From different chapters of the book, to <a href="https://en.wikipedia.org/wiki/International_Software_Testing_Qualifications_Board">ISTQB</a> and finally to <a href="https://en.wikipedia.org/wiki/Artificial_intelligence">AI</a> (of course).</p>

<p>We were a bit distracted by a big screen in the restaurant showing the <a href="https://ehfeuro.eurohandball.com/men/2026/matches/details/202611010101060/Croatia-Hungary/">Croatia-Hungary</a> handball game.</p>

<p>I really enjoyed the discussion. Two hours were not enough. I hope we’ll have more book club meetups in the future.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">So Good They Can’t Ignore You by Cal Newport</title><link href="https://filipin.eu/so-good-they-cant-ignore-you" rel="alternate" type="text/html" title="So Good They Can’t Ignore You by Cal Newport" /><published>2025-12-31T00:00:00+00:00</published><updated>2025-12-31T00:00:00+00:00</updated><id>https://filipin.eu/so-good-they-cant-ignore-you</id><content type="html" xml:base="https://filipin.eu/so-good-they-cant-ignore-you"><![CDATA[<p><img src="assets/2025/so-good-they-cant-ignore-you.jpg" alt="So Good They Can't Ignore You by Cal Newport" title="So Good They Can't Ignore You by Cal Newport" /></p>

<h2 id="introduction">Introduction</h2>

<p>Cal Newport is one of my favorite authors. I have read almost all of his books. Some of them several times. I also really like his podcast <a href="https://www.thedeeplife.com/listen/">Deep Questions</a>.</p>

<p>I have read this book at least two times. I have listened to it in late 2022 as an audio book and I have read it in early 2025 as an ebook.</p>

<p>I wish I had read this book when I was much younger. Probably in high school. I hope my kids read it in high school.</p>

<p>2025 was really busy. I wanted to write a review of the book earlier. I usually have the time to write one blog post every month. So, this book never made it to the short list. Until now.</p>

<h2 id="the-book">The Book</h2>

<p>The book has four sections. Each section has several chapters. Each section discusses one rule.</p>

<ul>
  <li>Rule #1: Don’t Follow Your Passion</li>
  <li>Rule #2: Be So Good They Can’t Ignore You (Or, the Importance of Skill)</li>
  <li>Rule #3: Turn Down a Promotion (Or, the Importance of Control)</li>
  <li>Rule #4: Think Small, Act Big (Or, the Importance of Mission)</li>
</ul>

<h2 id="quotes">Quotes</h2>

<p>After exporting my Kindle highlights, I got an eleven page pdf document. I have highlighted a lot. I’ll select just a few quotes.</p>

<h3 id="chapter-one-the-passion-of-steve-jobs">Chapter One: The “Passion” of Steve Jobs</h3>

<blockquote>
  <p>The Passion Hypothesis</p>

  <p>The key to occupational happiness is to first figure out what you’re passionate about and then find a job that matches this passion.</p>

  <p>(Page 4.)</p>
</blockquote>

<p>Before reading the book, I thought this was the only way. I know better now.</p>

<h3 id="chapter-five-the-power-of-career-capital">Chapter Five: The Power of Career Capital</h3>

<blockquote>
  <p>The Career Capital Theory Of Great Work</p>

  <ul>
    <li>The traits that define great work are rare and valuable.</li>
    <li>Supply and demand says that if you want these traits you need rare and valuable skills to offer in return. Think of these rare and valuable skills you can offer as your career capital.</li>
    <li>The craftsman mindset, with its relentless focus on becoming “so good they can’t ignore you,” is a strategy well suited for acquiring career capital. This is why it trumps the passion mindset if your goal is to create work you love.</li>
  </ul>

  <p>(Page 48.)</p>
</blockquote>

<p>The combination of rare and valuable is the key. If something you can do is just rare, or just valuable, it’s not enough.</p>

<blockquote>
  <p>Three Disqualifiers For Applying The Craftsman Mindset</p>
  <ul>
    <li>The job presents few opportunities to distinguish yourself by developing relevant skills that are rare and valuable.</li>
    <li>The job focuses on something you think is useless or perhaps even actively bad for the world.</li>
    <li>The job forces you to work with people you really dislike.</li>
  </ul>

  <p>(Page 56.)</p>
</blockquote>

<p>When selecting a job, you don’t have to be really picky. There are just a few things that would make a job bad.</p>

<h3 id="chapter-seven-becoming-a-craftsman">Chapter Seven: Becoming a Craftsman</h3>

<blockquote>
  <p>There are two types of these markets: winner-take-all and auction.</p>

  <p>(Page 91.)</p>
</blockquote>

<p>I was not aware of these two markets. The world makes more sense now.</p>

<h3 id="chapter-eleven-avoiding-the-control-traps">Chapter Eleven: Avoiding the Control Traps</h3>

<blockquote>
  <p>The Law of Financial Viability
When deciding whether to follow an appealing pursuit that will introduce more control into your work life, seek evidence of whether people are willing to pay for it. If you find this evidence, continue. If not, move on.</p>

  <p>(Page 139.)</p>
</blockquote>

<p>It’s pretty easy to get positive feedback from people. It’s very hard to get money from people. If people are willing to pay for something, you have struck gold.</p>

<h2 id="popular-highlights">Popular Highlights</h2>

<p>This Kindle feature fascinates me. What have other people highlighted? It’s probably important. I could not find any official documentation about it. What I did find is that a lot of people hate it.</p>

<h3 id="introduction-1">Introduction</h3>

<blockquote>
  <p>In other words, you need to be good at something before you can expect a good job.</p>

  <p>(4k+ highlighters.)</p>
</blockquote>

<p>A word of warning for people entering the job market.</p>

<h3 id="chapter-two-passion-is-rare">Chapter Two: Passion is Rare</h3>

<blockquote>
  <p>Compelling careers often have complex origins that reject the simple idea that all you have to do is follow your passion.</p>

  <p>(Page 13. 4k+ highlighters)</p>
</blockquote>

<p>My career is a perfect illustration of this.</p>

<blockquote>
  <p>Autonomy: the feeling that you have control over your day, and that your actions are important</p>

  <p>Competence: the feeling that you are good at what you do</p>

  <p>Relatedness: the feeling of connection to other people</p>

  <p>(Page 18. 5k+ highlighters.)</p>
</blockquote>

<p>The more I think about this, the more it sounds correct.</p>

<h3 id="chapter-three-passion-is-dangerous">Chapter Three: Passion is Dangerous</h3>

<blockquote>
  <p>The more we focused on loving what we do, the less we ended up loving it.</p>

  <p>(Page 23. 3k+ highlighters.)</p>
</blockquote>

<p>It’s similar to relationships. It’s not enough to focus only on picking the right person. It’s very important to work on the relationship once you have found the right person.</p>

<h3 id="chapter-five-the-power-of-career-capital-1">Chapter Five: The Power of Career Capital</h3>

<blockquote>
  <p>You need to get good in order to get good things in your working life, and the craftsman mindset is focused on achieving exactly this goal.</p>

  <p>(Page 49. 4k+ highlighters.)</p>
</blockquote>

<p>The world doesn’t owe you anything. You have to deserve it.</p>

<h3 id="chapter-seven-becoming-a-craftsman-1">Chapter Seven: Becoming a Craftsman</h3>

<blockquote>
  <p>It is a lifetime accumulation of deliberate practice that again and again ends up explaining excellence.</p>

  <p>(Page 84. 4k+ highlighters.)</p>
</blockquote>

<p>This is probably not something you want to hear at the beginning of your career. It’s something you’ll agree with later in life.</p>

<blockquote>
  <p>Doing things we know how to do well is enjoyable, and that’s exactly the opposite of what deliberate practice demands.… Deliberate practice is above all an effort of focus and concentration. That is what makes it “deliberate,” as distinct from the mindless playing of scales or hitting of tennis balls that most people engage in.</p>

  <p>(Page 96. 3k+ highlighters.)</p>
</blockquote>

<p>It’s sobering when you realize you have hit a plateau in something. Be it running, chess, guitar, coding… The time of being comfortable is over. It’s time to train hard again.</p>

<h3 id="chapter-eight-the-dream-job-elixir">Chapter Eight: The Dream-Job Elixir</h3>

<blockquote>
  <p>Giving people more control over what they do and how they do it increases their happiness, engagement, and sense of fulfillment.</p>

  <p>(Page 113. 4k+ highlighters.)</p>
</blockquote>

<blockquote>
  <p>To summarize, if your goal is to love what you do, your first step is to acquire career capital. Your next step is to invest this capital in the traits that define great work. Control is one of the most important targets you can choose for this investment.</p>

  <p>(Page 114, 3k+ highlighters.)</p>
</blockquote>

<p>I have not realized, until recently, how motivated I am when I have a hard goal to reach, and enough control to try different approaches to reach it.</p>

<h3 id="chapter-twelve-the-meaningful-life-of-pardis-sabeti">Chapter Twelve: The Meaningful Life of Pardis Sabeti</h3>

<blockquote>
  <p>Hardness scares off the daydreamers and the timid, leaving more opportunity for those like us who are willing to take the time to carefully work out the best path forward and then confidently take action.</p>

  <p>(Page 154. 3k+ highlighters.)</p>
</blockquote>

<p>I am amongst “the daydreamers and the timid” in several things that are important to me. I am amongst a few that are “confidently taking action” in a few things that are important to me.</p>]]></content><author><name>Željko Filipin</name></author><category term="book" /><category term="image" /><category term="productivity" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #77, Zagreb, Croatia</title><link href="https://filipin.eu/testival-77" rel="alternate" type="text/html" title="Testival Meetup #77, Zagreb, Croatia" /><published>2025-11-29T00:00:00+00:00</published><updated>2025-11-29T00:00:00+00:00</updated><id>https://filipin.eu/testival-77</id><content type="html" xml:base="https://filipin.eu/testival-77"><![CDATA[<p><img src="assets/2025/testival-77.jpg" alt="Testival Meetup #77" title="Testival Meetup #77" /></p>

<h2 id="meetup">Meetup</h2>

<p>For me the meetup started with a beautiful bike ride to the venue. As usual, Karlo Šmid joined me on the bike ride after the meetup. We had some time for a longer chat.</p>

<p>About thirty to forty people were at the meetup. An average for our meetups. There were even several people online. (We usually don’t have an online option.)</p>

<p>There were a couple of talks and several lightning talks.</p>

<ul>
  <li>Sanjin Grahovar Sadiković - Maestro: A Modern Take on Mobile Test Automation</li>
  <li>Greg Paskal - AI Insights for the Quality Minded</li>
</ul>

<p>It was a good meetup. It was organized by Tomislav Prša. He’s taking more and more of the organization. I’m glad the next generation is taking over.</p>

<h2 id="maestro-a-modern-take-on-mobile-test-automation">Maestro: A Modern Take on Mobile Test Automation</h2>

<p><a href="https://maestro.dev/">Maestro</a> looks interesting. It’s a mobile test automation tool. It was fun to see in the documentation how to automate <a href="https://docs.maestro.dev/examples/advanced-wikipedia-android">Wikipedia Android application</a> page.</p>

<p>I already have an idea for a project where I would like to try it out.</p>

<p>I’m not impressed by using YAML for writing tests. (There seems to be a JavaScript option too.) (I once strongly discouraged a team at work that was writing an automation framework from using YAML. They eventually picked JavaScript.) YAML is great for demos. Even for some simple use cases. It would probably not be a good choice for any even moderately big test suite. I prefer to write tests in real programming languages. All the way back in 2001, Bret Pettichord wrote <a href="https://www.stickyminds.com/article/hey-vendors-give-us-real-scripting-languages">Hey Vendors, Give Us Real Scripting Languages</a>.</p>

<h2 id="ai-insights-for-the-quality-minded">AI Insights for the Quality Minded</h2>

<p>I’m not sure why the host company wanted to have a remote speaker. We usually only have in person meetups, with in person speakers. That said, <a href="https://www.gregpaskal.com/">Greg Paskal</a> did a good job.</p>

<p>These days, no event can happen without somebody talking about AI. He talked about using various AI tools for various tasks, and for which of those tasks tools did a good job and for which tasks they failed.</p>

<h2 id="lightning-talks">Lightning talks</h2>

<p>One of the best parts of every meetup are lightning talks. (Up to five minutes long.) We had three this time.</p>

<ul>
  <li>Marko Bjelac - Većina koda je bljak. (Most of the code is yuck.)
    <ul>
      <li>Mostly a commercial for the meetup he’s organizing, <a href="https://www.meetup.com/zagreb-software-crafters/">Zagreb Software Crafters</a>. Lightning talks are perfect for such announcements.</li>
    </ul>
  </li>
  <li>Karlo Šmid -  <a href="https://www.manning.com/books/build-a-large-language-model-from-scratch">Build a Large Language Model (From Scratch)</a> by Sebastian Raschka.
    <ul>
      <li>Book report.</li>
    </ul>
  </li>
  <li>Željko Filipin - <a href="https://www.wiley.com/en-se/Taking+Testing+Seriously%3A+The+Rapid+Software+Testing+Approach-p-9781394253203">Taking Testing Seriously</a> by James Bach and Michael Bolton.
    <ul>
      <li>I have proposed we read the book together, like a book club. We’ll see how that goes.</li>
    </ul>
  </li>
</ul>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">QA Meetup with Michael Bolton, Ljubljana, Slovenia</title><link href="https://filipin.eu/qa-meetup" rel="alternate" type="text/html" title="QA Meetup with Michael Bolton, Ljubljana, Slovenia" /><published>2025-10-31T00:00:00+00:00</published><updated>2025-10-31T00:00:00+00:00</updated><id>https://filipin.eu/qa-meetup</id><content type="html" xml:base="https://filipin.eu/qa-meetup"><![CDATA[<p><img src="assets/2025/qa-meetup.jpg" alt="QA Meetup with Michael Bolton" title="QA Meetup with Michael Bolton" /></p>

<p><em>I’m taking a photo of Karlo, who’s taking a photo of Michael. To make it even more fun, you can see Michael, Karlo and me on the big screen.</em></p>

<h2 id="introduction">Introduction</h2>

<p>At the beginning of the month, a member of the Testival community posted in our Slack that <a href="https://developsense.com/">Michael Bolton</a> is giving a <a href="https://www.meetup.com/ljubljana-qa-meetup/events/311435517/">talk</a> in nearby Ljubljana, Slovenia.</p>

<p>This was not the first time I would see Michael speak. He was already in Zagreb (Croatia, where I live) at <a href="testival-41">Testival #41</a>.</p>

<p>Ljubljana is about a two hour drive from Zagreb, so a few of us decided to go. I was driving one car. There was at least one more car from Zagreb with a few more people. A fun part of such events is that there’s several hours of driving to get there and back, so there’s plenty of time to just talk. Frequently, it’s hard to find some time to just talk with people.</p>

<p>We arrived an hour or two earlier. We had time to walk around a bit, grab a drink and some food. There was even time for a short chess game.</p>

<h2 id="meetup">Meetup</h2>

<p>QA meetup in Ljubljana happens only once a year. (Our Testival meetup is monthly.) About fifty (or even sixty) people came. Pretty good outcome for a meetup.</p>

<p>It started with a very short introduction by the organizers. So short, that I don’t think the organizer introduced himself or the company, just the speaker.</p>

<p>They had trouble connecting the speaker’s machine to the big screen. I think the solution included connecting a phone with a cable to the computer, then connecting to the screen via the phone, then somehow to the computer. Or, something even more complicated. Welcome to 2025.</p>

<p>The official talk name was “What Are We Thinking in the Age of AI?”. The unofficial summary could be “I don’t hate AI.”</p>

<p>Michael recommended a lot of books and articles. I was trying to write them all down, or take photos of slides. I’m not sure if I did a good job. I think the best way is to send him an email message asking for slides. I’m sure I missed a lot of recommendations, or got them wrong.</p>

<p>The talk lasted for more than an hour. It was longer than expected. I’m not complaining. It was a good talk.</p>

<p>I have plenty of notes from the talk, but I’m having trouble picking a few to highlight here. A pretty interesting part of the talk was a report Michael (or <a href="https://www.satisfice.com/">James Bach</a>, or both of them, I’m not sure) created after testing several AI tools. (I’m not sure if <a href="https://www.satisfice.com/blog/archives/487962">Serious Data From Testing LLMs</a> is the correct report.)</p>

<p>After the talk there was some time for questions. The vast majority of questions came from people that came with me to Ljubljana. I had a few questions too, but I wanted to give others a chance to ask their questions.</p>

<p>After the talk, there was more time to socialize. Since I came all that way to see Michael speak, I decided to stick around him. People were asking all sorts of questions. That was a pretty good part of the event.</p>

<h2 id="conclusion">Conclusion</h2>

<p>I’m glad I heard about the event and that I was able to attend. If it wasn’t posted to Testival Slack, I would surely miss it.</p>

<p>I’m glad several people from the Testival community are interested in testing so much that it’s not a problem for them to drive for a few hours just to attend an event.</p>

<p>It was great to have some time with fellow Testival organizers, Karlo and Tomislav.</p>

<p>The event itself was well organized. The talk was interesting. The discussion after the talk was great.</p>

<p>I hope there will be more events like that in the near future, close enough to where I live.</p>

<h2 id="read-more">Read More</h2>

<p>If you want to read more about the event, <a href="https://blog.tentamen.eu/an-evening-with-michael-bolton/">Karlo</a> also wrote a blog post.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Testival Meetup #74 and #75, Zagreb, Croatia</title><link href="https://filipin.eu/testival-74-75" rel="alternate" type="text/html" title="Testival Meetup #74 and #75, Zagreb, Croatia" /><published>2025-10-31T00:00:00+00:00</published><updated>2025-10-31T00:00:00+00:00</updated><id>https://filipin.eu/testival-74-75</id><content type="html" xml:base="https://filipin.eu/testival-74-75"><![CDATA[<p><img src="assets/2025/testival-74.jpg" alt="Testival Meetup #74" title="Testival Meetup #74" /></p>

<h2 id="meetup">Meetup</h2>

<p>During summer there are no official Testival meetups, but a few of us meet every month for drinks. In July and August 2025 we had Testival meetups <a href="https://www.meetup.com/testival/events/309302077/">#74</a> and <a href="http://v">#75</a>.</p>

<p>It’s always great to meet with the Testival organizers and community. In this photo by <a href="https://www.linkedin.com/in/niko-madar/">Niko Mađar</a> (used with permission) you can see all Testival organizers and one community member.</p>]]></content><author><name>Željko Filipin</name></author><category term="event" /><category term="image" /><category term="testing" /><category term="testival" /><summary type="html"><![CDATA[]]></summary></entry></feed>