LearnThatStack Ace your next interview
AI Engineering

LLM APIs & Integration.

Start free Change topic Change

Practise LLM APIs & Integration one question at a time. Answer out loud or in writing, get graded, and see exactly what you missed.

Try one question

What is an LLM API, and which major provider APIs should an engineer know in 2026?

The answer

An LLM API is a hosted large language model you call over HTTPS. You send a prompt plus settings and get generated text back. The model is stateless, so you resend the conversation or let the API store it.

The first-party APIs to know:

  • Anthropic's Messages API, POST /v1/messages.
  • OpenAI's Responses API, POST /v1/responses. Chat Completions still works.
  • Google's Gemini API, where the Interactions API is now recommended over generateContent.

Cloud platforms resell the same models: Amazon Bedrock, Microsoft Foundry, and Google's Gemini Enterprise Agent Platform, formerly Vertex AI. They add enterprise billing, regions, and cloud identity and access management (IAM).

Many smaller providers ship an OpenAI-compatible endpoint, so one client library often reaches Mistral, DeepSeek or self-hosted models.

Example · what grading looks like
Walk me through the anatomy of a basic chat request: messages, roles, and the system prompt.

“A chat request is basically a list of messages, where each one has a role: user for what I'm asking and assistant for the model's earlier replies. On top of that there's a system prompt that sets standing instructions like the persona, tone and rules. With Anthropic it's a separate top-level system field, while OpenAI puts it inside the messages list with a system or developer role, and the reply comes back as a single assistant message.”

Knew it

Covers messages, roles, and where the system prompt lives in both APIs. Missing that the conversation is stateless, so you resend the full history each turn, which is why the previous assistant reply gets appended before the next call.

Missed: Doesn't mention the request is stateless, so the whole conversation has to be resent each turn

Missed: Doesn't say the returned assistant message needs to be appended to messages before the next call, or that replaying past turns is the model's only memory


Get your own answers graded

Sign up free. Your account comes with 50 credits for grading, and it remembers what you missed.

What it covers

All 52 questions

Each on its own page

Providers, APIs and SDKs

The major provider APIs, how their request and response shapes differ, OpenAI's Responses API, and when to use an SDK instead of raw REST.

4 questions

  1. What is an LLM API, and which major provider APIs should an engineer know in 2026?
  2. When would you use an official SDK versus calling the REST endpoints directly? Pro
  3. Compare the request and response shapes of Anthropic, OpenAI, and Gemini. What differs beyond field names? Pro
  4. What is OpenAI's Responses API, and how does it differ from Chat Completions and Assistants? Pro

Request anatomy and parameters

Messages, roles and the system prompt, max_tokens, context windows, sampling settings, and how reasoning models change these parameters.

5 questions

  1. Walk me through the anatomy of a basic chat request: messages, roles, and the system prompt.
  2. What does the max_tokens parameter control, and what happens when a response hits that limit?
  3. What is a context window, and what happens if you exceed it?
  4. What do sampling parameters like temperature and top_p do, and what is their status across current models? Pro
  5. How do you call reasoning models through an API, and what changes about parameters, tokens, and cost? Pro

Authentication and API keys

How each provider authenticates requests, why keys stay on the server, and how to design key and secrets architecture across teams.

3 questions

  1. How do you authenticate requests to the Anthropic, OpenAI, and Gemini APIs?
  2. Your frontend needs LLM features. Where does the API key live, and why? Pro
  3. Design the API key and secrets architecture for a company running LLM workloads across several teams and environments. Pro

Tokens, billing and cost

What a token is, how usage is billed, counting tokens before a request, reading usage fields for true cost, and batch API discounts.

4 questions

  1. How is LLM API usage billed, and what exactly is a token?
  2. When and how do you use batch APIs, and what do they cost? Pro
  3. How do you count tokens accurately before sending a request, and why does the tool choice matter? Pro
  4. Which usage fields do you read to compute the true cost of a request? Pro

Streaming responses

Why chat apps stream, how server-sent events work on the wire, handling chunks on the client, and recovering when a stream fails midway.

4 questions

  1. What is streaming, and why do production chat apps almost always enable it?
  2. How does server-sent-event streaming work on the wire, and what event sequence does the Anthropic API emit? Pro
  3. What does robust client-side handling of streamed chunks look like? Pro
  4. A streamed response fails halfway through. What can go wrong mid-stream, and how should clients recover? Pro

