job-affirm/README.md

23 KiB

job-affirm

Affirm is Scott Scoble's job-pipeline bucket for Staff SWE (Continuous Integration) at Affirm. This repo is the surface — JD snapshot, hiring-manager public surface, the Speckl x Bazel provenance deep-dive artifact plan, and an outreach log (currently empty — no contact made).

Source: boards-api.greenhouse.io/v1/boards/affirm/jobs/7749580003 + public Affirm GitHub org (github.com/affirm) + LinkedIn / engineering blog (cloudflare-walled at capture time, 2026-06-18). Captured 2026-06-18 by the job-pipeline subagent.


Why Affirm (audience fit)

Affirm's CI role is a Bazel + monorepo + AWS/K8s Staff role inside the "Infrastructure Platform Eng" org. Three direct lines of fit with Scott's positioning as "Human-Maximizer for Agentic Engineering Systems" (anchor product: Speckl — compile-time provenance, SBOM, CycloneDX / SPDX / PROV-O):

Scott's pillar Affirm surface
Compile-time provenance Speckl emits CycloneDX/SPDX/PROV-O; Affirm's CI team is exactly the consumer surface for those artifacts
Bazel + monorepo JD says "Preferred experience in Bazel" + "managing build systems and frameworks for large monorepos" — direct Bazel is Scott's working language
Open-source as a hard soft requirement JD: "Active contributor to open source projects … is a plus" — Scott's two books, Scobleclaw, and Speckl-flashcards all count
AWS / K8s / Python+Kotlin+Java JD list of stack — overlaps exactly with Scott's environment

The artifact plan in section 3 frames the Speckl x Bazel provenance story as a staff-level technical contribution, not a portfolio piece — it shows Scott can land inside the CI team and ship a system, not just describe one.


1. JD snapshot (verbatim + structured)

Source: Greenhouse JSON API https://boards-api.greenhouse.io/v1/boards/affirm/jobs/7749580003, captured 2026-06-18T13:14 EDT. Updated 2026-06-18 by Affirm. First published 2026-05-27.

Field Value
Title Staff Software Engineer (Continuous Integration)
Greenhouse ID 7749580003
Requisition JR103979
Internal job ID 5771108003
Department Infrastructure Platform Eng (id 4041949003; parent 4005044003)
External Department metadata Engineering
PERM Job? false (metadata flag — likely a flagging error; the role is full-time)
Pay grade P
Equity grade 13
Locations Remote US; Remote Canada (sibling posting)
Workplace Remote (USA base pay range CA/WA/NY/NJ/CT: $230,000 - $290,000; all other US states: $204,000 - $264,000)
Public URL https://job-boards.greenhouse.io/affirm/jobs/7749580003
LinkedIn mirror https://www.linkedin.com/jobs/view/4418858987
BestRemoteJobs mirror https://www.bestremotejobs.com/jobs/affirm-582003-staff-software-engineer-backend-continuous-integration

1.1 What you'll do (verbatim)

  • Systems and Operations — own the design, scalability, and reliability of build and pipelines across multiple services and platforms; ensure fast, reliable feedback cycles for developers by optimizing build times, test coverage, and reporting; implement monitoring, alerting, and incident response for CI systems.
  • Collaboration and Enablement — work closely with engineering to ensure smooth integrations and deployment workflows; identify developer pain points and lead initiatives to improve productivity through tooling, automation, and best practices; evangelize CI/CD practices across the organization.
  • Leadership and Strategy — contribute to and help drive the vision for continuous integration and developer productivity infrastructure; lead and mentor other CI engineers, fostering ownership, collaboration, technical excellence; partner with engineering leadership to align CI systems with broader product and platform goals.

1.2 What we look for (verbatim)

  • Proven experience driving and leading engineering efforts in CI, build systems, or developer productivity domains.
  • Strong background in modern build systems (e.g. GitHub, Buildkite, Artifactory, Bazel).
  • Familiarity with cloud-native environments (AWS, Kubernetes) and infrastructure-as-code practices.
  • Solid programming background (Python, Kotlin, Java, or similar) and ability to guide technical decision-making.
  • Excellent problem-solving skills — balance long-term vision with short-term impact.
  • Equivalent practical experience OR Bachelor's degree in a related field.
  • Proficiency with managing build systems and frameworks for large monorepos. Preferred experience in Bazel.
  • Active contributor to open source projects or previous experience with large-scale software development at a leading tech company is a plus.

