Pipeline run
501c3e84-ff2d-4f8c-9561-e31bbafd9dd8
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
Android Developer
in_db alias family · native-mobile-developerslug: 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.
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.
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.
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.
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)
Library artifacts (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.