2026  9

September  1

A single server and a database is enough here

September 1, 2026 · 1 min · Murat Useinov

August  1

Reading PHP 8.6 RFCs as constraints

August 17, 2026 · 2 min · Murat Useinov

July  1

Testing PostgreSQL 19 beta without guessing

July 8, 2026 · 2 min · Murat Useinov

June  1

When version numbers stop talking

June 11, 2026 · 2 min · Murat Useinov

May  1

A worker is not a controller

May 25, 2026 · 2 min · Murat Useinov

April  1

MySQL 9.7 LTS is an operational choice

April 10, 2026 · 2 min · Murat Useinov

March  1

An LLM call is just IO

March 11, 2026 · 2 min · Murat Useinov

February  1

Dependency upgrades without a big bang

February 27, 2026 · 2 min · Murat Useinov

January  1

PHP 8.5 one month later

January 19, 2026 · 2 min · Murat Useinov

2025  12

December  1

From Kohana to PHP 8.5

December 11, 2025 · 2 min · Murat Useinov

November  1

The November upgrade train

November 21, 2025 · 2 min · Murat Useinov

October  1

Coding agents meet legacy PHP

October 10, 2025 · 2 min · Murat Useinov

September  1

PostgreSQL 18, the upgrade notes

September 26, 2025 · 2 min · Murat Useinov

August  1

vendor/autoload.php is not free

August 20, 2025 · 2 min · Murat Useinov

July  1

A weekend with PostgreSQL 18 beta

July 2, 2025 · 2 min · Murat Useinov

June  1

One TTL does not fit the whole page

June 16, 2025 · 2 min · Murat Useinov

May  1

Symfony 7.3 and the code I get to delete

May 30, 2025 · 2 min · Murat Useinov

April  1

Native lazy objects, the ORM view

April 9, 2025 · 2 min · Murat Useinov

March  1

Observability has a budget

March 10, 2025 · 2 min · Murat Useinov

February  1

Laravel 12 is a boring release

February 26, 2025 · 2 min · Murat Useinov

January  1

PHP 8.4 after the hype

January 15, 2025 · 2 min · Murat Useinov

2024  12

December  1

The fastest request never reaches PHP

December 3, 2024 · 2 min · Murat Useinov

November  1

Lazy objects move into the engine

November 23, 2024 · 2 min · Murat Useinov

October  1

Property hooks, before the hype settles

October 14, 2024 · 2 min · Murat Useinov

September  1

PostgreSQL 17 and why VACUUM is an API concern

September 27, 2024 · 2 min · Murat Useinov

August  1

Pick the library with a profiler, not a chart

August 7, 2024 · 2 min · Murat Useinov

July  1

WebSockets change your operational model

July 3, 2024 · 2 min · Murat Useinov

June  1

A faster sprintf will not fix your p99

June 18, 2024 · 2 min · Murat Useinov

May  1

Symfony 7.1 and the value of boring releases

May 31, 2024 · 2 min · Murat Useinov

April  1

MySQL 8.4 gives us a place to stand

April 30, 2024 · 2 min · Murat Useinov

March  1

Laravel 11 removes files, not decisions

March 25, 2024 · 2 min · Murat Useinov

February  1

One trace through HTTP, queue and database

February 8, 2024 · 2 min · Murat Useinov

January  1

The shrinking Laravel skeleton

January 6, 2024 · 2 min · Murat Useinov

2023  12

December  1

AI assistants do not know your production

December 23, 2023 · 2 min · Murat Useinov

November  1

PHP 8.3 and Symfony 7 in one month

November 30, 2023 · 2 min · Murat Useinov

October  1

FrankenPHP: the server absorbs PHP

October 27, 2023 · 2 min · Murat Useinov

September  1

PostgreSQL 16, read through one workload

September 16, 2023 · 2 min · Murat Useinov

August  1

UUID primary keys and the B-tree bill

August 3, 2023 · 2 min · Murat Useinov