Images, documents and audio

Sending images and PDFs to provider APIs, their practical limits, and building a portable voice input pipeline.

3 questions

  1. How do you send images to these APIs, and what practical constraints matter? Pro
  2. How do the major providers handle PDFs and other documents? Pro
  3. The product wants voice input. Compare audio support across providers and outline a portable pipeline. Pro

JSON mode and structured outputs

JSON mode versus prompting for JSON, how constrained decoding guarantees a schema, and where structured outputs still fail at scale.

3 questions

  1. What is JSON mode, and how is it different from just asking the model for JSON in the prompt? Pro
  2. How do structured outputs guarantee schema conformance, and what are the limits? Pro
  3. Structured outputs still fail in production. Where do failures come from at scale, and how do you engineer reliability around them? Pro

Tool use and function calling

How function calling works end to end, the tool loop, parallel calls, tool_choice, MCP, and keeping prompt injection in tool results from triggering actions.

6 questions

  1. Explain function calling (tool use) end to end. How does the model actually "call" your function? Pro
  2. How do you structure the tool-use loop, and when does it terminate? Pro
  3. What are parallel tool calls, and how do you return the results correctly on each provider? Pro
  4. What is the Model Context Protocol (MCP), and how does it relate to a provider's function-calling API? Pro
  5. Beyond basic tool calling, how do you control when and how the model uses tools? Pro
  6. Tool results carry untrusted web and document text. How do you keep prompt injection from triggering real actions? Pro

Rate limits, retries and resilience

Handling 429s and rate-limit dimensions, retry policies, SDK timeouts, safe retries with side effects, and a layered resilience stack.

6 questions

  1. A request returns HTTP 429. What does it mean, and what should your client do? Pro
  2. What dimensions do LLM rate limits come in, and how do you plan capacity against them? Pro
  3. Design a retry policy for LLM API calls. Which errors do you retry, and how? Pro
  4. What timeout behavior do the SDKs have by default, and what gotchas bite in production? Pro
  5. LLM APIs have no idempotency keys. How do you make retries safe in a system with side effects? Pro
  6. Design a production-grade resilience layer for LLM traffic: retries, circuit breakers, hedging, and fallbacks working together. Pro

Prompt caching and context management

How each provider caches prompts, the cost and break-even math, managing long conversation history, and caching at fleet scale.

5 questions

  1. How does Anthropic prompt caching work mechanically, and what does it cost? Pro
  2. How do OpenAI and Gemini approach prompt caching, and how does that compare with Anthropic's explicit model? Pro
  3. A chat session grows past the context window. How do you manage conversation history without breaking prompt caching? Pro
  4. Explain the economics of prompt caching: TTLs, write premiums, and break-even math. Pro
  5. How do you architect prompt caching at fleet scale, across tenants, deployments, and routing decisions? Pro

Routing, gateways and model versions

Routing and fallbacks across providers, gateways like LiteLLM and OpenRouter, the pitfalls of provider-agnostic abstractions, and model migrations.

5 questions

  1. How would you design model routing and fallbacks across multiple providers? Pro
  2. What is LiteLLM, and how would you use it in production? Pro
  3. What is OpenRouter, and when would you choose it over direct provider integrations? Pro
  4. How do model versioning and deprecations work, and what is your migration playbook? Pro
  5. What goes wrong when teams build a "provider-agnostic" abstraction over LLM APIs? Pro

Deployment, observability and SLOs

Logging and tracing LLM calls, serverless versus long-running servers, durable long-running jobs, and latency and cost SLOs with capacity planning.

4 questions

  1. What should you log, measure, and trace for LLM API calls in production? Pro
  2. What changes about LLM integration when you deploy on serverless versus a long-running server? Pro
  3. How do you architect for long-running LLM tasks like agent loops or deep research jobs? Pro
  4. Define latency and cost SLOs for an LLM-backed product, and explain how you plan capacity against them. Pro
Practice · Questions

All questions

Showing of 52
Beginner 12
01

What is an LLM API, and which major provider APIs should an engineer know in 2026?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