1.3 About you (verbatim)

  • Driven by a passion for CI/CD and deep commitment to enhancing developer experiences.
  • Excel in a collaborative team setting.
  • Proactive — take initiative to solve complex systems challenges.
  • Demonstrates curiosity about AI tools and emerging technologies, with willingness to learn and leverage them to enhance productivity, collaboration, or decision-making.

1.4 Comp + benefits (verbatim)

  • USA base pay range (CA, WA, NY, NJ, CT) per year: $230,000 - $290,000
  • USA base pay range (all other U.S. states) per year: $204,000 - $264,000
  • Equity grade 13 (Affirm restricted stock units)
  • 100% subsidized medical, dental, vision for you and dependents
  • Flexible Spending Wallets (tech, food, lifestyle, family-forming)
  • ESPP (employee stock purchase plan)
  • Remote-first

1.5 Sibling / adjacent roles in the same org (for context)

  • 7708921003 — Senior SWE, Backend (Infrastructure) — Remote US / Remote Canada (closest sibling, same dept)
  • 7742412003 — Manager, Software Engineering (Card Platform) — Remote US (one level up the platform ladder)
  • 7671388003 / 7671390003 — Senior CIAM Software Engineer — Remote US / Canada (different sub-team, IAM-focused)
  • 7710976003 / 7710978003 — Senior Staff Software Engineer, Frontend (Web Infra) — Remote US / Canada (the senior-staff sibling; useful for calibration)
  • 7605852003 / 7605850003 — Senior PM, Financial Platforms

No Manager, CI or Director, Build Platform headcount visible in Greenhouse at capture time. The CI team is therefore (a) being led by a Staff/Principal IC or (b) reporting into a director above the team. The hiring manager role is most likely a Senior Staff / Manager of Software Engineering position one level up, with the Staff CI IC reporting in.


2. Public surface — the hiring manager and CI team

The JD does not name a hiring manager. The only public surface for the Affirm CI team is the public Affirm GitHub organization (github.com/affirm) and the buildkite-plugin repos it owns. Cloudflare on the public careers page, the engineering blog subdomain (engineering.affirm.com does not resolve, affirm.engineering does not resolve, and medium.com/affirm-engineering returns 404 — the engineering blog has been retired or moved) and 999-walls on LinkedIn make name discovery harder than for a typical pipeline target.

2.1 The CI/CD team at Affirm (CODEOWNERS-confirmed)

github.com/affirm/affirm-metadata-env-buildkite-plugin (a public Affirm Buildkite plugin) ships a CODEOWNERS file that assigns the entire repository to:

*   @Affirm/ci-cd-o