July  1

MySQL now has two speeds

July 20, 2023 · 2 min · Murat Useinov

June  1

Outbox: events that do not lie

June 7, 2023 · 2 min · Murat Useinov

May  1

Scheduler component, or cron as messages

May 31, 2023 · 2 min · Murat Useinov

April  1

Persistent PHP workers need discipline

April 3, 2023 · 2 min · Murat Useinov

March  1

DI attributes: config moves into the class

March 27, 2023 · 2 min · Murat Useinov

February  1

Laravel 10 is a quiet major

February 16, 2023 · 2 min · Murat Useinov

January  1

Before Laravel 10: raise the baseline first

January 7, 2023 · 2 min · Murat Useinov

2022  12

December  1

PHP 8.2: stricter by default

December 16, 2022 · 2 min · Murat Useinov

November  1

Readonly classes for value objects

November 8, 2022 · 2 min · Murat Useinov

October  1

MERGE arrives in PostgreSQL 15

October 27, 2022 · 2 min · Murat Useinov

September  1

Dynamic properties are leaving

September 3, 2022 · 2 min · Murat Useinov

August  1

Fast query, slow endpoint

August 23, 2022 · 2 min · Murat Useinov

July  1

JSONB or a normal table

July 16, 2022 · 2 min · Murat Useinov

June  1

Argument resolvers and the HTTP border

June 13, 2022 · 2 min · Murat Useinov

May  1

Redis 7 functions, same old rule

May 5, 2022 · 2 min · Murat Useinov

April  1

Retry is a strategy, not a loop

April 27, 2022 · 2 min · Murat Useinov

March  1

Backfill in batches, not in one UPDATE

March 17, 2022 · 2 min · Murat Useinov

February  1

Laravel 9 and the boring major

February 25, 2022 · 2 min · Murat Useinov

January  1

Order status is an enum now

January 8, 2022 · 2 min · Murat Useinov

2021  12

December  1

Symfony 6.0 is boring, take the compliment

December 9, 2021 · 2 min · Murat Useinov

November  1

PHP 8.1: enums, readonly and a word about Fibers

November 26, 2021 · 2 min · Murat Useinov

October  1

Generics we already have

October 9, 2021 · 2 min · Murat Useinov

September  1

PostgreSQL 14 and the price of a connection

September 30, 2021 · 2 min · Murat Useinov

August  1

Redis Streams is a log, not a better queue

August 20, 2021 · 2 min · Murat Useinov

July  1

Nobody closes your database connection anymore

July 20, 2021 · 2 min · Murat Useinov

June  1

Attributes in Symfony 5.3

June 4, 2021 · 2 min · Murat Useinov

May  1

Octane and state that outlives the request

May 5, 2021 · 2 min · Murat Useinov

April  1

Symfony Runtime: front controller as a callable

April 16, 2021 · 2 min · Murat Useinov

March  1

The outbox table

March 23, 2021 · 2 min · Murat Useinov

February  1

TTL is not an invalidation strategy

February 24, 2021 · 2 min · Murat Useinov

January  1

PHP 8 in production: dependencies first

January 8, 2021 · 2 min · Murat Useinov

2020  12

December  1

Attributes: metadata moves in with the code

December 18, 2020 · 2 min · Murat Useinov

November  1

PHP 8.0: ignore the JIT, take the rest

November 27, 2020 · 2 min · Murat Useinov

October  1

Stop building running totals in PHP

October 6, 2020 · 2 min · Murat Useinov

September  1

Laravel 8: the interesting parts are not on the marketing page

September 11, 2020 · 2 min · Murat Useinov

August  1

Average response time explains nothing

August 4, 2020 · 2 min · Murat Useinov

July  1

PHP 8 will retire some of our workarounds

July 3, 2020 · 2 min · Murat Useinov

June  1

Types are for reading, not for the compiler

June 27, 2020 · 2 min · Murat Useinov

May  1

