DevkiSign in

Spaced repetition for developers

Keep what you learned last month.

Devki puts the cards you are about to forget in front of you, in one five-minute session a day. Language gotchas and LeetCode patterns now; system design and hardware next. Anki’s scheduling, without building a deck.

Get started

Free during the beta. Sign in with your email.

I keep track of what’s due. You just show up for five minutes.
3 / 9Languages · Go

What does this print?

a := make([]int, 3, 4)
b := append(a, 1)
c := append(a, 2)
fmt.Println(b[3], c[3])
  1. 1 2
  2. 2 2
  3. 1 1
  4. It panics with index out of range
Show the answer

Answer: 2 2

a has length 3 but capacity 4, so both appends write into the same slot of the same backing array, and the second overwrites the first. 1 2 would be right if append always copied; it only allocates when capacity runs out.

Got it right? It comes back in a few days. Missed it? Tomorrow, and sooner after that.

A real card from the Go deck. Try it before you sign up.

Not every card is multiple choice

The Go card above is card 3 of a nine-card session. These are the next three, as you would see them after answering. Devki grades pattern and cloze cards the moment you submit. A flip card asks you to explain something, so you grade yourself.

1to4
Pick an option, or rate a flip card
Enter
Check, then continue
Space
Turn a flip card over
Esc
Leave; answers so far are kept
  1. 4 / 9patternLeetCode Patterns · Stacks & Queuesreview

    A cloud cost tool records a compute pool's spot price once an hour for a thirty-day window. For every hour it must report how many hours later the price first fell strictly below that hour's price, or zero if it never did before the window ended. The report is regenerated for forty thousand pools every night, so comparing each hour against every later hour is far too slow. Prices are plain integers in cents.

    Which technique fits?

    • heap-top-k
    • sliding-window
    • two-pointers
    • monotonic-stack(your answer, correct)
    CorrectNext: in 11 days
  2. 5 / 9clozeLanguages · Gonew

    context.WithTimeout returns the derived context plus a function conventionally named You typed: cancel, which you should defer right away so the timer and the parent's reference to the child are released even when the work finishes early.

    CorrectNext: in 2 daysAccepted: cancel, cancel(), CancelFunc, context.CancelFunc
  3. 6 / 9flipLanguages · Rustnew

    A teammate writes ids.iter().map(|id| audit(id)); as a statement, expecting audit to run for every id, and it never runs at all. Why, and what are the fixes?

    Iterator adapters such as map and filter are lazy: they build a new iterator that does nothing until something pulls values out of it. The statement throws that iterator away, so nothing ever pulls, and the compiler warns about an unused Map that must be used. For side effects, write a for loop or call .for_each(...); to keep the results, end the chain with a consumer such as .collect::<Vec<_>>(), .sum() or .count(). Laziness is also what lets a long chain of adapters run in a single pass with no intermediate collections.

    • Again
    • Hard
    • Good
    • Easy(chosen)
    EasyNext: in 8 days

When a card comes back

Devki schedules every card with FSRS-6 through the ts-fsrs library, the same algorithm Anki has offered since version 23.10. It brings a card back when it predicts you have about a 90% chance of still remembering it. Below is one card’s first 60 days: 6 correct answers and one miss, dated by the code the app runs.

Each answer to the example card and when it was due next
DayCard wasAnswerNext due
0newGoodin 2 days · day 2
2reviewGoodin 11 days · day 13
13reviewAgainin 10 min
13relearningGoodin 2 days · day 15
15reviewGoodin 5 days · day 20
20reviewGoodin 12 days · day 32
32reviewGoodin 28 days · day 60
You don’t grade most cards
A right answer on a multiple choice, pattern or cloze card counts as Good and a wrong one as Again. Hard and Easy only appear on flip cards.
A new card’s first answer
Again brings it back in 1 min, Hard in 2 min, Good in 2 days and Easy in 8 days.
What a session picks
Everything due, oldest first, then your daily allowance of new cards (5, 10 or 20, set at sign-up), easiest first and alternating between your tracks.
No random jitter
FSRS can nudge long intervals at random. Devki turns that off, so the same answers at the same times always give the same dates.

158 cards so far, in 4 of 8 tracks

47 flip · 20 pattern · 54 multiple choice · 37 cloze

Languages

43 cards

The syntax, runtime and tradeoffs behind the languages you ship in, so the details stay sharp between projects.

  • TypeScript10
  • Python11
  • Go11
  • Rust11
  • Javanone yet
  • C++none yet

System Design

43 cards

Storage engines, caches, consistency and messaging, and the moment each tradeoff starts to bite.

  • Storage11
  • Caching10
  • Consistency11
  • Messaging11
  • Scaling & Load Balancingnone yet
  • APIs & Rate Limitingnone yet

Hardware & Architecture

42 cards

What the machine does with your code, from the memory hierarchy and the CPU pipeline to parallelism and I/O.

  • Memory Hierarchy11
  • CPU Pipeline10
  • Parallelism10
  • I/O & Storage11
  • Operating Systemsnone yet

LeetCode Patterns

30 cards

Recognize which technique a problem is asking for within the first minute, across the twenty patterns behind most coding interviews.

  • Arrays & Strings7
  • Linked Lists2
  • Stacks & Queues2
  • Trees3
  • Graphs6
  • Dynamic Programming4
  • Search & Sort3
  • Heaps & Intervals3

Not started

no cards yet
  • AI & Machine LearningML Fundamentals, Deep Learning, LLM Systems, and ML in Production
  • SecurityWeb Security, Auth & Identity, Applied Cryptography, and Secure Infrastructure
  • Cloud & InfrastructureNetworking, Containers & Orchestration, CI/CD & Infrastructure as Code, and Observability
  • Web PlatformRendering & Layout, JavaScript Runtime, Web Performance, and Accessibility

They show as Coming soon at sign-up until the first cards ship.

Questions

Does it cost anything?
Not during the beta. There is no billing in the app yet.
Can I bring my own deck?
No. Every card is a file in Devki's repository. We draft them offline, some with an LLM, and a person reviews each one before it goes live. Devki never generates a card while you study.
Are the pattern cards LeetCode problems?
No. Each is an original problem written for Devki, and you answer by naming the technique rather than writing code.
What if I skip a day?
Your due cards wait and come first next time. The streak counts consecutive days, so it starts again from one.

Devki is in beta

Four of the eight tracks have cards so far. Some of those cards will turn out to be wrong. When you find one, the Report button under the answer flags it.

Get started