← Back to history

Pipeline run

501c3e84-ff2d-4f8c-9561-e31bbafd9dd8

Pipeline LLM cost (USD)
API 1: $0.0034 API 2: $0.0000 API 3: $0.0000 Total: $0.0034
Status: jd_deconstruction_v4_done Created: 2026-08-11T16:55:27.933875Z Updated: 2026-08-12T16:11:58.529208Z Run duration: 19579 ms
Flow v4 catalog deconstruction skill_library_v4

1 LLM mention extraction + deterministic catalog sweep

2 Six-layer resolution cascade (exact → alias → fuzzy → embedding → judge → AI-prediction lane)

3 Table-lookup layering: dim_members → role_dim_map tiers, served verbatim

Role Chosen role & resolution

Android Developer

in_db alias family · native-mobile-developer

slug: android-developer · role_id: d02496c2-ea13-59aa-b699-d9406e084227 · catalog: skill_library_v4 (tiers served verbatim from role_dim_map)

We are seeking a Senior Android Developer for our consumer app team, requiring over 5 years of native Android development experience. The role focuses on building features using Kotlin and Jetpack Compose, while ensuring app performance and integrating REST APIs with Retrofit. Distinctive requirements include experience with MVVM architecture and Play Store release management. The candidate will also be responsible for writing tests and managing background jobs using WorkManager.

Job description

Senior Android Developer

We are hiring a Senior Android Developer for our consumer app team.

Responsibilities:
- Build and ship features in Kotlin with Jetpack Compose
- Own app performance: cold start, ANR rate, jank and memory
- Integrate REST APIs with Retrofit and manage async work with Kotlin Coroutines
- Write unit and UI tests (JUnit, Espresso) and keep coverage high
- Ship through our CI/CD pipeline and monitor releases with Crashlytics

Requirements:
- 5+ years of native Android development
- Kotlin, Jetpack Compose, Kotlin Coroutines
- MVVM architecture, Hilt or Dagger dependency injection
- Room for local persistence, WorkManager for background jobs
- Play Store release management experience

Skills from this JD

L0–L3 tiers come verbatim from the role's role_dim_map; violet AI GENERATED chips are AI-prediction-lane skills pending review in the queue.

L0 · Anchor 6 skill(s)
Kotlin Programming Languages Kotlin is the language of the platform and the strongest single screening signal in this role.
Jetpack Compose Native Mobile UI Frameworks the second half of the role's identity.
Kotlin Coroutines Android Platform & App Components remove the Android platform and there is no role left.
Hilt Android Platform & App Components remove the Android platform and there is no role left.
Dagger Android Platform & App Components remove the Android platform and there is no role left.
WorkManager Android Platform & App Components remove the Android platform and there is no role left.
L1 · Primary 4 skill(s)
Retrofit Mobile Data & Connectivity daily output is produced against it.
Room Mobile Data & Connectivity daily output is produced against it.
ANR Diagnosis Mobile Performance & Device Constraints Rule 2 with a caveat: the role owns app performance outright, which rules out L2.
Jank and Frame Timing Mobile Performance & Device Constraints Rule 2 with a caveat: the role owns app performance outright, which rules out L2.
L2 · Environment 6 skill(s)
REST API Design & Protocols the role reads and depends on the contract but does not own it.
JUnit Testing Frameworks Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de
Espresso Testing Frameworks Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de
Firebase Crashlytics Observability & Monitoring the role consumes crash, ANR and vitals telemetry daily to decide what to fix and whether to halt a rollout, but does not own the observabil
MVVM Software Design & Architecture layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary
Dependency Injection Software Design & Architecture layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary
Secondary nice-to-have · not a drop-order layer
CI/CD not_in_catalog

This skill is in Secondary as the JD says "Ship through our CI/CD pipeline and monitor releases" - it isn't in this role's skill catalog yet, so it's tracked for review.

Play Framework out_of_role_scope

