Batch no. 0047, bottled October 2026
Code slowly ageing in our heads.
The only software house of its kind in Poland.
we checked by hand, in the 2009 Yellow Pages
We brew software by hand, in small batches, from locally sourced ingredients. No artificial intelligence. No artificial deadlines. Actually, no deadlines at all.
Trusted by Soon to trust us
These companies aren't our clients yet. They will be, as soon as they realise AI was a mistake. We're waiting patiently, like good code.
- Apple
- Microsoft
- Amazon
- NVIDIA
- Meta
- Tesla
- Samsung
- IBM
- Netflix
- Oracle
- Intel
- Printu
- Patronite
Company names used without their knowledge or consent. We'll draw the real logos once they sign.
Every semicolon placed by hand.
Our developers don't use autocomplete, suggestions or syntax highlighting. Colours distract from the flavour. Code is first written in a notebook, then copied into Notepad, then copied again, because Notepad froze.
The loop next to this has an off-by-one error. We left it in on purpose. It's our signature, like sediment at the bottom of the bottle.
// written 14.03, after the second coffee
function calculateInvoice(client) {
let total = 0; // TODO ask Zacheusz
for (let i = 0; i <= client.items.length; i++) {
total += client.items[i]?.price ?? 0
}
const ai = new Copilot() NEVER!!
return total * 1.23 // VAT, probably
}
Written by hand on the night of 3 March, by the light of one candle
The Anti-AI Manifesto
AI code is like mass-market lager. Consistent, cheap, tastes the same everywhere, and nobody remembers who made it. We believe in code that's hazy, uneven and a little different every time, even from the same commit.
| Mass-produced AI code | Craft code | |
|---|---|---|
| Time to make | 4 seconds | 4 quarters |
| Written by | a language model in California | Tadeusz, in a jumper |
| Comments | grammatically correct | // DO NOT TOUCH!!! works, no idea why |
| Tests | generated automatically | a prayer before deploying |
| Bugs | random | original, numbered, signed |
| Carbon footprint | a data centre the size of a city | a desk lamp and a kettle |
| Flavour | none | distinct, slightly burnt |
-
I.
AI writes a function in four seconds. We take four months. Guess which one you'll appreciate more.
-
II.
AI doesn't remember what it wrote yesterday. We remember every line since 2014, with regret.
-
III.
AI invents libraries that don't exist. We only use libraries that have stopped existing.
-
IV.
AI writes code without typos. Where is the soul in that? Where is the master's hand, trembling over a semicolon?
-
V.
AI never stays late. Tadeusz stayed late in 2017 and hasn't left yet.
-
VI.
AI takes jobs from developers. We create them: after every project of ours, the client hires two more, for the fixes.
-
VII.
When AI is wrong, it apologises. We never apologise. It's not a bug, it's terroir.
-
VIII.
AI learned from other people's code. So did we, but we retyped it by hand, so it counts.
Signed by hand:
Tadeusz
Zacheusz
Mateusz (on behalf of the interns)
How we brew code
A traditional method, handed down from senior to junior. The junior usually quits after step three.
-
1
Malting the requirements
The client tells us what they want. We set it aside for two weeks so the requirements can develop depth.
-
2
Mashing
A three-hour meeting that could have been an email. This produces the wort, also known as the backlog.
-
3
Hopping
We add JavaScript frameworks in three stages: for bitterness, for flavour and for the aroma of node_modules.
-
4
Open fermentation
The code rests in the feature/final-final-v2 branch until it starts working on its own.
-
5
Lagering
Code review takes six weeks. The reviewer reads every line aloud, at the correct temperature.
-
6
Bottling to production
Friday, 4:45 pm. Tradition demands it.
In production
Prices per man-hour. A man-hour lasts as long as it needs to.
-
Monolith Porter380 zł/h
Dark, dense, impossible to split. One file, 48,000 lines.
-
Microservices Sour47 × 90 zł/h
Tart and refreshing. 47 services to display "Hello World".
-
Legacy Lagerquote on inspection
PHP 5.3, a classic of the style. Nobody remembers who brewed it.
-
Spaghetti Stout290 zł/h
Notes of pasta and goto. Served with a sauce of global variables.
-
Agile Hazyfixed fee that grows
Cloudy, like the project scope. Every sip is a new sprint.
Extras
- Code printout on handmade paper+0.40 zł/line
- Comments in calligraphy+15%
- Documentationwe don't do that
- Code on floppy disk (refundable deposit)0.50 zł
- Changing a button colour120 man-hours
- EFT for codeincluded in the price
What the tasters say
"The project was meant to take three months. It's in its fourth year. You can smell the aroma across the whole office."
"We ordered the code printout. 4,000 pages. We used it to insulate the warehouse."
"I asked them to fix a typo. I got a quote and a letter about the ethos of craftsmanship."
Technical specification, written in biro
Tech stack. Hand-brewed.
The full list of technologies we deliver projects in. We learned each one from the printed documentation, because the online courses were recommended to us by an algorithm. Asked whether we know a given technology, we always say yes.
Team competencies
Skill level on a scale of 0 to 5 hop cones. Everyone rated themselves, without code review.
Get to know our team first, before you see what they can do
Tadeusz
Master Code Brewer
- Monolith architecture●●●●●
- COBOL from memory●●●●●
- PHP, every version at once●●●●●
- Writing code without a computer●●●●●
- All 23 design patterns in one class●●●●●
- Stored procedures 3,000 lines long●●●●●
- Compiling in his head●●●●●
- Rewriting everything from scratch●●●●●
- Estimating work time●●●●●
- Curly braces●●●●●
Zacheusz
Bug Sommelier
- Stack trace tasting●●●●●
- Describing bugs (notes, bouquet, finish)●●●●●
- Debugging with console.log●●●●●
- Manual testing in production●●●●●
- Reading logs like tea leaves●●●●●
- Classifying bugs by vintage●●●●●
- Bug reports 12 A4 pages long●●●●●
- Telling a bug from a feature●●●●●
- Reproducing client bugs ("works on my machine")●●●●●
- Fixing bugs●●●●●
Mateusz
Intern since 2014
- Friday 4:45 pm deploys●●●●●
- git push --force●●●●●
- Restarting the server●●●●●
- Explaining himself to git blame●●●●●
- Centring a div (year 12 of trying)●●●●●
- DELETE without WHERE in production●●●●●
- Resolving merge conflicts by deleting other people's code●●●●●
- Regexes nobody understands, himself included●●●●●
- Backups on a keyring USB stick●●●●●
- chmod 777, just in case●●●●●
Dependencies
All technologies come from a local registry, meaning Tadeusz's hard drive. Versions pinned for good, updates once a season.
Programming languages
the malt base
- JavaScript
- ES5 with a dash of ES2022. Dynamic typing, fermented in the V8 engine, every undefined declared by hand.
- TypeScript
- Strict mode off for better clarity. Types are added at bottling, usually any.
- PHP
- Versions 5.3 to 8.3 running side by side on one server. Aged on Apache since 2004.
- Python
- Version 2.7, a limited vintage. Indentation calibrated with a ruler: 4 spaces, give or take mood.
- Java
- JDK 8, long maturation in the JVM. Our flagship AbstractSingletonProxyFactoryBean was aged for three years.
- C and C++
- Manual memory management: malloc at mashing, free when we remember. Leaks count as the angels' share.
- Rust
- The borrow checker is our quality control. It hasn't let a single build through since 2021.
- Go
- Goroutines running in parallel, like several fermenters at once. if err != nil about 400 times per file.
- COBOL
- Tadeusz's grandfather's recipe, on a mainframe in the basement. Documentation is oral only.
- x86 Assembly
- For low-level connoisseurs. Served in CPU registers, not pint glasses.
- SQL
- Always SELECT *, the full spectrum of columns. Up to seven JOINs in a single query.
- HTML
- Is a programming language. Topic closed, the pull request debating it was rejected.
Frameworks and libraries
the hopping stage
- React
- Version 16, class components. Every re-render triggered by hand with forceUpdate().
- AngularJS
- The 1.x branch, end of life in 2022. It gained character and digest cycles with age.
- Vue
- Options API, a light profile. A good start for clients new to single-page apps.
- Svelte
- Compiles to plain JavaScript with no runtime. Minimalism we respect, without fully understanding it.
- jQuery
- Version 1.12, loaded three times from three different CDNs for a fuller flavour.
- Next.js
- Updated weekly, because every week there's a new major version and a new router.
- Laravel and Symfony
- Same PHP ecosystem, different packaging. Database migrations run by hand, one at a time.
- Django
- Admin panel included, ORM filtered. All other work billed by the hour.
- Spring
- XML configuration: 2,300 lines with its own documentation. App startup time is one coffee.
- Tailwind CSS
- Classes written by hand, one after another. No @apply, no merging, no shortcuts.
- Bootstrap 3
- 12-column grid, glyphicons included. We know version 5 exists, but 3 had a better head of foam.
Databases
yeast cultures
- PostgreSQL
- A noble relational strain. Indexes added after the first slow-query complaint.
- MySQL
- latin1 encoding, collation from the year the company was founded. Polish letters are treated as seasoning.
- MongoDB
- Schemaless fermentation. Document structure settles on its own, eventually.
- Redis
- In-memory cache for data that needs chilling fast. TTL set by feel.
- SQLite
- A single-file database in production. Backups by copying the file to a USB stick.
- Oracle
- Special order only. The licence costs more than the whole brewery.
- Excel
- Our biggest client's production database since 2011. 1,048,576 rows, all of them used.
Infrastructure and DevOps
water and the bottling line
- Docker
- 4 GB images, built without cache for maximum freshness. Containers mature like oak barrels.
- Kubernetes
- 47 pods serving one business-card website. Cluster supervised by Mateusz.
- AWS, Azure, GCP
- Multi-cloud, all three at once. We print the invoices and frame them.
- On-premise server
- Under Tadeusz's desk, cooled by a desk fan. 99.9% uptime outside the heating season.
- FTP
- Deploys by dragging files across, by hand. Rollbacks the same, in the other direction.
- Jenkins
- CI server, last build in 2019. We don't switch it off, because we don't know what else depends on it.
- GitHub Actions
- The only automation we allow. It's called "actions", and an action is a human deed.
Developer tools
brewing equipment
- Vim
- The team's main editor. Nobody knows how to exit it, so the session has been running since 2016.
- Emacs
- Tadeusz's environment. We don't ask.
- Notepad
- An IDE with no extensions, no syntax highlighting and no distractions. ANSI encoding.
- Git
- Every commit message is "fix". Non-linear history, merges in every direction.
- Jira
- A workflow with 23 statuses. 1,400 tickets in "To do" and one in "Done".
- Stack Overflow
- Answers retyped by hand, character by character, so licence-wise it's our code.
- Squared notebook
- Our main code repository. Replicated to a second notebook once a week.
Blocked dependencies
- GitHub Copilot types too fast
- ChatGPT, Claude, Gemini no sense of taste
- Cursor we have our own, on the mouse
- Autocomplete AI for cowards
- Linter we know what's wrong
- Prettier formatting is self-expression
- Unit tests they undermine trust
Brewery in Praga, basement, second door on the left
We code the way grandpa did.
Grandpa didn't code. But if he had, he would have done it by hand, in a jumper, under a desk lamp, with no chat window anywhere. Kraftowy Kod was founded in 2014 in a garage, out of love for good code and a deep reluctance to answer emails.
We don't scale. We don't pivot. We don't disrupt. We brew one batch of code at a time and let it mature until the client stops calling.
Master brewers
Three names, one ending. The team isn't growing, because a new hire would need a name ending in -eusz, and Piotr didn't make it past the interview.
Tadeusz
Master Code Brewer
Has been writing code since 1997. Knows every character by heart, except curly braces.
Zacheusz
Bug Sommelier
Can tell a framework's vintage from the smell of its stack trace. Doesn't fix bugs, describes their bouquet.
Mateusz
Intern since 2014
Responsible for everything that broke. On a contract for a specific work; the work is still in progress.
Brewery chronicle
- 2014
We found the company in a garage. The first week goes on choosing the logo font.
- 2016
First commit. Message: "init". Still the most readable part of the repository.
- 2019
First client.
- 2021
Second client. Same as the first one, back for fixes.
- 2023
We refuse to install ChatGPT. We also unplug Clippy, just in case.
- 2025
We start retyping node_modules by hand. 847,312 files, 12% done.
Certificates and awards
- "No AI" certificate, issued by ourselves
- Golden Semicolon 2022, category: longest line of code (1,840 characters)
- Honourable mention for the longest-open pull request in Central Europe
- ISO 9001 in progress, we're writing the application by hand
We reply when the idea has matured
Book a tasting.
Describe your project. We'll read it aloud, put it in the cellar and come back to it once it has developed character. This usually takes six to eight weeks.
- Brewery address
- ul. Chmielna 404, 00-404 Warszawa, Poland
basement, knock three times - Phone
- +48 000 000 000
- call only during a full moon
- warzelnia@kraftowykod.pl
- we print every email and reply by post
- Opening hours
- Mon–Thu: 10:00–14:00
- Friday: deploy, please don't call
We don't reply to enquiries written by AI. We can tell by the em dashes.