Coding ≠ Engineering: Software Craftsmanship in the Age of AI
Presentation from February 2026, Wrocław. Explores the tension between AI-generated code and genuine software craftsmanship. While gradient descent and “next-token thinking” can lead to less-than-ideal code, with proper prompting and engineering mindset we can steer AI toward CRAFT instead of SLOP.
AI Powered Search: LLM all-the-things
Presentation from September 2025, Wrocław. Demonstrates transforming user queries into AI-powered search through semantic understanding and metadata extraction. The approach: extract semantic meaning, expand context, and apply metadata filtering. Also addresses the testing challenges of LLM-based systems where prompt changes require reverification.
Coding with Claude Code
Presentation from September 2025, Wrocław. Practical guide to using Claude Code as a development tool, emphasizing that “context is the King.” Covers using CLAUDE.md files as knowledge bases, providing strong context through examples, referencing existing implementations as templates, and using MCP for searching unknown information. Key takeaway: “Be the driver, guide the pattern matcher.”
What is a resource? GQL & Aggregated data
Presentation from June 2025, Wrocław. Explores how GraphQL schema design struggles when requirements expand to include aggregated data. Argues that aggregated data should be treated as a first-class resource rather than a property attached to existing types, using Cloudflare’s GraphQL API as a real-world example.
Preconditions - Service Objects design
How do you design your code so that you can easily expose to the frontend which business operations can be invoked. Based on Granite framework capabilities.
Building with TRMNL, Cloudflare & AI
Presentation. A no-cost exploration of emerging technologies through TRMNL, a customizable e-ink display (800x480, black and white) powered by Cloudflare Workers. Covers building server-side driven plugins, the 15-minute refresh loop, and experimenting with AI tools like Claude and Cursor.
Kubernetes Health-Checks Traps for Puma-Based Apps
Presentation from 2022. Addresses common pitfalls in configuring Kubernetes health checks for Rails/Puma applications. Advocates for differentiated liveness and readiness probes — using shallow checks with timeouts based on queue size, request time, and thread count, and keeping deep checks separate for uptime monitoring and SLA tracking.
Who’s Gonna Test the Tests Themselves? About Mutation Testing
Presentation. Explains mutation testing — deliberately introducing bugs into code to verify test effectiveness. Covers how the system parses ASTs and applies 50+ transformation operators, with performance data from RubyEventStore projects. The project maintains 99% mutation coverage, with practical insights on corner cases where mutation testing struggles.
Older talks
How to earn $100 000 on your blog?
Presentation from 2017. How Arkency turned blogging into a business next to consulting. Covers finding an audience, researching its pain points, and selling books through blog posts, mailings and landing pages.
Developer’s police
Presentation from DRUG, around 2016. Booking seats and placing an order form one business transaction but two technical ones. Walks through what happens when they get out of sync, and how asynchronous handlers detect problems and alert developers.
Worst API ever
Presentation from 2015. A short story about integrating with an API from Hell, where delivering a PDF as a physical letter ended with sending a ZIP over SFTP from a single IP address.
A tale of one method in one legacy project
Presentation from DRUG #58, around 2014. Reads one cryptic method step by step to find out what it actually does, only to discover that it was not used in production.
Devise & User
Presentation from June 2014. Add Devise to your User class, what can possibly go wrong? Looks at the coupling this creates in models and tests, and at keeping authentication separate from the User.
Value objects and Aggregates in Active Record
Presentation from 2014. Different than usual examples of value objects, plus Active Record based aggregates that can be tested without saving to the database.
Developers Oriented Project Management
Presentation from 4Developers 2014. Four techniques for running projects with developers in mind: stories of size 1, leaving tasks unassigned, taking the first task, and dealing with big stories.
M2R - Call for devs
Presentation from July 2012. Lightning talk for DRUG about the Mongrel2 web server and M2R, its Ruby handler, and the plans for making realtime notifications in Rails simpler.
WAT
Presentation from 2012. A collection of surprising behaviors in Ruby, JavaScript and their tooling, from JSON dates to ZeroMQ contexts after fork.
Web 3.0
Presentation from around April 2012. There is no such thing, but the realtime web is already here. Explores WebSockets and Server-Sent Events in Ruby, with demos built on EventMachine and Celluloid::IO.
Works on my body (or/and soul)
Presentation from around 2012. Thoughts on working hours, food, sleep and motivation, and on getting started when a task feels too long or too unfamiliar.
Testing communication with external systems using EventMachine or Ruby on Rails
Presentation from November 2011. Compares ways of testing integrations with external services, from mocking web requests to test actors that play the external system in a separate process.
Vagrant & LittleChef
Presentation. Keeping the dependencies of every project off your own machine with Vagrant and LittleChef, and surviving broken hardware along the way.
schroot
Presentation. Using schroot for lightweight chroot-based containers, covering installation, sessions, mounts, users and networking.
Manage My Money
Presentation from April 2009, in Polish, with Jarosław Plebański. My MSc project: an open source web application for personal accounting.