This skill is in Secondary as the JD says "- Play Store release management experience" - it's a recognized skill, but it sits outside the Android Developer role's core dimensions.

Play Store not_in_catalog

This skill is in Secondary as the JD says "Play Store release management experience" - it isn't in this role's skill catalog yet, so it's tracked for review.

Consider adding canon exemplars the JD missed

Android SDK — Android Platform & App Components (L0)

Android Views — Native Mobile UI Frameworks (L0)

Java — Programming Languages (L0)

Gradle — Build & Dependency Tools (L1)

Google Play Console — Mobile App Distribution & Release Engineering (L1)

OkHttp — Mobile Data & Connectivity (L1)

Unmapped not resolved, not classified — quarantined for review
CI/CDPlay Store

Library artifacts (this run)

No artifact rows for this run.
API 1 — extract-from-jd click to toggle
{
  "catalog": "v4",
  "consider_adding": [
    {
      "dimension": "Android Platform \u0026 App Components",
      "reason": "In the role canon\u0027s Android Platform \u0026 App Components - adding it narrows the candidate pool.",
      "skill": "Android SDK",
      "tier": "L0"
    },
    {
      "dimension": "Native Mobile UI Frameworks",
      "reason": "In the role canon\u0027s Native Mobile UI Frameworks - adding it narrows the candidate pool.",
      "skill": "Android Views",
      "tier": "L0"
    },
    {
      "dimension": "Programming Languages",
      "reason": "In the role canon\u0027s Programming Languages - adding it narrows the candidate pool.",
      "skill": "Java",
      "tier": "L0"
    },
    {
      "dimension": "Build \u0026 Dependency Tools",
      "reason": "In the role canon\u0027s Build \u0026 Dependency Tools - adding it narrows the candidate pool.",
      "skill": "Gradle",
      "tier": "L1"
    },
    {
      "dimension": "Mobile App Distribution \u0026 Release Engineering",
      "reason": "In the role canon\u0027s Mobile App Distribution \u0026 Release Engineering - adding it narrows the candidate pool.",
      "skill": "Google Play Console",
      "tier": "L1"
    },
    {
      "dimension": "Mobile Data \u0026 Connectivity",
      "reason": "In the role canon\u0027s Mobile Data \u0026 Connectivity - adding it narrows the candidate pool.",
      "skill": "OkHttp",
      "tier": "L1"
    }
  ],
  "final_skills": [
    {
      "dimension": {
        "display_name": "Programming Languages",
        "slug": "programming-languages"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "Kotlin is the language of the platform and the strongest single screening signal in this role.",
      "skill_id": "ed960096-a55a-59dd-a2be-e5970f28dbc7",
      "skill_name": "Kotlin"
    },
    {
      "dimension": {
        "display_name": "Native Mobile UI Frameworks",
        "slug": "native-mobile-ui-frameworks"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "the second half of the role\u0027s identity.",
      "skill_id": "15b38808-4589-51cf-8b9c-b1bbc355cb63",
      "skill_name": "Jetpack Compose"
    },
    {
      "dimension": {
        "display_name": "API Design \u0026 Protocols",
        "slug": "api-design-protocols"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "the role reads and depends on the contract but does not own it.",
      "skill_id": "b22d242c-517d-5b7d-95b2-88716b17806d",
      "skill_name": "REST"
    },
    {
      "dimension": {
        "display_name": "Mobile Data \u0026 Connectivity",
        "slug": "mobile-data-connectivity"
      },
      "is_primary": true,
      "layer": "L1",
      "layer_source": "catalog_v4",
      "rationale": "daily output is produced against it.",
      "skill_id": "b116e4c4-6261-5fda-9bc8-50afdde517b6",
      "skill_name": "Retrofit"
    },
    {
      "dimension": {
        "display_name": "Android Platform \u0026 App Components",
        "slug": "android-platform-app-components"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "remove the Android platform and there is no role left.",
      "skill_id": "ff9b250e-e0e0-5105-972f-679629b046a0",
      "skill_name": "Kotlin Coroutines"
    },
    {
      "dimension": {
        "display_name": "Testing Frameworks",
        "slug": "testing-frameworks"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de",
      "skill_id": "f17c5e6a-09d4-5965-91fb-fd49fcc78264",
      "skill_name": "JUnit"
    },
    {
      "dimension": {
        "display_name": "Testing Frameworks",
        "slug": "testing-frameworks"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de",
      "skill_id": "544855fb-3552-540d-ba08-579b7a5a4055",
      "skill_name": "Espresso"
    },
    {
      "dimension": {
        "display_name": "Observability \u0026 Monitoring",
        "slug": "observability-monitoring"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "the role consumes crash, ANR and vitals telemetry daily to decide what to fix and whether to halt a rollout, but does not own the observabil",
      "skill_id": "683fe85d-10f9-5715-a60e-34404f030f99",
      "skill_name": "Firebase Crashlytics"
    },
    {
      "dimension": {
        "display_name": "Software Design \u0026 Architecture",
        "slug": "software-design-architecture"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary ",
      "skill_id": "8a227132-6025-5ad5-a992-4fef056dadb1",
      "skill_name": "MVVM"
    },
    {
      "dimension": {
        "display_name": "Android Platform \u0026 App Components",
        "slug": "android-platform-app-components"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "remove the Android platform and there is no role left.",
      "skill_id": "fe09b75d-1321-5684-b485-3918d41a055a",
      "skill_name": "Hilt"
    },
    {
      "dimension": {
        "display_name": "Android Platform \u0026 App Components",
        "slug": "android-platform-app-components"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "remove the Android platform and there is no role left.",
      "skill_id": "8ec949ac-40d8-571e-91cd-36d51be20cc3",
      "skill_name": "Dagger"
    },
    {
      "dimension": {
        "display_name": "Mobile Data \u0026 Connectivity",
        "slug": "mobile-data-connectivity"
      },
      "is_primary": true,
      "layer": "L1",
      "layer_source": "catalog_v4",
      "rationale": "daily output is produced against it.",
      "skill_id": "bdeb72d4-bae8-5fd1-bb2c-7f9b69143ea0",
      "skill_name": "Room"
    },
    {
      "dimension": {
        "display_name": "Android Platform \u0026 App Components",
        "slug": "android-platform-app-components"
      },
      "is_primary": true,
      "layer": "L0",
      "layer_source": "catalog_v4",
      "rationale": "remove the Android platform and there is no role left.",
      "skill_id": "682ea864-aac7-5d6e-bb79-8aeada3cf3ef",
      "skill_name": "WorkManager"
    },
    {
      "dimension": {
        "display_name": "Mobile Performance \u0026 Device Constraints",
        "slug": "mobile-performance-device-constraints"
      },
      "is_primary": true,
      "layer": "L1",
      "layer_source": "catalog_v4",
      "rationale": "Rule 2 with a caveat: the role owns app performance outright, which rules out L2.",
      "skill_id": "6196e5e4-ae5d-5d45-b714-d30c7f1a4ff3",
      "skill_name": "ANR Diagnosis"
    },
    {
      "dimension": {
        "display_name": "Mobile Performance \u0026 Device Constraints",
        "slug": "mobile-performance-device-constraints"
      },
      "is_primary": true,
      "layer": "L1",
      "layer_source": "catalog_v4",
      "rationale": "Rule 2 with a caveat: the role owns app performance outright, which rules out L2.",
      "skill_id": "4be61ebc-4042-526b-9c91-cd4194e39e18",
      "skill_name": "Jank and Frame Timing"
    },
    {
      "dimension": {
        "display_name": "Software Design \u0026 Architecture",
        "slug": "software-design-architecture"
      },
      "is_primary": false,
      "layer": "L2",
      "layer_source": "catalog_v4",
      "rationale": "layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary ",
      "skill_id": "8be2ba05-3b96-5f38-a434-2513607fe72b",
      "skill_name": "Dependency Injection"
    }
  ],
  "history_run_id": null,
  "jd_parameters": {
    "certifications": [],
    "clientDetails": null,
    "company": null,
    "companySize": null,
    "ctc": {
      "currency": null,
      "max": null,
      "min": null,
      "period": null,
      "raw": null
    },
    "educationRequirements": [],
    "experience": {
      "max": null,
      "min": 5,
      "raw": "5+ years of native Android development"
    },
    "industryDomain": "Software \u0026 SaaS Products",
    "knockouts": {
      "certifications": [],
      "ctc": {
        "currency": null,
        "max": null,
        "min": null
      },
      "educationRequirements": [],
      "experience": {
        "max": null,
        "min": 5
      },
      "location": [],
      "noticePeriod": null
    },
    "locations": [],
    "noticePeriod": null,
    "openToRelocate": false,
    "role": "Senior Android Developer",
    "roleSynonyms": [
      "Android Developer",
      "Mobile Developer",
      "Kotlin Developer"
    ]
  },
  "jd_summary": "We are seeking a Senior Android Developer for our consumer app team, requiring over 5 years of native Android development experience. The role focuses on building features using Kotlin and Jetpack Compose, while ensuring app performance and integrating REST APIs with Retrofit. Distinctive requirements include experience with MVVM architecture and Play Store release management. The candidate will also be responsible for writing tests and managing background jobs using WorkManager.",
  "layer_conflicts": [],
  "pipeline": "v4",
  "rejected": false,
  "rejection_code": null,
  "rejection_reason": null,
  "role": {
    "canonical_name": "Android Developer",
    "family": "native-mobile-developer",
    "match_method": "alias",
    "resolution": "in_db",
    "role_id": "d02496c2-ea13-59aa-b699-d9406e084227",
    "similarity": null,
    "slug": "android-developer"
  },
  "run_id": "jdv4-774b4fa7feff",
  "secondary_meta": [
    {
      "audit_reasoning": "This skill is in Secondary as the JD says \"Ship through our CI/CD pipeline and monitor releases\" - it isn\u0027t in this role\u0027s skill catalog yet, so it\u0027s tracked for review.",
      "jd_quote": "Ship through our CI/CD pipeline and monitor releases",
      "provenance": "verb-backed",
      "reason_code": "not_in_catalog",
      "skill": "CI/CD"
    },
    {
      "audit_reasoning": "This skill is in Secondary as the JD says \"- Play Store release management experience\" - it\u0027s a recognized skill, but it sits outside the Android Developer role\u0027s core dimensions.",
      "jd_quote": "- Play Store release management experience",
      "provenance": "listed",
      "reason_code": "out_of_role_scope",
      "skill": "Play Framework"
    },
    {
      "audit_reasoning": "This skill is in Secondary as the JD says \"Play Store release management experience\" - it isn\u0027t in this role\u0027s skill catalog yet, so it\u0027s tracked for review.",
      "jd_quote": "Play Store release management experience",
      "provenance": "listed",
      "reason_code": "not_in_catalog",
      "skill": "Play Store"
    }
  ],
  "secondary_skills": [
    "CI/CD",
    "Play Framework",
    "Play Store"
  ],
  "skill_layers": [
    {
      "label": "Anchor",
      "layer": "L0",
      "skills": [
        {
          "dimension": {
            "display_name": "Programming Languages",
            "slug": "programming-languages"
          },
          "name": "Kotlin",
          "rationale": "Kotlin is the language of the platform and the strongest single screening signal in this role."
        },
        {
          "dimension": {
            "display_name": "Native Mobile UI Frameworks",
            "slug": "native-mobile-ui-frameworks"
          },
          "name": "Jetpack Compose",
          "rationale": "the second half of the role\u0027s identity."
        },
        {
          "dimension": {
            "display_name": "Android Platform \u0026 App Components",
            "slug": "android-platform-app-components"
          },
          "name": "Kotlin Coroutines",
          "rationale": "remove the Android platform and there is no role left."
        },
        {
          "dimension": {
            "display_name": "Android Platform \u0026 App Components",
            "slug": "android-platform-app-components"
          },
          "name": "Hilt",
          "rationale": "remove the Android platform and there is no role left."
        },
        {
          "dimension": {
            "display_name": "Android Platform \u0026 App Components",
            "slug": "android-platform-app-components"
          },
          "name": "Dagger",
          "rationale": "remove the Android platform and there is no role left."
        },
        {
          "dimension": {
            "display_name": "Android Platform \u0026 App Components",
            "slug": "android-platform-app-components"
          },
          "name": "WorkManager",
          "rationale": "remove the Android platform and there is no role left."
        }
      ]
    },
    {
      "label": "Primary",
      "layer": "L1",
      "skills": [
        {
          "dimension": {
            "display_name": "Mobile Data \u0026 Connectivity",
            "slug": "mobile-data-connectivity"
          },
          "name": "Retrofit",
          "rationale": "daily output is produced against it."
        },
        {
          "dimension": {
            "display_name": "Mobile Data \u0026 Connectivity",
            "slug": "mobile-data-connectivity"
          },
          "name": "Room",
          "rationale": "daily output is produced against it."
        },
        {
          "dimension": {
            "display_name": "Mobile Performance \u0026 Device Constraints",
            "slug": "mobile-performance-device-constraints"
          },
          "name": "ANR Diagnosis",
          "rationale": "Rule 2 with a caveat: the role owns app performance outright, which rules out L2."
        },
        {
          "dimension": {
            "display_name": "Mobile Performance \u0026 Device Constraints",
            "slug": "mobile-performance-device-constraints"
          },
          "name": "Jank and Frame Timing",
          "rationale": "Rule 2 with a caveat: the role owns app performance outright, which rules out L2."
        }
      ]
    },
    {
      "label": "Environment",
      "layer": "L2",
      "skills": [
        {
          "dimension": {
            "display_name": "API Design \u0026 Protocols",
            "slug": "api-design-protocols"
          },
          "name": "REST",
          "rationale": "the role reads and depends on the contract but does not own it."
        },
        {
          "dimension": {
            "display_name": "Testing Frameworks",
            "slug": "testing-frameworks"
          },
          "name": "JUnit",
          "rationale": "Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de"
        },
        {
          "dimension": {
            "display_name": "Testing Frameworks",
            "slug": "testing-frameworks"
          },
          "name": "Espresso",
          "rationale": "Rule 3 on placement, native on ownership: the role writes its own unit and instrumented tests, but estate-scale automation frameworks and de"
        },
        {
          "dimension": {
            "display_name": "Observability \u0026 Monitoring",
            "slug": "observability-monitoring"
          },
          "name": "Firebase Crashlytics",
          "rationale": "the role consumes crash, ANR and vitals telemetry daily to decide what to fix and whether to halt a rollout, but does not own the observabil"
        },
        {
          "dimension": {
            "display_name": "Software Design \u0026 Architecture",
            "slug": "software-design-architecture"
          },
          "name": "MVVM",
          "rationale": "layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary "
        },
        {
          "dimension": {
            "display_name": "Software Design \u0026 Architecture",
            "slug": "software-design-architecture"
          },
          "name": "Dependency Injection",
          "rationale": "layering, state-ownership and module-boundary decisions govern where code goes several times per feature, but the named practice vocabulary "
        }
      ]
    }
  ],
  "unmapped_skills": [
    "CI/CD",
    "Play Store"
  ]
}
API 2 — extract-details
{}
API 3 — final-role-output
{}

LLM Calls

Every model call made for this run, in pipeline order. Click a card to see the model's response.

Loading…