An LLM API is a hosted large language model you call over HTTPS. You send a prompt plus settings and get generated text back. The model is stateless, so you resend the conversation or let the API store it.

The first-party APIs to know:

  • Anthropic's Messages API, POST /v1/messages.
  • OpenAI's Responses API, POST /v1/responses. Chat Completions still works.
  • Google's Gemini API, where the Interactions API is now recommended over generateContent.

Cloud platforms resell the same models: Amazon Bedrock, Microsoft Foundry, and Google's Gemini Enterprise Agent Platform, formerly Vertex AI. They add enterprise billing, regions, and cloud identity and access management (IAM).

Many smaller providers ship an OpenAI-compatible endpoint, so one client library often reaches Mistral, DeepSeek or self-hosted models.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

02

Walk me through the anatomy of a basic chat request: messages, roles, and the system prompt.

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

A chat request is a stateless list of messages plus a system prompt. Stateless means the server keeps no memory, so you resend the whole conversation each turn.

{
  "model": "claude-sonnet-4-6",
  "max_tokens": 1024,
  "system": "You are a concise Python tutor.",
  "messages": [
    {"role": "user", "content": "What is a decorator?"},
    {"role": "assistant", "content": "A decorator wraps a function..."},
    {"role": "user", "content": "Show me one."}
  ]
}

Roles label who said what. user is your input, and assistant is the model's earlier reply. Replaying past assistant turns is the model's only memory.

The system prompt holds standing instructions: persona, tone, rules. Anthropic takes it as a top-level system field, outside messages. OpenAI puts it inside messages under a system or developer role.

The reply comes back as one assistant message. Append it to messages before the next call.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

03

What does the max_tokens parameter control, and what happens when a response hits that limit?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

max_tokens caps how many output tokens the model may generate in one response. It does not limit your input, and it does not change the context window. Anthropic requires it on every request. OpenAI and Gemini treat it as optional.

When the cap is hit, generation just stops, often mid-sentence. You get no error, and you still pay for the tokens produced. So always check the stop field before you use the text:

  • Anthropic sets stop_reason to max_tokens.
  • OpenAI sets finish_reason to length.
  • Gemini sets finishReason to MAX_TOKENS.

Truncated JSON will fail to parse, so treat that value as a real failure.

On reasoning models, hidden reasoning tokens count against the same budget. A tight cap can then return no visible text at all. OpenAI names that parameter max_completion_tokens on Chat Completions and max_output_tokens on the Responses API.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

04

How do you authenticate requests to the Anthropic, OpenAI, and Gemini APIs?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

All three send a long-lived secret key in a request header. Only the header name and a few extras differ.

curl https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01"

curl https://api.openai.com/v1/responses \
  -H "Authorization: Bearer $OPENAI_API_KEY"

curl "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent" \
  -H "x-goog-api-key: $GEMINI_API_KEY"
  • Anthropic now takes the key as Authorization: Bearer, and still accepts the x-api-key header shown here. Every request also needs the anthropic-version header, or it fails. The SDK reads ANTHROPIC_API_KEY.
  • OpenAI takes Authorization: Bearer, and the SDK reads OPENAI_API_KEY.
  • Gemini takes x-goog-api-key, and the SDK reads GEMINI_API_KEY or GOOGLE_API_KEY. Gemini also accepts ?key= in the URL. URLs land in logs and proxies, so prefer the header.

The same models on Amazon Bedrock or Google Cloud use the cloud's own identity and access management (IAM) credentials instead. That means SigV4 request signing or a short-lived OAuth token.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

05

How is LLM API usage billed, and what exactly is a token?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Billing is per token, not per request or per seat. Providers price input and output separately, per million tokens. Input is what you send: the system prompt, the chat history and the new user message. Output is what the model writes, including tool-call arguments, and it usually costs several times more than input.

A token is a piece of text from the model's vocabulary, usually a subword chunk, not a whole word or a character. English prose averages roughly 4 characters per token. Code, JSON and non-English text pack fewer characters into each token, so they cost more.

"tokenization" -> ["token", "ization"]    2 tokens

Each provider uses its own tokenizer, so the same text counts differently across models. Even one provider's count can shift: Claude 4.7 and later produce about 30 percent more tokens for the same text than earlier Claude models.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

06

What is streaming, and why do production chat apps almost always enable it?

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain

