Skip to content

Writing

Field notes for the parts nobody teaches.

Essays on interviewing, mobile architecture, leadership, AI and the career systems behind senior engineering work. Most books start here, as field notes, before they become a chapter.

Every essay gets an audio edition. Press play on any article and the playlist carries you through the rest.

See the books these notes became
A first answer kept on the left and the same question under a changed constraint on the right, with the gap between them marked.

Reading the answer is not the same as giving it.

Most interview preparation stops at recognition. Loops score what you can produce once the question changes. Why I built Interview Runtime, and what it asks you to do.

Featured essay · Engineering Interviews

4 min read
Read the essay

Career strategy

A post offering 125,000 euro, full remote and visa sponsorship, marked Caught you. The expected result, fewer followers, is a faded dashed line ending in nothing. The actual result is a copper line feeding a counter at 7,052 with 3,699 more waiting.
Job search7 min read

How I tried to clean up my LinkedIn and doubled the problem

I posted a fake dream job to thin out the wrong connections. Requests went up, CVs arrived, and people tagged friends under the post explaining there was no job.

Get hired

NewA completed engineering task closing its own coordination loop without follow-up.
Career strategy7 min readAudio

The engineer nobody chases

The most common reason capable engineers stall has nothing to do with code. It is how much coordination work lands on other people after you have finished.

Lead teams

Two private documents representing an interview decision packet and a written offer counter.
Career strategy4 min readAudio

The two documents that decide your career are written by other people

One gets written after your interview. The other gets written after your offer. You never see either, and that is exactly why they cost you money.

Get hired

A LinkedIn profile split into the parts a recruiter searches and the parts a hiring manager reads.
LinkedIn5 min read

LinkedIn profile optimization for software engineers

An optimized profile is one a recruiter can find and a hiring manager can place at the right level in under a minute. Most engineer profiles fail the second test, not the first.

Get hired

LinkedIn headline examples arranged from senior engineer to Staff, Principal and engineering manager.
LinkedIn3 min read

Software engineer LinkedIn headline examples

A headline has two jobs: come back in a recruiter's search and place you at the right level in one line. These examples are organised by level and platform, and each one says why it works.

Get hired

Resume bullets growing in scope from a single feature to a decision adopted across teams.
Resume4 min read

Staff software engineer resume

Staff is not Senior with more technologies. A Staff resume has to show decisions that changed how other teams work, and most Staff candidates bury exactly that under a list of features.

Become staff

A resume page organised around technical direction, leverage and risk rather than features.
Resume3 min read

Principal software engineer resume

There is no universal definition of Principal. There is a common thread: your decisions set the technical direction for more than one team, and the resume has to prove that without a list of titles doing the work.

Become staff

Public evidence of engineering judgment connected to the profile a hiring manager opens.
Visibility3 min read

Personal branding for software engineers

An engineer's brand is not a voice or a posting schedule. It is what a stranger can verify about your judgment before they talk to you. Most engineers have the work and none of the evidence.

Get hired

A plain portfolio page with a claim, three case studies and a contact line.
Visibility3 min read

Software engineer portfolio website

A portfolio website does one job: let a stranger verify your work in a minute. Most engineer portfolios are built to impress a designer and forget to prove anything to an engineer.

Work independently

Interviews

The first answer is the entry fee. The follow-up is the score. Senior Android interviews, from the hiring side.
Engineering Interviews6 min read

Senior Android interview questions: the 5 follow-ups that decide the loop

Your first answer rarely decides a senior Android interview. The follow-up does. Five follow-ups, the answer that loses the point, the one that earns it, and what to say when you wobble.

Pass interviews

The first answer is the entry fee. The follow-up is the score. 500+ technical interviews from the hiring side.
Engineering Interviews6 min read

Senior iOS interview questions: the 5 follow-ups that decide the loop

Your first answer rarely decides a senior iOS interview. The follow-up does. Five follow-ups, the answer that loses the point, the one that earns it, and what to say when you wobble.

Pass interviews

The live round is not a puzzle. It is a small app under a clock. 500+ technical interviews from the hiring side.
Engineering Interviews6 min read