A deadlock is the database doing its job

May 2, 2020 · 2 min · Murat Useinov

April  1

Waiting for three APIs, one at a time

April 21, 2020 · 2 min · Murat Useinov

March  1

Sanctum and choosing how much auth you need

March 26, 2020 · 2 min · Murat Useinov

February  1

A Redis lock is a promise you cannot fully keep

February 26, 2020 · 2 min · Murat Useinov

January  1

Cursor pagination is part of your API contract

January 8, 2020 · 2 min · Murat Useinov

2019  12

December  1

Static state outlives the job

December 22, 2019 · 2 min · Murat Useinov

November  1

PHP 7.4: typed properties first, preloading later

November 29, 2019 · 2 min · Murat Useinov

October  1

PostgreSQL 12 inlines your CTE

October 18, 2019 · 2 min · Murat Useinov

September  1

Cleaning up before Symfony 5

September 25, 2019 · 2 min · Murat Useinov

August  1

200 OK is not health

August 7, 2019 · 2 min · Murat Useinov

July  1

N+1 hides on your laptop

July 5, 2019 · 2 min · Murat Useinov

June  1

One use case, one class

June 26, 2019 · 2 min · Murat Useinov

May  1

Messenger retries and the failure transport

May 30, 2019 · 2 min · Murat Useinov

April  1

What Redis does when memory ends

April 2, 2019 · 2 min · Murat Useinov

March  1

Transactional DDL is not portable

March 18, 2019 · 2 min · Murat Useinov

February  1

Eloquent observers and hidden control flow

February 27, 2019 · 2 min · Murat Useinov

January  1

One payment is enough

January 21, 2019 · 2 min · Murat Useinov

2018  12

December  1

PHP 7.3 and the value of small releases

December 27, 2018 · 2 min · Murat Useinov

November  1

Deprecations are a to-do list, not noise

November 30, 2018 · 2 min · Murat Useinov

October  1

PostgreSQL 11: partitions grow up, JIT arrives

October 26, 2018 · 2 min · Murat Useinov

September  1

Anatomy of email verification

September 18, 2018 · 2 min · Murat Useinov

August  1

Where the checkout logic goes

August 13, 2018 · 2 min · Murat Useinov

July  1

Covering index and the price of SELECT *

July 15, 2018 · 2 min · Murat Useinov

June  1

Messenger: in-process today, queue tomorrow

June 19, 2018 · 2 min · Murat Useinov

May  1

GDPR: where the user actually lives

May 9, 2018 · 2 min · Murat Useinov

April  1

MySQL 8.0: finally, modern SQL

April 24, 2018 · 2 min · Murat Useinov

March  1

.env is not a secrets store

March 14, 2018 · 2 min · Murat Useinov

February  1

Rector: refactoring by machine

February 8, 2018 · 2 min · Murat Useinov

January  1

Horizon, or the queue becomes visible

January 20, 2018 · 2 min · Murat Useinov

2017  12

December  1

Sodium in PHP 7.2 core

December 10, 2017 · 2 min · Murat Useinov

November  1

Symfony 4: the framework as recipes

November 30, 2017 · 2 min · Murat Useinov

October  1

PostgreSQL 10: partitions I can finally use

October 26, 2017 · 2 min · Murat Useinov

September  1

First run of PHPStan on legacy code

September 9, 2017 · 2 min · Murat Useinov

August  1

Laravel 5.5 and package auto-discovery

August 31, 2017 · 2 min · Murat Useinov

July  1

Multi-stage builds for PHP images

July 7, 2017 · 2 min · Murat Useinov

June  1

Keyset pagination instead of OFFSET

June 19, 2017 · 2 min · Murat Useinov

May  1

Private services: the container steps back

May 30, 2017 · 2 min · Murat Useinov

April  1

ALTER TABLE is part of the deploy

April 24, 2017 · 2 min · Murat Useinov

March  1

Autowiring is coming to Symfony 3.3