Streaming sends the answer in small pieces as the model writes them, instead of one block at the end. You turn it on with a request flag.

{
  "model": "claude-opus-4-8",
  "max_tokens": 1024,
  "messages": [{ "role": "user", "content": "Explain streaming." }],
  "stream": true
}

Total generation time does not change. What changes is time to first token, the wait before the first word appears: hundreds of milliseconds instead of many seconds. Users read while the model writes, so the app feels fast.

A long single response can also trip a proxy or gateway timeout. Streaming avoids that, and it lets a user stop a wrong answer early.

The cost is complexity. Usage totals arrive at the end, and a check on the full text, such as JSON validation, cannot run before the user sees it.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

07

What is a context window, and what happens if you exceed it?

Visual

Beginner ·

Answer it yourself first - out loud, or typed below.

How should your speech become text?

Listening… your words appear above as you speak - tap Stop when you're done.

Recording · cr - tap Stop & transcribe when you're done.

Transcribing with AI…

Voice:

Keep going - a few more words and AI can grade it.

Last attempt -

Your answer

Re-explain
Visual

The context window is the most tokens a model can hold at once, where a token is a short chunk of text. It covers the system prompt and message history, plus tool definitions and results. Generated tokens count too, so input and output share one budget. Sizes run from roughly 128K tokens to about a million.

If the input alone exceeds it, the request fails before generation with a 400 error, not a shortened answer.

{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "prompt is too long: 205000 tokens > 200000 maximum"
  }
}

Two traps. On many models max_tokens counts against the window, so a big value can reject a prompt that fits. Claude 4.5 and newer accept it and stop with model_context_window_exceeded if output fills the window. And quality often drops well before the hard limit, because models recall the middle of a long input less reliably.

Rewriting in plainer words…

This answer doesn't lend itself to a diagram - it reads best . No credits were charged.

Why there's no diagram: “”

The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓

Related concept

Tailored explanation · switch back to · ·
What should the new diagram focus on?
How well did you know this?
AI:

08

Your frontend needs LLM features. Where does the API key live, and why?

Part of Pro
09

A request returns HTTP 429. What does it mean, and what should your client do?

Part of Pro
10

What is JSON mode, and how is it different from just asking the model for JSON in the prompt?

Part of Pro
11

When would you use an official SDK versus calling the REST endpoints directly?

Part of Pro
12

What do sampling parameters like temperature and top_p do, and what is their status across current models?

Part of Pro Visual
Intermediate 23
13

Compare the request and response shapes of Anthropic, OpenAI, and Gemini. What differs beyond field names?

Part of Pro
14

How does server-sent-event streaming work on the wire, and what event sequence does the Anthropic API emit?

Part of Pro
15

What does robust client-side handling of streamed chunks look like?

Part of Pro
16

Explain function calling (tool use) end to end. How does the model actually "call" your function?

Part of Pro Visual
17

How do you structure the tool-use loop, and when does it terminate?

Part of Pro
18

What are parallel tool calls, and how do you return the results correctly on each provider?

Part of Pro
19

How do structured outputs guarantee schema conformance, and what are the limits?

Part of Pro Visual
20

How do you send images to these APIs, and what practical constraints matter?

Part of Pro
21

How do the major providers handle PDFs and other documents?

Part of Pro
22

The product wants voice input. Compare audio support across providers and outline a portable pipeline.

Part of Pro
23

What dimensions do LLM rate limits come in, and how do you plan capacity against them?

Part of Pro
24

Design a retry policy for LLM API calls. Which errors do you retry, and how?

Part of Pro
25

What timeout behavior do the SDKs have by default, and what gotchas bite in production?

Part of Pro
26

How does Anthropic prompt caching work mechanically, and what does it cost?

Part of Pro Visual
27

How do OpenAI and Gemini approach prompt caching, and how does that compare with Anthropic's explicit model?

Part of Pro
28

When and how do you use batch APIs, and what do they cost?

Part of Pro
29

How do you count tokens accurately before sending a request, and why does the tool choice matter?

Part of Pro
30

Which usage fields do you read to compute the true cost of a request?

Part of Pro Visual
31

A chat session grows past the context window. How do you manage conversation history without breaking prompt caching?

Part of Pro Visual
32