iOS coding interview: what the live round actually tests

The iOS coding interview is rarely a puzzle. It is a small app task under a clock, and the score comes from how you build it, not whether it compiles on the first try. The five common tasks, what gets scored in each, and what to say when it breaks.

Pass interviews

Launching the coroutine is easy. Stopping it is the question. 500+ technical interviews from the hiring side.
Engineering Interviews7 min read

Kotlin coroutines interview questions senior Android loops ask

Ten coroutines and Flow questions senior Android loops ask, what each one tests, the follow-up that decides the score, and four short bugs worth practising until you can fix them out loud.

Pass interviews

NewA wall of open browser tabs collapsing into a short prioritised study list.
Engineering Interviews5 min readAudio

You have 40 interview tabs open and still don't know what to study.

Interview preparation gets worse when everything looks important. The closer the interview gets, the more your calendar should force you to cut.

Pass interviews

NewA finished tutorial on one screen and an empty code editor waiting on the other.
Engineering Interviews6 min readAudio

You watched the solution. Then you opened an empty editor.

Watching someone code can make you feel ready. Live coding exposes the gap between recognition, retrieval, and making your judgment visible under pressure.

Pass interviews

NewA polished AI-generated assessment on one side and an interviewer's single question mark on the other.
Engineering Interviews5 min readAudio

AI can pass the assessment. You still have to survive the interview.

AI can produce a polished assessment. The harder part starts when a Senior engineer asks why the code exists and whether you own the decisions behind it.

Pass interviews

NewTwo correct Android interview answers taking different paths through an evaluation grid.
Interviews6 min readAudio

A correct Android answer can still fail the interview

Two answers to the same Android question, both correct, scored completely differently. What senior loops are measuring once you clear the knowledge bar.

Pass interviews

A quiet desk setup for rehearsing senior iOS interview answers.
Interviewing3 min readAudio

Senior iOS interviews are about risk

The strongest candidates do not just answer the question. They show how they think about production risk, tradeoffs and recovery.

Pass interviews

A resume and profile review workspace for engineering career visibility.
Career growth3 min readAudio

Resume bullets for senior iOS engineers

How to turn mobile engineering work into evidence of scope, judgment and impact without exaggerating.

Get hired

A desk scene for preparing Swift concurrency interview answers.
Swift concurrency6 min readAudio

A modern Swift concurrency interview map

A senior interview map for async/await, actors, cancellation, task lifetime, Sendable and the bugs hidden around awaits.

Pass interviews

NewA shared coding screen turning implementation steps into visible interview evidence.
Interviews4 min readAudio

What interviewers score while you share your screen

The code is only one part of a live round. The interviewer is also recording how you frame, choose, verify and recover while the screen is shared.

Pass interviews

NewA mobile architecture boundary separating application and native runtime decisions.
Interviews4 min readAudio

React Native interviews happen at the boundary

The framework answer is only the surface. Senior judgment appears where JavaScript, native work and product constraints meet.

Pass interviews

NewA quality system showing several verification passes around a software change.
Interviews2 min readAudio

Test automation is not the senior SDET answer

The tool is not the decision. Senior test engineering begins with what failure costs, what evidence is trustworthy and who owns the response.

Pass interviews

Mobile architecture

The diagram is the entry fee. The decisions are the score. A worked iOS system design answer from the hiring side.
Mobile system design7 min read

iOS system design interview: a worked answer from the hiring side

The round is not scored on the diagram. It is scored on the decisions. A worked answer for an offline-capable messaging app on iOS, minute by minute, with the follow-ups interviewers use and how the Android answer differs.

Design systems

An A/B of four Swift 6.3.3 builds: normal -Onone and -O builds call swift_retain and swift_release, while the same builds with -assume-single-threaded call swift_nonatomic_retain and swift_nonatomic_release.
Swift concurrency8 min read

Swift 6 rejected the race. ARC stayed atomic.

Swift 6 can prove that some code is safe from data races. That does not mean reference counting suddenly becomes non-atomic.