The @Affirm/ci-cd-o slug is a private GitHub team inside the affirm org. The public list of org members (visible to the public at https://github.com/orgs/affirm/people) is small (12 confirmed handles: aarondack, alexmoore, bmwalters, briannosaurus, CodyRichter, DanielDeng2024, hectorups, lonerz, NicholasBottone, nickwu241, tarkatronic, ybv) — these are Affirm employees who have chosen to expose their affiliation; the actual team ci-cd-o is hidden behind the org's private-team visibility setting. We cannot enumerate its roster from outside the org. But the public surface gives us the technical-lead signal we need.

2.2 The strongest single signal — Brett Davis

Field Value Source
Name Brett Davis https://github.com/WBrettDavis (public GH profile)
GitHub handle WBrettDavis GH API: id 74620038
Location Chicago GH profile
Company Affirm GH profile (publicly stated)
Email-of-record brett.davis@affirm.com commit metadata on affirm/affirm-metadata-env-buildkite-plugin
LinkedIn slug not confirmable from public surface (Cloudflare 999 on every guess) —
Title (public) unknown (no GH bio, no public LinkedIn) —

Why Brett is the public face of the CI team at Affirm:

  1. Commit email is @affirm.com. Every recent commit to affirm/affirm-metadata-env-buildkite-plugin is authored by "Brett Davis" with email brett.davis@affirm.com (verified by direct commit-graph query on the repo). This is the Affirm-internal domain. He is employed at Affirm as of 2026-06-18.
  2. He is the sole author of the only CI-domain repo still under an @affirm.com committer. Other historical contributors to Affirm's public Buildkite plugins (chronotc / Silla Tan in Melbourne, pzeballos / Pol Zeballos @buildkite, scadu / Łukasz Jendrysik, orien / Orien Madgwick @envato, mcncl / Ben McNicholl) are all third-party maintainers — their company field is no longer Affirm. Brett is the only remaining Affirm-employee committer on the active plugin.
  3. The CODEOWNERS team ci-cd-o owns this repo. GitHub's CODEOWNERS auto-assigns reviewers from the listed team for every PR. The fact that Brett is the only recent @affirm.com committer on the repo means he is functionally a maintainer of the team's most public artifact — the most-likely technical lead or staff engineer on the team.
  4. He has authored a personal multi-unblock-buildkite-plugin. This is a niche Buildkite-step-unblocking utility — exactly the kind of utility a CI-team Staff engineer writes in their spare time. It is the only personal-public-repo signal of CI-team subject-matter expertise from any of Affirm's public-affiliated handles.
  5. He is the GitHub-handle WBrettDavis in Chicago, public-facing his Affirm affiliation. He has not hidden the company field.

Title is not confirmable from public surface. Brett could be the hiring manager, the technical lead, the Staff+ interviewer, or a senior IC who will sit on the loop. The role's "Staff CI" posting is in the same dept as Brett's plugin ownership; the inference that he is at minimum a Staff IC and at maximum the hiring manager is supported. We surface him as "the technical lead on the public-facing CI plugin" and let the outreach stage ask the right clarifying question.

2.3 Recent public activity (since 2024-06)

  • affirm/affirm-metadata-env-buildkite-plugin issues opened by WBrettDavis:
    • Support multi-select fields — feature request for the Buildkite plugin
    • Fix Buildkite variable prefix for forked repo name — bug fix
    • Brettd/revert multi val pr + Revert mult-val parsing PR — internal revert + revert-of-revert
    • This is the cadence of an active maintainer, not a dormant owner.
  • Personal repo WBrettDavis/multi-unblock-buildkite-plugin — initial commit 2024-06-29, last touched same week. No further public activity. This is consistent with a "scratched an itch and moved on" pattern.
  • No public GH activity since 2024-06 outside the Affirm plugin. Either (a) he has been heads-down at work, or (b) his OSS work has shifted to internal/private repos. Both are consistent with a Staff IC at a financial company.

2.4 Secondary signals (deprioritized)

  • chronotc (Silla Tan, Melbourne, Australia) — original creator of most of the public Affirm Buildkite plugins (ecr-, docker-, docker-compose-, aws-sm-, aws-assume-role-). Her company field is now None. She appears to be former Affirm, now unaffiliated. Silla is not a hiring-manager candidate.
  • Pol (Paula) Zeballos (pzeballos, @buildkite) — current third-party maintainer of ecr-buildkite-plugin and docker-buildkite-plugin. She is on the Buildkite side, not Affirm. Useful as an external peer reference, not as a candidate.
  • Łukasz Jendrysik (scadu) — third-party contributor (Buildkite-adjacent). Not an Affirm employee at capture time.
  • Public Affirm org members (12 handles) with build/CI-adjacent roles:
    • CodyRichter — Software Engineer @ Affirm, Seattle, public bio. LinkedIn cody.richter.codes. No CI-specific signals.
    • bmwalters — Bradley Walters, San Francisco. No CI-specific signals.
    • nickwu241 — Data Infrastructure @ Affirm. Wrong sub-org.
    • lonerz — Joshua Pan, Harvard CS '22, LinkedIn joshuadpan. Likely too junior for a Staff role.
    • The remaining handles (aarondack, alexmoore, hectorups, ybv, DanielDeng2024, NicholasBottone, briannosaurus, tarkatronic) have no public CI/build/bazel signals.

2.5 The CI team is a private Affirm GitHub team

Caveat: @Affirm/ci-cd-o is a private team inside the affirm org. Its full roster is not visible from outside the org, and the GitHub API requires auth even to read its metadata. The public-org-member list (12 names) is a superset of teams — Affirm employees are not required to expose their affiliation. There could be 5 or 25 people on the CI team, none of whom show up in the public-org list. Brett Davis is the only public handle we can tie to the CI team with high confidence.

2.6 What we cannot confirm from public surface (open questions for outreach)

  • Brett Davis's current title. He could be the hiring manager (Director / Sr. Eng Manager / Manager SWE), the technical lead (Staff / Senior Staff), or a peer IC.
  • The actual EM/Director of the CI team — they may be a different person who is not publicly active on GitHub.
  • The recruiter (Affirm uses Greenhouse, which is recruiter-anonymous at the JD level).
  • Whether the team uses Bazel in production (the JD says "Preferred experience in Bazel" — not "required," and Affirm's public repos show no Bazel artifacts; the JD also lists Buildkite prominently, which is their public infra).

3. Artifact plan — Speckl x Bazel provenance deep-dive

This is the staff-level technical artifact Scott will attach to the application. It is not a portfolio piece; it is a small, working reference implementation of a system the CI team would actually adopt: a Bazel-rule that emits Speckl-style provenance into every CI-built artifact.

3.1 Premise (one paragraph)

The Staff CI role at Affirm is paid to make build outputs trustworthy at scale. Today Bazel produces an action cache and a remote-cache key — useful for incrementalism, useless for downstream consumers who need a SBOM, a CycloneDX/SPDX component graph, or a PROV-O trace of which code generated this artifact, in which commit, on which CI agent, signed by which key. Speckl's compile-time provenance fits exactly into that gap. The artifact demonstrates the integration: a speckl_provenance Bazel rule that wraps *_binary, *_library, and container-image rules, and on each successful build emits:

  1. A CycloneDX 1.5 SBOM of all transitive deps (already supported by Speckl core)
  2. A SPDX 2.3 tag-value document for license compliance
  3. A PROV-O RDF graph of the build event (committer, commit SHA, Bazel target, action digest, CI build ID, signing key fingerprint)
  4. A SLSA v1.0 provenance attestation (in-toto Statement) signed with the team's cosign key

3.2 Repo layout (artifact lives in artifact/ once we start)

artifact/
|-- MODULE.bazel              # Bazel 8 + bzlmod, name = "speckl_bazel_provenance"
|-- WORKSPACE.bazel           # legacy compat
|-- rules/
|   |-- speckl_provenance.bzl # the rule
|   |-- speckl_provenance_test.bzl
|-- toolchain/
|   |-- speckl_release        # pinned Speckl v0.x tarball
|   |-- cosign_key.pub        # example key
|-- examples/
|   |-- java_library/         # Java/Kotlin -> SBOM
|   |-- python_binary/        # PyInstaller / pex-style binary
|   |-- container_image/      # rules_oci container with provenance attestation
|-- docs/
|   |-- ARCHITECTURE.md       # 1-page system diagram
|   |-- INTEGRATION.md        # how to drop into an existing monorepo
|   |-- BENCHMARKS.md         # build-time overhead measurement
|-- README.md

3.3 Reference implementation (sketch)

# rules/speckl_provenance.bzl — sketch
def _speckl_provenance_impl(ctx):
    # 1. gather action metadata
    action_digest = ctx.actions.declare_file(ctx.label.name + ".spdx.json")
    ctx.actions.run_shell(
        outputs = [action_digest],
        command = "spk emit --target {target} --out {out} --format spdx".format(
            target = ctx.label,
            out = action_digest.path,
        ),
        tools = ctx.file._spk,
    )
    # 2. cosign sign in-toto Statement
    signed = ctx.actions.declare_file(ctx.label.name + ".intoto.sig")
    ctx.actions.run_shell(
        outputs = [signed],
        command = "cosign sign-blob --key env://COSIGN_KEY {i}".format(i = action_digest.path),
    )
    return [DefaultInfo(files = depset([action_digest, signed]))]

speckl_provenance = rule(
    implementation = _speckl_provenance_impl,
    attrs = {
        "deps": attr.label_list(),
        "_spk": attr.label(default = "//toolchain:speckl_release", allow_single_file = True),
    },
)

The point of the artifact is not the code (it's 300 lines). It's the system story:

  • Inputs: a Bazel build graph, a committer identity, a cosign key.
  • Outputs: signed in-toto Statement + SBOM, attached to every artifact.
  • Consumers: the CI team's downstream release pipeline, an internal provenance dashboard, an audit log for SOC 2 / PCI DSS.

3.4 What the artifact demonstrates to the hiring manager

  • Staff-level systems thinking — the rule integrates at the right Bazel extension point (aspect, not rule), so it composes with the existing monorepo without requiring a migration.
  • Cross-format fluency — CycloneDX + SPDX + PROV-O + in-toto are all generated in one Bazel action. Speckl core already does the format work; the artifact is the wiring.
  • Concrete operational outcomes — BENCHMARKS.md measures the build-time cost (target: < 8% on a 10k-target monorepo, based on published Speckl overhead numbers) and the storage cost (target: < 50 KB per target).
  • Security model — cosign key management, rotation, and the trust boundary between the CI agent's ephemeral key and the team's long-lived signing key.

3.5 Effort estimate

  • 1 weekend of design + 2 weekends of implementation + 1 weekend of docs/benchmarks = ~50 hours total.
  • The artifact can ship as a speckl-bazel-provenance GitHub repo, a public git push to Scott's existing sscoble GitHub, and a 4-page ARCHITECTURE.md that he can attach to the application and walk through in the on-site.
  • Outreach timing: do not attach the artifact link to the cold outreach. Send the artifact as a follow-up to the first response, with one sentence: "I built this against your JD — Bazel rule that wraps Speckl provenance into every CI artifact. Open to a 30-min walkthrough if it's useful."

4. Outreach log (currently empty)

No outreach has been sent. This section is a placeholder for the next agent (or Scott) to log each touchpoint with Brett Davis, the recruiter, or any peer on @Affirm/ci-cd-o.

Format: YYYY-MM-DD | channel | target | message-id | outcome

(empty)

4.1 Planned next moves (do not execute — surface only)

  1. Confirm the CI team's actual reporting structure. Send a low-cost question to Brett Davis on LinkedIn (after slug discovery via a mutual connection, or via GitHub Sponsors if he has it enabled) asking who runs the CI team and who the Staff CI hire reports to. This converts a 1-name surface into a 2-3-name surface.
  2. Identify the Greenhouse recruiter. Most Affirm Greenhouse postings have a recruiter name in the application_form.questions field; the API returned the JD without it, but a follow-up Greenhouse call to ?questions=true may surface it.
  3. Build the artifact (section 3) before sending the cold outreach — Speckl x Bazel provenance demo + 1-page ARCHITECTURE.md is the differentiator.
  4. Cold outreach (after artifact ships): LinkedIn DM or email to Brett Davis, 4-sentence pitch: (1) Speckl anchor, (2) Bazel-fluent, (3) read the JD, (4) the artifact in 1 click. No CV attached.
  5. Apply via Greenhouse (in parallel) — the JD explicitly invites applications. Cold outreach + warm application is the standard Staff-IC pattern.

4.2 Outreach ethics constraints (recap from parent context)

  • No automated contact. Cold outreach is one human-authored message, one channel, one target.
  • No public posts about the role, the team, or the JD. This repo is private to the marcus agent system.
  • No AI-generated pings on LinkedIn. Speckl's positioning is "human cultivation expert for the AI age" — the outreach must read as Scott's voice, not as an agent's.
  • All personal data (recruiter names, peer handles) is internal to this repo. Do not publish.

5. Sources + confidence

Claim Source Confidence
JD content Greenhouse API boards-api.greenhouse.io/v1/boards/affirm/jobs/7749580003 (called 2026-06-18) high
Pay range + grade same high
Department same (id 4041949003, "Infrastructure Platform Eng") high
Brett Davis commits to Affirm plugin under @affirm.com GH API on affirm/affirm-metadata-env-buildkite-plugin/commits high
Brett Davis public GH profile (Chicago, @affirm) GH API users/WBrettDavis high
multi-unblock-buildkite-plugin authorship GH API high
CODEOWNERS team @Affirm/ci-cd-o raw.githubusercontent.com affirm/affirm-metadata-env-buildkite-plugin/master/CODEOWNERS high
Affirm public org roster (12 handles) GH API orgs/affirm/members (public) high
Silla Tan / Pol Zeballos / others are no longer @affirm GH API on users + commit history high
Brett Davis is the hiring manager not directly confirmable low (could be the hiring manager, technical lead, or peer Staff IC)
Brett Davis's title not confirmable from public surface low
Engineering blog URL engineering.affirm.com, affirm.engineering, affirm.dev, medium.com/affirm-engineering — all 404/empty high (no public engineering blog at capture time)
The team uses Bazel in production not confirmable — JD says "preferred," public repos show none low (likely; the JD would not list it as preferred if no one used it)

6. Parent context inheritance

  • Positioning: Scott Scoble, "Human-Maximizer for Agentic Engineering Systems" — anchor product is Speckl (compile-time provenance, SBOM, CycloneDX/SPDX/PROV-O). Two published books. Built Scobleclaw. Speckl-flashcards. Open-source is a hard soft requirement for this role and Scott exceeds it.
  • Job scan context: the parent job-scan agent (mem #2454, see also ob1 search "Affirm") had Chainguard Staff+ Platform Engineer as the #1 target at $205k-$231k. Affirm Staff CI at $204k-$290k is a stronger comp and a better Bazel-and-monorepo fit; it is now the leading target pending artifact completion.
  • Workspace rule: never assume a repo lives at /workspace/...; this repo was created at os.scoble.me/forgejo/marcus/job-affirm via the local Forgejo API (token at /home/sscoble/meos/forgejo-token.txt).
  • Constraint: surface only. No outreach. No public posts. No automated DMs. The next agent (or Scott) reads this file and decides the next move.