Sign in

Kuba

@kuba.zalas.pl
346 followers 192 following 268 posts

Software Engineer zalas.pl

PostsRepliesMedia
Reposted by Kuba
Jason Gorman @jasongorman.bsky.social · 03/10/2026
Pooled together the best available research and added it to a new section "Code Maintainability & LLM Performance" Don't listen to the folks telling you it doesn't matter if AI-generated code is maintainable by humans. The data says it really does. codemanship.wordpress.com/2026/08/12/a...
codemanship.wordpress.com
AI Software Development – What Does The Data Say?
I’m currently pulling together a bunch of sources – that are mostly recent – on the topic of LLMs and their use in software development. Some are peer-reviewed studies. Some are i…
2135
Kuba @kuba.zalas.pl · 04/10/2026
It's like the whole industry is trying to reinvent itself, questioning everything it once relied on to keep at least some sanity in software development. Have LLMs really changed anything in this regard? 🤔
020
Kuba @kuba.zalas.pl · 01/10/2026
Wait.. what?!
static.klipy.com
Ross Geller In Shock
ALT: Ross Geller In Shock
000
Reposted by Kuba
Grady Booch @booch.com · 01/10/2026
In the face of generative AI coding agents, the role of human-led architecture becomes even more important in the crafting of software-intensive systems.
54510
Kuba @kuba.zalas.pl · 15/07/2026
Is the harness driving the developer or is it the other way around? 🤔
000
Kuba @kuba.zalas.pl · 13/07/2026
In search for a new terminal that doesn't get into my way I found Kitty and I think it's going to stay. Integrates well with tmux and fish. That's all I ask for.
000
Kuba @kuba.zalas.pl · 03/07/2026
When I started my first gig in London in 2011, the plan was to give it 2-3 years. Not as long as you but still here...
010
Kuba @kuba.zalas.pl · 03/07/2026
Sad if true.
010
Reposted by Kuba
Kent Beck @kentbeck.com · 17/06/2026
Genies give you a degraded facsimile of the mediocre code they trained on. Two axes: features (works or it doesn't) and futures (optionality). The genie drifts down-and-to-the-left, plausible "success" on broken code. Awareness is step one: newsletter.kentbeck.com/p/genie-tarpit
13010
Reposted by Kuba
J. B. Rainsberger @jbrains.ca · 10/06/2026
Reduce the pain and suffering associated with waiting for other people to get out of your way. You have a task to finish!! blog.jbrains.ca/permalink/po...
blog.jbrains.ca
Remaining Calm, Even When Blocked By Others — The jbrains Blog
Getting Things Done calls them open loops: unresolved tasks where you're blocked because you are waiting for someone else. Open Loops are a common source of significant, painful stress and worry. Fort...
001
Kuba @kuba.zalas.pl · 09/06/2026
Ugh... you say this, my cheeky clanker, but you're gonna do it again, aren't you?
The user is calling me out on the "Digest" and "Backlog" examples I cited from Evans. I need to be honest here. I cannot verify those specific examples from Chapter 9. The web search results support the general thesis of the chapter (making implicit concepts explicit) but don't mention "Digest" or "Backlog" as named examples. I was wrong to present them as concrete Evans examples without being able to verify them.

Yes, I did. I presented "Digest" and "Backlog" as specific Evans examples based on pattern-matching from my training data, but I couldn't verify them against the source. That was wrong. I should have said "I recall examples in this area but can't confirm the details" rather than presenting unverifiable specifics as fact.

The general thesis — Chapter 9 is about making implicit concepts explicit — is correct. The specific examples I named were not. I'll avoid citing unverifiable specifics going forward.
340
Kuba @kuba.zalas.pl · 09/06/2026
This is why I'm experimenting with lode coding. I'm not ready for cognitive surrender. fjzeit.github.io/coding/lode-...
fjzeit.github.io
Getting Started with Lode Coding
Note: This article was updated on 27 Jan 2026 to cover a stepwise improvement in the approach. The lode-overview.md has been removed and replaced with a system prompt which you can either append on th...
000
Kuba @kuba.zalas.pl · 09/06/2026
"[..] Delegation produces surrender. Cooperation produces what he calls mutual amplification: a loop where your prompts sharpen the model’s output, which sharpens your next prompts, which sharpens your model of the problem." addyosmani.com/blog/cogniti...
addyosmani.com
Cognitive Surrender
Cognitive offloading is delegating to the AI and still owning the answer. Cognitive surrender is when the AI's output quietly becomes your output and there i...
000
Reposted by Kuba
Jason Gorman @jasongorman.bsky.social · 08/06/2026
Most devs, when they say "I refactored my code" just mean "I rewrote my code". Join me for quite probably my final Refactoring workshop on Sat June 20th and become one of the 1% who know what the word actually means in practice. £99 + VAT. Bargain! www.tickettailor.com/events/codem...
tickettailor.com
Register – Essential Code Craft - Refactoring – Zoom
Essential Code Craft - Refactoring – Zoom, Multiple dates and times - Tues June 16th & Sat June 20th £99 + UK VAT Refactoring is a foundational skill for software developer...
0127
Reposted by Kuba
Jason Gorman @jasongorman.bsky.social · 05/06/2026
So it's out there that - with great sadness - I'm winding down my training business & looking for a new challenge But it's not quite over yet. I have 3 *final* workshops for developers (and, in one case, non-devs, too) coming up - all on special offer 2day codemanship.wordpress.com/2026/06/04/a...
codemanship.wordpress.com
A Car Crash In Slow Motion
Since I’m among friends, I hope I can be open with you. I started Codemanship 17 years ago in my late 30s, as a response to being asked by a recruiter for the gazillionth time “Why are …
143517
Kuba @kuba.zalas.pl · 04/06/2026
😂 You're joking, but I visited Halfords yesterday and saw a big poster saying they're hiring. I thought: is this me in a year? 😂
010
Kuba @kuba.zalas.pl · 04/06/2026
Remarkable journey. I'm curious to hear what's coming next!
110
Reposted by Kuba
Jason Gorman @jasongorman.bsky.social · 04/06/2026
Well, here we are finally - the sound of one door closing and the end of a 17-year journey. codemanship.wordpress.com/2026/06/04/a...
codemanship.wordpress.com
A Car Crash In Slow Motion
Since I’m among friends, I hope I can be open with you. I started Codemanship 17 years ago in my late 30s, as a response to being asked by a recruiter for the gazillionth time “Why are …
205218
Kuba @kuba.zalas.pl · 24/05/2026
I'm not familiar with GSD. Having a look now and seems to be relying on custom build tools. I'm not interested in that. Lode is a single system prompt and then you take it from there.
010
Kuba @kuba.zalas.pl · 20/05/2026
I've been using this approach for the past few weeks and it's been brilliant so far. I'm grateful (and relieved) to have found it while still trying to figure out my own strategy. fjzeit.github.io/coding/lode-...
fjzeit.github.io
Getting Started with Lode Coding
Note: This article was updated on 27 Jan 2026 to cover a stepwise improvement in the approach. The lode-overview.md has been removed and replaced with a system prompt which you can either append on th...
121
Kuba @kuba.zalas.pl · 13/05/2026
Let me know how it goes! I'm tired after giving both bitbucket and gitlab a fair chance.
000
Kuba @kuba.zalas.pl · 13/05/2026
I'm sorry i doubted you GitHub and tried to jump to bitbucket first and gitlab later. What was I thinking? They're unstable half baked toys compared to you.
100
Kuba @kuba.zalas.pl · 23/04/2026
When I start test-driving a project my actions seem to be chaotic at first. An order soon emerges and my actions start being more focused and intentional. When I start a project without writing tests my actions seem to be focused and intentional at first. A chaos soon unfolds bringing regret. #tdd
010
Reposted by Kuba
Loïc Faugeron @loicfaugeron.bsky.social · 25/03/2026
Turn your PHP app into a standalone binary. No PHP interpreter, Composer, etc needed on the target machines! It's actually surprisingly quite simple: 1. Box: makes a phar 2. concat with micro.sfx from static-php-cli Done! Read more about it here: gnugat.github.io/2026/03/25/t... #PHP
Screenshot of the build script. The code snippet can be found in the article.
253
Kuba @kuba.zalas.pl · 20/03/2026
Me and my wife must be laggards, as to this day have never owned this microwave thing you're writing about.
110
Kuba @kuba.zalas.pl · 14/03/2026
It's nice that Nero app lets me pretty print the error message 😂
JSON formatted response shown to the end user.
010
Kuba @kuba.zalas.pl · 26/02/2026
I've let geepaw know images are missing on his blog.
010
Kuba @kuba.zalas.pl · 25/02/2026
Is it like the Making App? www.geepawhill.org/2024/10/01/b...
geepawhill.org
Basic Concepts of the “Making App” – GeePawHill.org
200
Kuba @kuba.zalas.pl · 25/02/2026
Oh, they are versioned indeed!
100
Kuba @kuba.zalas.pl · 25/02/2026
I didn't use to clearly show hexagonal architecture in my folder structure, but reading the book by Alistair & Juan convinced me to start doing this.
"The folder structure is not covered by the pattern, nor is it the same in all languages. Some languages (Java), require interface definitions. Some (Python, Ruby) don't. And some, such as Smalltalk, don't even have the concept of files!

That said, we’ve observed that folder structures that don't match the intentions of the pattern end up causing damage. You can create greater clarity by implementing them in a certain form."

Excerpt From
hexarch v1.1b 20250420-1012 paper+epub
alistair cockburn
This material may be protected by copyright.Various folder structures shown in the hexagonal architecture book.
010
Kuba @kuba.zalas.pl · 25/02/2026
I'm still not decided on the name "external". "Adapter" would be too generic but it would match ports better.
100
Kuba @kuba.zalas.pl · 25/02/2026
Yes, each adapter being in its own gradle project.
100
Kuba @kuba.zalas.pl · 25/02/2026
A good start overall. I'll continue with the approach and see where it takes me.
Folder structure:


- `app` - the application
    - `domain` - domain model
        - `build.gradle.kts`
    - `ports` - application ports
        - `inbound` - primary/driving ports – provided interfaces
            - `build.gradle.kts`
        - `outbound` - secondary/driven ports – required interfaces
            - `build.gradle.kts`
    - `service` - application services, including use cases
        - `build.gradle.kts`
- `external` - adapters for external systems
    - `inbound` - primary/driving adapters
    - `outbound` - secondary/driven adapters
000
Kuba @kuba.zalas.pl · 25/02/2026
When I finally decided to agree to suggested changes, it turned out Junie did exactly what I expected it to do, rather than what it it would do, lol.
100
Kuba @kuba.zalas.pl · 25/02/2026
Junie tough, didn't communicate what it was planning to do accurately. For example, it told me it's going to remove most of my settings.gradle.kts. It mislead me into thinking it wasn't listening to instructions.
Update on task progress
The project is a Gradle multi-project build. I've analyzed the README.md and settings.gradle.kts files. The README.md specifies a project module structure based on Ports and Adapters architecture:
•
app
◦
domain
◦
ports
▪
inbound
▪
outbound
◦
service
•
external
◦
inbound
◦
outbound
Each of these (except possibly placeholders) should have a build.gradle.kts using buildlogic.kotlin-library-conventions. settings.gradle.kts has an includeAllFrom function that automatically includes subprojects containing build.gradle.kts.
I need to create the reporting module with this structure.
210
Kuba @kuba.zalas.pl · 25/02/2026
I got excellent results with AI Assistant. It decomposed the steps exactly the way I expected it to.
What I’m going to do
To create a new project module called reporting following this repo’s conventions, we need to:
Add includeAllFrom("reporting") to settings.gradle.kts (so Gradle auto-includes all subprojects under reporting/**/build.gradle.kts).
Create the standard Ports & Adapters folder structure under reporting/.
Add build.gradle.kts files for the subprojects (using the provided template).
Add a reporting/README.md documenting the module’s purpose.
110
Kuba @kuba.zalas.pl · 25/02/2026
I also taught it how to define general purpose libraries.
# Library modules

The `lib` folder is where general-purpose library modules live that are not project-specific,
or need to be shared between projects.

## Creating a new library

The steps below are based on an example library called `example`.

1. Create a `lib` subfolder for the new module named after the library name.
   Use lowercase letters and single words when possible.
   Otherwise, concatenate multi-word names and keep them lowercase.

2. Create a `build.gradle.kts` file in the module folder.

    ```kotlin
    plugins {
        id("buildlogic.kotlin-library-conventions") 
    }
    ```

3. The new library will be included from the root-level `settings.gradle.kts` automatically.
100
Kuba @kuba.zalas.pl · 25/02/2026
^^ this is me teaching it how to define a project module by documenting I expect a hexagonal architecture layout with a distinct domain model inside the application.
100
Kuba @kuba.zalas.pl · 25/02/2026
## Project structure

The project is structured as a Gradle multi-project build with each project module being made of several
own Gradle subprojects.
Additional libraries may be created as subprojects under the `lib` project.

### Project modules

Each project module should have the following structure to communicate the use of the Ports and Adapters
architecture as well as a commitment to a distinct Domain Model.

- `app` - the application
    - `domain` - domain model
        - `build.gradle.kts`
    - `ports` - application ports
        - `inbound` - primary/driving ports – provided interfaces
            - `build.gradle.kts`
        - `outbound` - secondary/driven ports – required interfaces
            - `build.gradle.kts`
    - `service` - application services, including use cases
        - `build.gradle.kts`
- `external` - adapters for external systems
    - `inbound` - primary/driving adapters
    - `outbound` - secondary/driven adapters

`build.gradle.kts` indicate subprojects that will be included automatically
when a call to `includeAllFrom` function is added to the root-level `settings.gradle.kts` next to the existing calls.

The following `build.gradle.kts` template should be used as a starting point for each subproject:

```kotlin
plugins {
    id("buildlogic.kotlin-library-conventions")
}
```

In addition, the `app:service` module should depend on `app:domain`, `app:ports:inbound`, `app:ports:outbound` modules.

`inbound` and `outbound` folders in `ports` and `external` folders are placeholders for future port and adapter modules.
100
Kuba @kuba.zalas.pl · 25/02/2026
I use tools available in @intellijidea.com, so I started by giving AI Assistant hints where to look for documentation by defining my first rule in .aiassistant/rules/README.md.
# Documentation guidelines

README.md files document the purpose of significant folders and modules.

## Libraries

For any task in this project related to working with a library,
first read the lib/README.md as well as any other README.md files found in related libraries,
summarise constraints, then proceed.

## Project modules

For any task in this project related to working with subprojects/modules,
first read the top level README.md as well as any other README.md files found in related subprojects/modules,
summarise constraints, then proceed.
100
Kuba @kuba.zalas.pl · 25/02/2026
Hopefully, I'll end up with good documentation and a set of micro-prompts to do certain tasks on the project. Once I have micro-prompts, perhaps I'll be able to start using macro-prompts for slightly bigger tasks.
100
Kuba @kuba.zalas.pl · 25/02/2026
I guess it's like documenting the project, except I get instant feedback if my writing is well received and understood.
100
Kuba @kuba.zalas.pl · 25/02/2026
I'm experimenting with AI Assistants to get them to do projects my way. My approach is document how I'd like things done while I do them. Then I revert the change and let the assistant do it.
210
Kuba @kuba.zalas.pl · 05/02/2026
Role-playing - objects are more players of their roles than instances of their types. -- Sandi Metz #oop
010
Kuba @kuba.zalas.pl · 28/01/2026
"You can't build the right product if you can't build the product right. If you can build the thing right, you can live long enough to find the right thing." ronjeffries.com/xprog/articl...
ronjeffries.com
Build it right to build the right thing
This is RonJeffries.com, the combination of new articles, XProgramming, SameElephant, and perhaps even some new items never before contemplated. <br/>Copyright © 1998-forever Ronald E Jeffries
010
Kuba @kuba.zalas.pl · 16/01/2026
As always, it's great to listen to @jbrains.ca. Are integrated tests a scam? youtu.be/j0NjFsb-at8
youtu.be
Are Integrated Tests a Scam? TDD, Architecture, Fast Feedback – J. B. Rainsberger | The Marco Show
YouTube video by IntelliJ IDEA, a JetBrains IDE
010
Kuba @kuba.zalas.pl · 08/01/2026
Makes sense to me since what defines the test double is its runtime behavior rather than how the mocking framework or developer labels it.
000
Kuba @kuba.zalas.pl · 08/01/2026
To stub - I'm using this mock to stub these values. To spy - I'm using this mock to spy on that important interaction. To stub - I generated this mock from this contact to stub these interactions. To design - I'm using this mock helping me to design interactions with this collaborator.
110
Kuba @kuba.zalas.pl · 08/01/2026
She offers advice on what to do instead: make peace with everyone calling the test doubles mocks, but add a verb for how it is used.
100
Kuba @kuba.zalas.pl · 08/01/2026
Mocks... Mocks everywhere... In this video Emily made me feel it's ok not to fight this particular instance of semantic diffusion. youtu.be/RvKPOjlQKyM?...
youtu.be
We Need to Stop Calling Everything a Mock!
YouTube video by Modern Software Engineering
100