Design systems

Callers A, B and C await one shared Task. Caller A is cancelled, but the shared Task is its own task and keeps running for B and C.
Swift concurrency5 min read

You cancelled the caller. Why is the shared Task still running?

Swift cancellation is cooperative. Cancelling the task that is waiting does not automatically cancel the separate task it is waiting on.

Design systems

Three separate layers: isolation (actor) answers who may access state, transfer (Sendable) whether a value can cross a boundary, lifetime accounting (ARC) how the object is kept alive.
Swift concurrency6 min read

An actor protects state. It does not own every retain and release.

Actor isolation is a concurrency guarantee. ARC is a lifetime mechanism. Treating one as a complete proof about the other is where the mental model starts to drift.

Design systems

Dark card in the salari.dev palette. Large serif text reads It works, then in copper, Now put it under load. Below, in small monospace: SwiftUI, Concurrency, Performance, State.
SwiftUI9 min read

Your SwiftUI App Works. Production Is Where It Starts Lying to You.

Three failures that appear after the happy path: stale results, slow "lazy" lists, and state ownership that no longer scales.

Design systems

Five labels with the same headline font in the same 120 point box at Accessibility 5: Run keeps its size, the longest is drawn at a tenth, with each measured height ratio beside it.
SwiftUI8 min read

What minimumScaleFactor trades away in SwiftUI

I ran into a typography inconsistency in a production SwiftUI interface, then reduced it to a reproducible case to understand what minimumScaleFactor was trading away.

Design systems

A focused workstation used to plan mobile architecture decisions.
Architecture5 min readAudio

Mobile system design is not backend system design

Why offline, device constraints, sync, app lifecycle and platform boundaries change the interview and the architecture.

Design systems

A system design planning scene for mobile interview practice.
Performance7 min readAudio

Why iOS apps feel slow even when the API is fast

A practical look at the client-side bottlenecks that make mobile apps feel slow after the backend has already done its job.

Design systems

A desk scene representing Swift concurrency interview preparation.
Swift concurrency7 min readAudio

Swift concurrency bugs that pass code review

Four Swift concurrency bugs that survive code review at good companies: actor reentrancy, leaked tasks, ignored cancellation, and the onAppear trap. With fixes.

Pass interviews

Architecture notes for staff-level technical leadership.
Architecture3 min readAudio

How to review a mobile architecture proposal

A practical review framework for mobile architecture decisions: constraints, reversibility, ownership, migration and production proof.

Lead teams

A mobile architecture planning setup for SwiftUI state decisions.
SwiftUI3 min readAudio

SwiftUI vs UIKit: architecture is state ownership

Why production SwiftUI architecture is less about folder names and more about ownership, identity, effects and boundaries.

Design systems

NewA protected product boundary separating allowed behavior from rejected behavior.
Architecture2 min readAudio

Security requirements that cannot be tested are not finished

A security requirement becomes useful when a team can observe the behavior, test the boundary and know who owns failure.

Design systems

Related resources

FAQ

About the writing

What is the Salari writing section?

Field notes on interviewing, mobile architecture, staff engineering, independent consulting and AI-era engineering, the working notes behind the books.

Who writes these articles?

Mike Salari, a Staff Mobile Engineer and Mobile Architect, drawing on real production work and 500+ technical interviews from the hiring side.

Are the articles iOS-specific?

Many examples are iOS, but topics like system design, code review, staff scope and positioning apply across mobile and senior software roles.

How is the writing organized?

Into sections: Interviews, Mobile architecture, Staff engineering, Independent consulting and AI-era engineering.

Do the articles connect to the books?

Yes. Most books start here as field notes, then grow into chapters once an idea proves itself in real interviews, reviews and production systems.

What is mobile system design?

Designing the whole system around a mobile app: offline behavior, sync, caching, backend contracts, performance and failure modes, not just the client code.

How is staff engineering different from senior engineering?

Staff is about scope, leverage and decision quality, making other engineers more effective and owning ambiguous problems, not just handling harder tickets.

Is the writing free to read?

Yes. Every article is free.