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.
Free during the beta. Sign in with your email.

What does this print?
a := make([]int, 3, 4)
b := append(a, 1)
c := append(a, 2)
fmt.Println(b[3], c[3])- 1 2
- 2 2
- 1 1
- It panics with index out of range
Show the answerHide 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.
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
- 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 - 5 / 9clozeLanguages · Gonew
context.WithTimeoutreturns the derived context plus a function conventionally named You typed: cancel, which you shoulddeferright 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 - 6 / 9flipLanguages · Rustnew
A teammate writes
ids.iter().map(|id| audit(id));as a statement, expectingauditto run for every id, and it never runs at all. Why, and what are the fixes?Iterator adapters such as
mapandfilterare 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 unusedMapthat must be used. For side effects, write aforloop 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.
| Day | Card was | Answer | Next due |
|---|---|---|---|
| 0 | new | Good | in 2 days · day 2 |
| 2 | review | Good | in 11 days · day 13 |
| 13 | review | Again | in 10 min |
| 13 | relearning | Good | in 2 days · day 15 |
| 15 | review | Good | in 5 days · day 20 |
| 20 | review | Good | in 12 days · day 32 |
| 32 | review | Good | in 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 cardsThe 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 cardsStorage 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 cardsWhat 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 cardsRecognize 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.
