- AI-Assisted Engineering – Analysing an Unfamiliar Codebase
Before changing anything, understand it. Using Claude read-only to trace checkout from the button to Stripe, size the change, and find the rules the code already enforces. Plus how to check that the explanation you got is true.
- Android – Coroutines and Flow
Structured concurrency on Android: viewModelScope, an application scope for work that must outlive a screen, async for parallel requests, cancellation as a debounce, a polling loop that stops itself, Mutex instead of synchronized, and StateFlow with stateIn and collectAsStateWithLifecycle.
- iOS – Testing an iOS App
What to test and what to skip. Pure rules first because they cost nothing, a real URLSession against a stubbed URLProtocol so the assertions are about the bytes you would send, hand-written doubles over a mocking framework, testing async and main-actor code, and why @MainActor on an XCTestCase is wrong.
- AI-Assisted Engineering – Setting Claude Up for a Real Codebase
An assistant is only as good as the context it starts with. CLAUDE.md as standing instructions, a progress report as shared state, memory, permission modes, and MCP servers for GitHub, AWS and the browser. What to put in each, and what to leave out.
- Android – Error Handling That Users Can Act On
One sealed ApiError whose cases are decisions, one place that maps every library exception onto it, the CancellationException you must never swallow, UiState instead of three booleans, and ActionOutcome for writes — including the cancelled case that a Result has nowhere to put.