AI Job Demand in 2026: What Hiring Signals Show in Job Postings

Hype says “hire AI.” Job descriptions buy something else: production agents with evals and guardrails, Applied AI leadership, partner architecture, evaluation harness as a must-have. Method: read role clusters as an org chart under pressure.

Hype says “hire AI.” Real job descriptions buy people who own production agents, evals, Applied AI, and partner delivery. Below is a method for reading vacancy clusters as an org chart under pressure, plus five role clusters from a parsed corpus of open roles.

Continue reading “AI Job Demand in 2026: What Hiring Signals Show in Job Postings”

How to make eval a release criterion for AI features instead of a demo-grade approval

Demo-grade eval greenlights a feature on the same examples as the pitch. Production then shows the long tail. Three layers — incident-born regression, distribution diff vs the last snapshot, human spot-check — plus one named owner. Minimal harness: github.com/dobryakov/eval-harness.

Treat AI-output quality as a release criterion: a fixed regression set built from past incidents, a distribution diff against the previous release snapshot (20–50 real inputs), a human spot-check before the first production deploy of a new output type — and one person who signs off. Below: the demo-grade anti-pattern, the three-layer method, and a minimal harness that fails CI with a readable exit code.

Continue reading “How to make eval a release criterion for AI features instead of a demo-grade approval”

How to design professional software architecture with AI even if you don’t know the domain

Without a domain substrate, an agent ships FTP and CSV and calls it done. Book-as-context puts a book into the project as a wiki — next to LLM Wiki and book-to-skill — so a short prompt yields outbox, queues, idempotency, and fault tolerance.

Give the agent an authoritative book on the subject as a wiki in the repo — indexed and cross-linked, not a one-off file drop into the chat. Then even a short prompt designs in the source’s terms: queues, delivery guarantees, idempotency, fault tolerance. Below: the book-as-context method, a shop→ERP walkthrough, and the method’s limits.

Continue reading “How to design professional software architecture with AI even if you don’t know the domain”

Why AI skills need onboarding if you can just copy them into the folder

Three skills are fine. Thirty — style drifts, shared state gets overwritten, behavior changes with no stack and no log line. Dropping markdown into `.claude/skills/` is a hire with no interview. Onboarding exists so you catch the conflict before it hits daily flow — not because process looks nice.

Because copying markdown into a folder is not installing a package. It is a hire: a new slice of behavior enters the assistant and will collide with its neighbors tomorrow. A skill here is an instruction pack for an AI assistant (Claude Code / Cursor): frontmatter, rules, declared reads/writes/calls. While the intake path is empty, every new file under .claude/skills/ is a silent hire with no interview and no record in the file.

Continue reading “Why AI skills need onboarding if you can just copy them into the folder”

How to secure an AI coding agent without relying on the system prompt

“Don’t delete prod” in a system prompt is not a security control. The real boundary is where the model physically cannot act: API surface, isolation, operation filter, audit. Working reference: enterprise-code-bastion.

A prompt is a wish. A perimeter is when the model physically cannot reach files or a shell: native tools off, an MCP intermediary, Docker per project+task, a filter before execution, an audit trail. Below is a working reference — and where the design gives way.

Continue reading “How to secure an AI coding agent without relying on the system prompt”

Hide and protect your AWS S3 endpoint (Rails+Nginx example)

It is very simple to use S3 as a storage for your static content in Rails application. Just add paperclip and aws-sdk gems. But what to do if you want to hide the direct links to S3 items, or even restrict access to some files by user’s roles and access rights? Here is a working example: Continue reading “Hide and protect your AWS S3 endpoint (Rails+Nginx example)”

Conditional GET for lists (nice trick)

Here is the nice trick to achieve Conditional GET request for lists (Index operation in classic REST terms). You know about this mechanism for single items (show operation): browser asks a resource for the first time, cache it’s last_modified value, and send “If-Modified-Since” header in the next request. A server checks database for resorce.update_at value, and responds “200 OK” with content as usual (if resource is newer), or responds with “304” without content if resource was not changed.

You can see an economy for computing resources, traffic, parsing and so on. But how to implement this technique for lists? Where is no “updated_at” attribute for the lists…

But don’t give up! Just get a newer resourse in the list, and use it’s “updated_at” attribute.

Here is an example for Ruby on Rails:
updated_at = models.max_by(&:updated_at).try(:updated_at) || Time.at(1)

The last part is a trick for empty lists. Easy!

Caveats: it will not work when you destroy a model from collection by real deleting from the database, because the newer “updated_at” value will not change or even becomes early. Browser will not get actual (changed) content. Use Paranoid gem (or mark it as something like ‘is_deleted’) instead, or switch to ETag.

How to write a code within dataflow paradigm

Of course, you know, there are at least two popular paradigm of programming: imperative and functional. But there is another, very interesting paradigm, which I call as “dataflow”. In this post I want to explain why it is good, and how to use it to build web-related services. Continue reading “How to write a code within dataflow paradigm”

Microservices in a frontend: SOA in JavaScript

In this post we will discuss about the approach to building the frontend of the websites in terms of the microservices paradigm, dataflow and communication between services through the exchange of events (messages). I will use Backbone.js framework as an example.

Why Backbone? Because it is out-of-the-box best (as far as I know) of JavaScript frameworks originally designed to work with the data – instead other frameworks designed to work with visualization layer at the first. If you agree that the models, relationships and business logic – are the core, then you should agree with me. There are other points of view, and other tools – more focused on html, visual effects and the interaction with the user.

This approach is reflected even in the set of Backbone tools: a lot of tools for data and extremely simple templater. Fortunately, you can use the Backbone along with any other templater engine. Continue reading “Microservices in a frontend: SOA in JavaScript”