March 8, 2017 · 2 min · Murat Useinov

February  1

Cache stampede: the hot key problem

February 7, 2017 · 2 min · Murat Useinov

January  1

Laravel Dusk and what browser tests are for

January 26, 2017 · 2 min · Murat Useinov

2016  12

December  1

PHP 7.1: nullable is honest

December 9, 2016 · 2 min · Murat Useinov

November  1

Order status is a graph

November 30, 2016 · 2 min · Murat Useinov

October  1

The queue will run your job twice

October 3, 2016 · 2 min · Murat Useinov

September  1

Parallel query in PostgreSQL 9.6

September 30, 2016 · 2 min · Murat Useinov

August  1

Laravel 5.3: the app is not a website anymore

August 26, 2016 · 2 min · Murat Useinov

July  1

Column order in a composite index

July 4, 2016 · 2 min · Murat Useinov

June  1

Doctrine and the 100 000 row import

June 19, 2016 · 2 min · Murat Useinov

May  1

Symfony by the piece

May 10, 2016 · 2 min · Murat Useinov

April  1

Docker instead of a setup README

April 13, 2016 · 2 min · Murat Useinov

March  1

Freezing the Kohana layer

March 4, 2016 · 2 min · Murat Useinov

February  1

Middleware groups in Laravel 5.2

February 8, 2016 · 2 min · Murat Useinov

January  1

Upsert in PostgreSQL 9.5

January 12, 2016 · 2 min · Murat Useinov

2015  12

December  1

PHP 7 measured on real code

December 26, 2015 · 2 min · Murat Useinov

November  1

Symfony 3.0 is not a rewrite

November 30, 2015 · 2 min · Murat Useinov

October  1

JSON column is not a schema

October 23, 2015 · 2 min · Murat Useinov

September  1

Kohana on PHP 7: whose problem is it

September 8, 2015 · 2 min · Murat Useinov

August  1

Redis cache and Redis queue are different databases

August 21, 2015 · 2 min · Murat Useinov

July  1

Run your tests on PHP 7 now

July 8, 2015 · 2 min · Murat Useinov

June  1

Laravel 5.1 and the dependency ladder

June 14, 2015 · 2 min · Murat Useinov

May  1

Symfony 2.7: LTS is the feature

May 31, 2015 · 2 min · Murat Useinov

April  1

Where Doctrine spends your milliseconds

April 23, 2015 · 2 min · Murat Useinov

March  1

Three ways to get a dependency in Laravel

March 9, 2015 · 2 min · Murat Useinov

February  1

Laravel 5 and the death of the models folder

February 25, 2015 · 2 min · Murat Useinov

January  1

Composer in a legacy Kohana project

January 22, 2015 · 2 min · Murat Useinov

2014  12

December  6

Host header is user input

December 23, 2014 · 2 min · Murat Useinov

Symfony 2.6: dump() and boring upgrades

December 18, 2014 · 2 min · Murat Useinov

Symfony best practices: defaults, not laws

December 14, 2014 · 2 min · Murat Useinov

Debug toolbar in production is a gift to strangers

December 9, 2014 · 2 min · Murat Useinov

PHP 5.6: small syntax, big TLS surprise

December 5, 2014 · 2 min · Murat Useinov

Services instead of fat controllers

December 2, 2014 · 2 min · Murat Useinov

November  6

Queues in Laravel 4.2: the user should not wait for your SMTP

November 27, 2014 · 2 min · Murat Useinov

Composer next to Kohana bootstrap

November 23, 2014 · 2 min · Murat Useinov

Kohana is not developed anymore. Now what

November 19, 2014 · 2 min · Murat Useinov

Cascading filesystem: the best idea in Kohana

November 16, 2014 · 2 min · Murat Useinov

Kohana ORM and my first real N+1

November 12, 2014 · 2 min · Murat Useinov

HMVC in Kohana: a request inside a request

November 10, 2014 · 2 min · Murat Useinov