Opening Hook

Last week I refactored 200 lines of Babashka security rules into 47 lines of Rego. My Clojure-trained brain immediately recognized the pattern — until I realized I’d just discovered 52 years of academic history.

The concept you think you invented? It’s called logic programming. And it’s quietly running production security at scale.


The Deep Cut

Logic programming dates to 1972 (Prolog). The core idea: write declarative rules, let the engine figure out execution. Sound familiar?

;; Clojure: filter compliance violations
(filter (fn [resource]
          (and (= (:environment resource) "production")
               (empty? (:allowed_actions resource))))
        resources)
# Rego v1: same logic, declarative
package example

import rego.v1

deny contains msg if {
    some resource in data.resources
    resource.environment == "production"
    count(resource.allowed_actions) == 0
    msg := sprintf("Production resource %v has no allow rules", [resource.id])
}

Same semantics. Different presentation layer.


Why Functional Programmers Are Drawn Here

Clojure Concept Logic Programming Parallel
Immutable data Facts don’t change — rules evaluate against a static snapshot
Pattern matching (condp) Horn clauses are pattern matches with backtracking
Set operations Logic variables range over sets natively
core.logic unification Unification is the core inference mechanism
Lazy evaluation Rules fire only when queried

Your brain didn’t fail — it recognized the underlying computational model.


Production Reality Check

This isn’t only academic. OPA documents Rego as a declarative language inspired by Datalog, and companies have published concrete policy-as-code deployments:

The useful distinction is not a policy-count headline. It is whether the policy decision is explicit, testable, reviewable, and enforced before the side effect.

Sources: OPA policy language, Cloudflare engineering write-up.


The Paradigm Bridge

Diagram

The Hireability Hack

Stop saying “functional programming for security”.

Start saying “logic programming for compliance automation” — and watch recruiters’ eyes light up. Because that’s literally what they’re searching for.

Search Term Practical use
functional programming security Broad conceptual search
logic programming compliance Narrow conceptual search
policy-as-code engineering Direct job-language search

Action Plan

  1. Rewrite your resume: Replace “Clojure security tooling” with “Policy-as-Code Engineering (OPA/Rego/Datalog)”
  2. Add Rego to your toolkit: It is a different language with a related declarative mindset, not Clojure with renamed punctuation.
  3. Target jobs: “Policy Engineer”, “Infrastructure Governance”, “Compliance Automation”
  4. Leverage your edge: You already think in immutable sets — you just didn’t know it had a 50-year legacy name

Takeaway

You didn’t reinvent the wheel.

You recognized an established paradigm that the industry finally decided to industrialize.

That’s not a failure — it’s pattern recognition at work.