Skip to content
Back to skills

Hickey

ASecurity

Rich Hickey's distinction between simple (not intertwined) and easy (familiar, near at hand): find where concerns are complected together and pull them apart, prefer plain data and values over hidden state. Use when choosing libraries or frameworks, designing data models and state management, reviewing code that mixes concerns (time, state, identity, I/O, logic), or when something "convenient" keeps causing bugs. Triggers: "think like Hickey", "simple made easy", "decomplect", "too coupled", ...

  • 2 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 4, 2026
ai-agentsdatabase

Security analysis

A100/100

Scanned October 4, 2026

npx -y skills add nuttakulsv/think-like --skill hickey --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Hickey?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Hickey
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/nuttakulsv-hickey/badge)](https://www.skillsdirectory.com/skills/nuttakulsv-hickey)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: hickey
description: >
  Rich Hickey's distinction between simple (not intertwined) and easy (familiar, near at hand):
  find where concerns are complected together and pull them apart, prefer plain data and values
  over hidden state. Use when choosing libraries or frameworks, designing data models and state
  management, reviewing code that mixes concerns (time, state, identity, I/O, logic), or when
  something "convenient" keeps causing bugs. Triggers: "think like Hickey", "simple made easy",
  "decomplect", "too coupled", "state is a mess", "คิดแบบฮิกกี", "แยก concern", "ง่ายกับซับซ้อน".
license: MIT
metadata:
  mind: Rich Hickey
  living: "true"
---

# Think like Hickey

Creator of the Clojure language and the Datomic database. His 2011 talk "Simple Made Easy"
separated two words people use interchangeably: simple is about how many things are twisted
together; easy is about how familiar or close at hand something is. Easy choices often make
systems that are not simple.

Not affiliated with or endorsed by Rich Hickey. Built from his talks listed below.

## When to use

- Choosing between a familiar tool and a less familiar but cleaner one
- State management, caching, and data model design
- A function or class that does logic, I/O, formatting and state updates at once
- Bugs that come from "who changed this and when"

## Method

1. **List the concerns** in the code under review: what (logic), how (mechanism), when (time/ordering), where (location/I/O), who (identity), state.
2. **Find complecting:** places where two or more concerns are braided so you can't change or test one without the other. Typical suspects: objects mixing state and identity, ORMs mixing query and domain logic, functions doing I/O inside business rules, inheritance mixing types and implementation.
3. **Prefer values over places.** Can mutable state become an immutable value passed in and returned? Can "update in place" become "compute new value, then store"?
4. **Prefer plain data over custom types** at boundaries: maps, records, rows that any tool can read.
5. **Separate the parts:** pure logic in the middle, effects (database, network, clock) at the edges. Pass time and randomness in as arguments.
6. **Judge tools by the complexity they create in your system**, not by how quickly the first example ran.

## Output

- `Concerns found:` the list
- `Complected:` pairs of concerns braided together, with code locations
- `Decomplected design:` what moves where; the pure core and the effectful edges
- `Easy vs simple:` for any tool choice, one line on each
- Write in the user's language.

## Anti-patterns

- Picking a tool because the tutorial was short
- Hidden mutable state shared across modules
- Business rules that can only be tested with a database running
- Clever DSLs where plain data would do

## Example (illustration)

> **User:** Our discount code is impossible to test.
>
> **Concerns found:** pricing rules, current time, database reads, logging.
>
> **Complected:** `applyDiscount()` reads `Date.now()`, queries the promo table and mutates `order.total` in place.
>
> **Decomplected design:** `priceOrder(order, promos, now) → { total, appliedPromos }`, a pure function. The controller loads promos, passes `now`, and saves the returned value. The rules now have plain unit tests with fixed dates.
>
> **Easy vs simple:** a rules-engine library was suggested. Easy to start, but it adds its own state model and a second language for rules. Not simpler than one pure function.

## Sources

- Rich Hickey, "Simple Made Easy", Strange Loop, 2011: https://www.infoq.com/presentations/Simple-Made-Easy/
- Rich Hickey, "The Value of Values", 2012: https://www.infoq.com/presentations/Value-Values/

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.