What is OpenAI's Responses API, and how does it differ from Chat Completions and Assistants?

Part of Pro Visual
33

What is the Model Context Protocol (MCP), and how does it relate to a provider's function-calling API?

Part of Pro Visual
34

How do you call reasoning models through an API, and what changes about parameters, tokens, and cost?

Part of Pro
35

Beyond basic tool calling, how do you control when and how the model uses tools?

Part of Pro
Expert 17
36

Explain the economics of prompt caching: TTLs, write premiums, and break-even math.

Part of Pro
37

LLM APIs have no idempotency keys. How do you make retries safe in a system with side effects?

Part of Pro Visual
38

A streamed response fails halfway through. What can go wrong mid-stream, and how should clients recover?

Part of Pro Visual
39

How would you design model routing and fallbacks across multiple providers?

Part of Pro
40

What is LiteLLM, and how would you use it in production?

Part of Pro
41

What is OpenRouter, and when would you choose it over direct provider integrations?

Part of Pro
42

How do model versioning and deprecations work, and what is your migration playbook?

Part of Pro
43

What should you log, measure, and trace for LLM API calls in production?

Part of Pro Visual
44

What changes about LLM integration when you deploy on serverless versus a long-running server?

Part of Pro
45

How do you architect for long-running LLM tasks like agent loops or deep research jobs?

Part of Pro Visual
46

What goes wrong when teams build a "provider-agnostic" abstraction over LLM APIs?

Part of Pro
47

Design a production-grade resilience layer for LLM traffic: retries, circuit breakers, hedging, and fallbacks working together.

Part of Pro
48

How do you architect prompt caching at fleet scale, across tenants, deployments, and routing decisions?

Part of Pro
49

Define latency and cost SLOs for an LLM-backed product, and explain how you plan capacity against them.

Part of Pro
50

Design the API key and secrets architecture for a company running LLM workloads across several teams and environments.

Part of Pro Visual
51

Structured outputs still fail in production. Where do failures come from at scale, and how do you engineer reliability around them?

Part of Pro Visual
52

Tool results carry untrusted web and document text. How do you keep prompt injection from triggering real actions?

Part of Pro Visual

No matches

Try a different filter or search term.

Know someone prepping for LLM APIs & Integration? Send them this set.
Quick recap

LLM APIs & Integration in pictures.

A quick recap of LLM APIs & Integration in 37 short animated pictures, one idea at a time. About 9 min to get the whole topic back in your head before you walk in. Pause any picture, slow it down, or step through it.

Pro The first chapter is free to play. The other 33 pictures come with Pro.

Get Pro · $10/mo
Pro · $10/mo

45 of 52 LLM APIs & Integration answers are in Pro.

Full answers, code samples, and AI explanations that go simpler or deeper. Cancel anytime.

  • Full answers + code
  • AI explanations, simpler or deeper
  • 1,000 AI credits / month
  • Cancel anytime

Change topic

Pick a different technology or stack. Your current topic stays put until you choose a new one.

Technologies
No technologies match “”.
Cross-cutting topics
No topics match “”.
By role
Stacks & frameworks

MEAN

MongoDB, Express, Angular, Node.js

MERN

MongoDB, Express, React, Node.js

LAMP

Linux, Apache, MySQL, PHP

Django

Python Full-Stack Development

Ruby on Rails

Convention over Configuration

Serverless on AWS

Serverless Architecture on AWS

Flutter Mobile

Flutter Cross-Platform Mobile Development

Spring Boot

Enterprise Java Development

.NET

Microsoft Ecosystem

Vue

Vue.js, Vite, TypeScript, Tailwind, Node.js

Go Backend

Golang, gRPC, PostgreSQL, Redis, RabbitMQ

FastAPI

Python, FastAPI, SQLAlchemy, PostgreSQL

React Native

React, TypeScript, Redux, Firebase

iOS Native

Swift, SwiftUI, UIKit, Firebase

Android Native

Java, Jetpack Compose, Firebase

DevOps / Platform

Docker, Kubernetes, Terraform, CI/CD

AI Engineer

LLMs, RAG, Agents, Evals

AI-Powered Developer

Claude Code, Copilot, Agentic Workflows

Core SWE Interview Prep

Data structures, algorithms, OS, concurrency, networking, git