Job Description
for intro paragraphs and general text,
for section headers, - for list items. Must preserve all original content word-for-word, no additions, deletions, summarization, rephrasing. Must not add CSS classes, inline styles, ,
. Must not add markdown fences. Must return only HTML.
We need to parse the job description and structure accordingly.
The raw text includes:
- About Umba (paragraph)
- Headquartered... (paragraph)
- We’re looking for exceptional people... (paragraph)
- About the Role (section header)
- Then description paragraphs about role.
- Then "Responsibilities" heading (should be Responsibilities
) then list items each preceded by dash? Actually in raw text, responsibilities are listed with bullet dash lines. We need to convert each bullet line into - items. Must preserve content word-for-word, including dash? The dash is part of bullet? The instruction: Use
- for list items (duties, requirements, qualifications, skills). So we should output a
containing - items. The bullet dash should be removed? The content should be the text of each bullet, but we must preserve original content word-for-word. The dash is part of the original? The raw text shows:
Responsibilities
- Design, build, and maintain scalable backend services using Python (Flask, FastAPI)
- Contribute to front end development (NextJS)
- Contribute across the stack when needed (APIs, integrations)
- Define clear technical specs that can be executed by AI-assisted development workflows
- Use AI tools (e.g. Claude Code, Codex) to accelerate development while maintaining high quality
- Review, test, and validate AI-generated code to ensure correctness, security, and performance
- Architect systems with a focus on reliability, observability, and scalability
- Build strong testing and validation pipelines (unit, integration, automated QA)
- Collaborate with Data teams to deliver end-to-end features
- Debug complex production issues and implement robust fixes
- Continuously improve engineering velocity through tooling and process improvements
We need to preserve the content word-for-word, but we can remove the leading dash? The instruction says "Preserve ALL original content word-for-word — do not add, remove, summarise, or rephrase". Removing the dash would be removing a character, which is a change. However the dash is not part of the content? It is a bullet marker, not part of the sentence. The instruction says "Use
- for list items (duties, requirements, qualifications, skills)". So we need to output the list items as
- Design, build, and maintain scalable backend services using Python (Flask, FastAPI)
etc. The dash is not part of the content; it's a bullet marker. So we can omit it. That is not adding or removing content? Removing the dash is removing a character that is not part of the sentence. The instruction says preserve all original content word-for-word. The dash is not part of the sentence content; it's a formatting artifact. I think it's okay to drop it. The bullet marker is not part of the content. So we can just output the sentence.
Similarly for "Skills and Qualifications" heading, then list items.
Also "What We’re Really Looking For" maybe a heading but not a list; it's a paragraph? Actually it's a paragraph with bullet-like lines? It says:
What We’re Really Looking For
- Engineers who think in systems, not just functions
- People who can leverage AI to move 10x faster without sacrificing quality
- Builders who take ownership from idea → spec → implementation → production
- Pragmatic problem-solvers who ship
These are also list items. Should be under a heading? Not specified but we can treat as a heading? Not a required header type. Could just be a paragraph? The instruction: Use for section headers (e.g. Responsibilities, Qualifications, Requirements, Education, Experience, Skills, How to Apply, Key Duties, About the Role). So "What We’re Really Looking For" is not listed as a header type, but we could still use for it? It says use for section headers (e.g. ...). It doesn't restrict to only those; we can use for any section header. So we can use What We’re Really Looking For
then list items.
Also "Work Status" is a heading with a line "Valid work authorization for Kenya". That's a paragraph? It is a line. Could be a heading? Not listed. Could just be a paragraph.
Also "Umba is proud to be an Equal Opportunity employer..." is a paragraph.
We need to preserve all original content word-for-word. So we must include all text exactly as appears, including line breaks? We will wrap paragraphs in
. For headings, use
. For list items, use - .
We must not add any extra text. So we need to output HTML that includes all sections in order.
Let's outline:
Paragraphs:
1. "About Umba" maybe a heading? Not required but it's a paragraph. Could just be
About Umba
then next paragraph about Umba mission etc.
But the raw text starts with "About Umba" as a heading? Actually it's "About Umba" then a blank line then description. The text:
About Umba
Umba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa.
We’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale.
Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold.
We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank.
Thus we have multiple paragraphs.
We need to preserve all content word-for-word. So we need to output exactly those sentences as they appear, but wrapped in tags. Should we keep blank lines? We can just have separate
for each paragraph.
Then "About the Role" heading:
About the Role
then description paragraphs.
Then "Responsibilities" heading: Responsibilities
then with - items.
Then "Skills and Qualifications" heading:
Skills and Qualifications
then with - items.
Then "AI-Native Engineering Experience (increasingly important):" maybe a heading? It's a line with colon. Could be a heading? Not required but we can treat as a paragraph? It is a heading? It is a line "AI-Native Engineering Experience (increasingly important):". Probably we can just wrap as
AI-Native Engineering Experience (increasingly important):
then list items? Actually after that there is a list of bullet items under that heading? The raw text shows:
AI-Native Engineering Experience (increasingly important):
- Experience using AI coding tools (Claude Code, Codex, GitHub Copilot, etc.) in daily workflows
- Ability to write clear, structured technical specs and prompts for code generation
- Strong code review skills, especially for validating AI-generated outputs
- Understanding of tradeoffs, failure modes, and quality risks in AI-assisted development
- Experience building guardrails: testing, validation, and monitoring for generated code
- Familiarity with modern development workflows (Git, CI/CD, Docker)
- Experience with Linux/Unix environments
These are bullet items. Should we treat as a separate list? Could be under a heading? Not required but we can just output as a list after a paragraph? The instruction: Use - for list items (duties, requirements, qualifications, skills). So we can output a
with those - items. But we need a heading? Not required. Could just output the list directly after a paragraph? But we need to preserve the heading text "AI-Native Engineering Experience (increasingly important):". That is a line that ends with colon. It is not a heading but we could treat it as a paragraph. Then the list items follow. However the list items are part of that section; we could include them under a
. But we need to preserve the heading text. Perhaps we can output a AI-Native Engineering Experience (increasingly important):
then ... items ...
. That would preserve the heading text as a paragraph, then list items.
But the instruction says "Use for section headers (e.g. Responsibilities, Qualifications, Requirements, Education, Experience, Skills, How to Apply, Key Duties, About the Role)". So "AI-Native Engineering Experience (increasingly important)" is not in that list, but we could still use for it? It might be okay. But it's not a typical header; but we can still use if we want. However we must preserve the text exactly, including colon. If we wrap it in , we would have AI-Native Engineering Experience (increasingly important):
. That includes the colon. That seems fine.
But then the list items need to be under that heading? Could be inside the same section? The instruction doesn't require headings for every section, but we can use for any section header. So we could use AI-Native Engineering Experience (increasingly important):
then items. That would be consistent.
Similarly "Bonus:" heading maybe? The raw text includes "Bonus:" then list items. Could be a heading as well. Use Bonus
then items.
Then "What We’re Really Looking For" heading: What We’re Really Looking For
then items.
Then "Work Status" maybe a heading? It is just a line "Work Status". Could be a heading? Not required but we could just output as Work Status
then the line "Valid work authorization for Kenya". Actually the raw text shows:
Work Status
- Valid work authorization for Kenya
So it's a heading "Work Status" then a bullet item. So we can treat "Work Status" as a heading Work Status
then with - Valid work authorization for Kenya
.
Then the equal opportunity paragraph is a paragraph.
We must preserve all content word-for-word. So we need to include all headings exactly as they appear, including punctuation and colon.
Now we need to output HTML only.
Let's construct step by step.
First paragraph: "About Umba" is a heading? Actually it's just a line "About Umba". Could be considered a heading but not required. It is a line followed by a blank line then description. We can treat it as a paragraph? The instruction: Use for introductory paragraphs and general text. So we can wrap "About Umba" as a
About Umba
. Then next paragraph: "Umba is a pan-African digital bank..." as Umba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa.
Then next paragraph: "We’re transforming how banking works on the continent..." as We’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale.
Then next paragraph: "Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold." as Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold.
Then next paragraph: "We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank." as We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank.
Then heading "About the Role": About the Role
then description paragraphs.
The description after "About the Role" includes:
"We’re looking for an experienced Back-End / Full-Stack Engineer to design, build, and scale the core services that power Umba’s digital banking platform.
You’ll work primarily in Python (Flask, FastAPI), building secure, high-performance APIs used by tens of thousands of customers across Africa — while also contributing across the stack where needed.
This is not a traditional engineering role. We operate in an AI-native development environment, where engineers leverage tools like Claude Code, Codex, and other LLM-based systems to accelerate development, generate code, and iterate quickly.
As a result, the role increasingly focuses on:
- Defining clear technical specifications
- Orchestrating AI agents to implement systems
- Reviewing, validating, and hardening generated code
- Building robust feedback loops and quality control systems
You’ll collaborate closely with the Data and Product teams to shape our architecture and ship features quickly and reliably.
This is a highly technical, in-office role based in Nairobi. You’ll join a small, high-performing team operating at speed, where ownership is expected and impact is immediate."
We need to preserve bullet points? The bullet points are part of the description but they are list items? Actually they are part of the paragraph but they are bullet lines. The instruction says use - for list items (duties, requirements, qualifications, skills). So these bullet lines should be converted to
- items inside a
. However they are not under a heading like "Responsibilities". They are part of the "About the Role" description. The instruction doesn't explicitly say to convert bullet points in general description to list items; but they are list items (duties?) Actually they are responsibilities? They are part of the role description. Could be considered part of responsibilities but not labeled. However we have a separate "Responsibilities" section later that contains bullet items. The bullet items under "About the Role" are not labeled as responsibilities but are part of the description. The instruction says "Use - for list items (duties, requirements, qualifications, skills)". So we should use
for any list items. So we need to convert those bullet lines into - items. But they are part of the "About the Role" section; we could just output them as a
after the heading, without a separate heading. That would preserve content.
But we must preserve the bullet lines exactly, including the dash? The dash is bullet marker; we can omit it as before. The content after dash is the sentence. So we will output - Defining clear technical specifications
etc. But we need to preserve the content word-for-word, which includes the bullet dash? The dash is not part of the content; it's a marker. So we can drop it.
But we also need to preserve the colon after "As a result, the role increasingly focuses on:"? Actually that line is a heading? It is a line "As a result, the role increasingly focuses on:" then bullet items. The bullet items are listed under that line. The line ends with colon. Should we treat that as a heading? Not required. Could just output as a paragraph? But it's a list heading? The instruction says use for section headers (e.g. Responsibilities, Qualifications...). So we could treat "As a result, the role increasingly focuses on:" as a heading? Not typical. Could just output as a paragraph:
As a result, the role increasingly focuses on:
then list items. But the colon is part of the text; we need to preserve it. So we can output As a result, the role increasingly focuses on:
then items.
But the bullet items themselves are part of the list; we need to output them as - items.
Thus we need to parse the entire text and decide where to use headings.
Let's outline the entire structure:
-
About Umba
- Umba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa.
- We’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale.
- Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold.
- We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank.
- About the Role
- We’re looking for an experienced Back-End / Full-Stack Engineer to design, build, and scale the core services that power Umba’s digital banking platform.
- You’ll work primarily in Python (Flask, FastAPI), building secure, high-performance APIs used by tens of thousands of customers across Africa — while also contributing across the stack where needed.
- This is not a traditional engineering role. We operate in an AI-native development environment, where engineers leverage tools like Claude Code, Codex, and other LLM-based systems to accelerate development, generate code, and iterate quickly.
- As a result, the role increasingly focuses on:
maybe we need a colon? Actually the line is "As a result, the role increasingly focuses on:" then bullet items. So we could output As a result, the
. Must not add markdown fences. Must return only HTML. We need to parse the job description and structure accordingly. The raw text includes: - About Umba (paragraph) - Headquartered... (paragraph) - We’re looking for exceptional people... (paragraph) - About the Role (section header) - Then description paragraphs about role. - Then "Responsibilities" heading (should be
Responsibilities
) then list items each preceded by dash? Actually in raw text, responsibilities are listed with bullet dash lines. We need to convert each bullet line into- for list items (duties, requirements, qualifications, skills). So we should output a
- containing
- items. The bullet dash should be removed? The content should be the text of each bullet, but we must preserve original content word-for-word. The dash is part of the original? The raw text shows:
Responsibilities
- Design, build, and maintain scalable backend services using Python (Flask, FastAPI)
- Contribute to front end development (NextJS)
- Contribute across the stack when needed (APIs, integrations)
- Define clear technical specs that can be executed by AI-assisted development workflows
- Use AI tools (e.g. Claude Code, Codex) to accelerate development while maintaining high quality
- Review, test, and validate AI-generated code to ensure correctness, security, and performance
- Architect systems with a focus on reliability, observability, and scalability
- Build strong testing and validation pipelines (unit, integration, automated QA)
- Collaborate with Data teams to deliver end-to-end features
- Debug complex production issues and implement robust fixes
- Continuously improve engineering velocity through tooling and process improvements
We need to preserve the content word-for-word, but we can remove the leading dash? The instruction says "Preserve ALL original content word-for-word — do not add, remove, summarise, or rephrase". Removing the dash would be removing a character, which is a change. However the dash is not part of the content? It is a bullet marker, not part of the sentence. The instruction says "Use
- for list items (duties, requirements, qualifications, skills)". So we need to output the list items as
- Design, build, and maintain scalable backend services using Python (Flask, FastAPI) etc. The dash is not part of the content; it's a bullet marker. So we can omit it. That is not adding or removing content? Removing the dash is removing a character that is not part of the sentence. The instruction says preserve all original content word-for-word. The dash is not part of the sentence content; it's a formatting artifact. I think it's okay to drop it. The bullet marker is not part of the content. So we can just output the sentence. Similarly for "Skills and Qualifications" heading, then list items. Also "What We’re Really Looking For" maybe a heading but not a list; it's a paragraph? Actually it's a paragraph with bullet-like lines? It says: What We’re Really Looking For - Engineers who think in systems, not just functions - People who can leverage AI to move 10x faster without sacrificing quality - Builders who take ownership from idea → spec → implementation → production - Pragmatic problem-solvers who ship These are also list items. Should be under a heading? Not specified but we can treat as a heading? Not a required header type. Could just be a paragraph? The instruction: Use
- .
We must not add any extra text. So we need to output HTML that includes all sections in order.
Let's outline:
Paragraphs:
1. "About Umba" maybe a heading? Not required but it's a paragraph. Could just be
About Umba
then next paragraph about Umba mission etc. But the raw text starts with "About Umba" as a heading? Actually it's "About Umba" then a blank line then description. The text: About Umba Umba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa. We’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale. Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold. We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank. Thus we have multiple paragraphs. We need to preserve all content word-for-word. So we need to output exactly those sentences as they appear, but wrapped intags. Should we keep blank lines? We can just have separate
for each paragraph. Then "About the Role" heading:
About the Role
then description paragraphs. Then "Responsibilities" heading:Responsibilities
then- with
- items.
Then "Skills and Qualifications" heading:
Skills and Qualifications
then- with
- items.
Then "AI-Native Engineering Experience (increasingly important):" maybe a heading? It's a line with colon. Could be a heading? Not required but we can treat as a paragraph? It is a heading? It is a line "AI-Native Engineering Experience (increasingly important):". Probably we can just wrap as
AI-Native Engineering Experience (increasingly important):
then list items? Actually after that there is a list of bullet items under that heading? The raw text shows: AI-Native Engineering Experience (increasingly important): - Experience using AI coding tools (Claude Code, Codex, GitHub Copilot, etc.) in daily workflows - Ability to write clear, structured technical specs and prompts for code generation - Strong code review skills, especially for validating AI-generated outputs - Understanding of tradeoffs, failure modes, and quality risks in AI-assisted development - Experience building guardrails: testing, validation, and monitoring for generated code - Familiarity with modern development workflows (Git, CI/CD, Docker) - Experience with Linux/Unix environments These are bullet items. Should we treat as a separate list? Could be under a heading? Not required but we can just output as a list after a paragraph? The instruction: Use- for list items (duties, requirements, qualifications, skills). So we can output a
- with those
- items. But we need a heading? Not required. Could just output the list directly after a paragraph? But we need to preserve the heading text "AI-Native Engineering Experience (increasingly important):". That is a line that ends with colon. It is not a heading but we could treat it as a paragraph. Then the list items follow. However the list items are part of that section; we could include them under a
- . But we need to preserve the heading text. Perhaps we can output a
- Valid work authorization for Kenya . Then the equal opportunity paragraph is a paragraph. We must preserve all content word-for-word. So we need to include all headings exactly as they appear, including punctuation and colon. Now we need to output HTML only. Let's construct step by step. First paragraph: "About Umba" is a heading? Actually it's just a line "About Umba". Could be considered a heading but not required. It is a line followed by a blank line then description. We can treat it as a paragraph? The instruction: Use
- for list items (duties, requirements, qualifications, skills). So these bullet lines should be converted to
- items inside a
- . However they are not under a heading like "Responsibilities". They are part of the "About the Role" description. The instruction doesn't explicitly say to convert bullet points in general description to list items; but they are list items (duties?) Actually they are responsibilities? They are part of the role description. Could be considered part of responsibilities but not labeled. However we have a separate "Responsibilities" section later that contains bullet items. The bullet items under "About the Role" are not labeled as responsibilities but are part of the description. The instruction says "Use
- for list items (duties, requirements, qualifications, skills)". So we should use
- for any list items. So we need to convert those bullet lines into
- items. But they are part of the "About the Role" section; we could just output them as a
- after the heading, without a separate heading. That would preserve content.
But we must preserve the bullet lines exactly, including the dash? The dash is bullet marker; we can omit it as before. The content after dash is the sentence. So we will output
- Defining clear technical specifications etc. But we need to preserve the content word-for-word, which includes the bullet dash? The dash is not part of the content; it's a marker. So we can drop it. But we also need to preserve the colon after "As a result, the role increasingly focuses on:"? Actually that line is a heading? It is a line "As a result, the role increasingly focuses on:" then bullet items. The bullet items are listed under that line. The line ends with colon. Should we treat that as a heading? Not required. Could just output as a paragraph? But it's a list heading? The instruction says use
- items.
Thus we need to parse the entire text and decide where to use headings.
Let's outline the entire structure:
-
About Umba
-Umba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa.
-We’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale.
-Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold.
-We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank.
-About the Role
-We’re looking for an experienced Back-End / Full-Stack Engineer to design, build, and scale the core services that power Umba’s digital banking platform.
-You’ll work primarily in Python (Flask, FastAPI), building secure, high-performance APIs used by tens of thousands of customers across Africa — while also contributing across the stack where needed.
-This is not a traditional engineering role. We operate in an AI-native development environment, where engineers leverage tools like Claude Code, Codex, and other LLM-based systems to accelerate development, generate code, and iterate quickly.
-As a result, the role increasingly focuses on:
maybe we need a colon? Actually the line is "As a result, the role increasingly focuses on:" then bullet items. So we could outputAs a result, the
for section headers (e.g. Responsibilities, Qualifications...). So we could treat "As a result, the role increasingly focuses on:" as a heading? Not typical. Could just output as a paragraph:
As a result, the role increasingly focuses on:
then list items. But the colon is part of the text; we need to preserve it. So we can outputAs a result, the role increasingly focuses on:
then- items.
But the bullet items themselves are part of the list; we need to output them as
- items. But they are part of the "About the Role" section; we could just output them as a
- for list items (duties, requirements, qualifications, skills)". So we should use
AI-Native Engineering Experience (increasingly important):
then- ... items ...
for section headers (e.g. Responsibilities, Qualifications, Requirements, Education, Experience, Skills, How to Apply, Key Duties, About the Role)". So "AI-Native Engineering Experience (increasingly important)" is not in that list, but we could still use
for it? It might be okay. But it's not a typical header; but we can still use
if we want. However we must preserve the text exactly, including colon. If we wrap it in
, we would have
AI-Native Engineering Experience (increasingly important):
. That includes the colon. That seems fine. But then the list items need to be under that heading? Could be inside the samesection? The instruction doesn't require headings for every section, but we can use
for any section header. So we could use
AI-Native Engineering Experience (increasingly important):
then- items. That would be consistent.
Similarly "Bonus:" heading maybe? The raw text includes "Bonus:" then list items. Could be a heading as well. Use
Bonus
then- items.
Then "What We’re Really Looking For" heading:
What We’re Really Looking For
then- items.
Then "Work Status" maybe a heading? It is just a line "Work Status". Could be a heading? Not required but we could just output as
Work Status
then the line "Valid work authorization for Kenya". Actually the raw text shows: Work Status - Valid work authorization for Kenya So it's a heading "Work Status" then a bullet item. So we can treat "Work Status" as a headingWork Status
then- with
for introductory paragraphs and general text. So we can wrap "About Umba" as a
About Umba
. Then next paragraph: "Umba is a pan-African digital bank..." asUmba is a pan-African digital bank operating in Kenya and Nigeria, with a mission to make financial services more accessible, affordable, and empowering for millions of people across Africa.
Then next paragraph: "We’re transforming how banking works on the continent..." asWe’re transforming how banking works on the continent by building intelligent, automated financial products powered by machine learning. Our platform offers digital banking, lending, and payments through Android, iOS, and Web applications, serving both individuals and businesses at scale.
Then next paragraph: "Headquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold." asHeadquartered in Nairobi, Umba acquired a licensed deposit taking microfinance bank in 2023 and has since grown revenue more than sixfold.
Then next paragraph: "We’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank." asWe’re looking for exceptional people who share our ambition, energy, and belief that technology can unlock financial freedom. Join us as we build Africa’s leading digital bank.
Then heading "About the Role":About the Role
then description paragraphs. The description after "About the Role" includes: "We’re looking for an experienced Back-End / Full-Stack Engineer to design, build, and scale the core services that power Umba’s digital banking platform. You’ll work primarily in Python (Flask, FastAPI), building secure, high-performance APIs used by tens of thousands of customers across Africa — while also contributing across the stack where needed. This is not a traditional engineering role. We operate in an AI-native development environment, where engineers leverage tools like Claude Code, Codex, and other LLM-based systems to accelerate development, generate code, and iterate quickly. As a result, the role increasingly focuses on: - Defining clear technical specifications - Orchestrating AI agents to implement systems - Reviewing, validating, and hardening generated code - Building robust feedback loops and quality control systems You’ll collaborate closely with the Data and Product teams to shape our architecture and ship features quickly and reliably. This is a highly technical, in-office role based in Nairobi. You’ll join a small, high-performing team operating at speed, where ownership is expected and impact is immediate." We need to preserve bullet points? The bullet points are part of the description but they are list items? Actually they are part of the paragraph but they are bullet lines. The instruction says use
- items. But we need a heading? Not required. Could just output the list directly after a paragraph? But we need to preserve the heading text "AI-Native Engineering Experience (increasingly important):". That is a line that ends with colon. It is not a heading but we could treat it as a paragraph. Then the list items follow. However the list items are part of that section; we could include them under a
- for list items (duties, requirements, qualifications, skills). So we can output a
- items.
Then "AI-Native Engineering Experience (increasingly important):" maybe a heading? It's a line with colon. Could be a heading? Not required but we can treat as a paragraph? It is a heading? It is a line "AI-Native Engineering Experience (increasingly important):". Probably we can just wrap as
- items.
Then "Skills and Qualifications" heading:
for section headers (e.g. Responsibilities, Qualifications, Requirements, Education, Experience, Skills, How to Apply, Key Duties, About the Role). So "What We’re Really Looking For" is not listed as a header type, but we could still use
for it? It says use
for section headers (e.g. ...). It doesn't restrict to only those; we can use
for any section header. So we can use
What We’re Really Looking For
then list items. Also "Work Status" is a heading with a line "Valid work authorization for Kenya". That's a paragraph? It is a line. Could be a heading? Not listed. Could just be a paragraph. Also "Umba is proud to be an Equal Opportunity employer..." is a paragraph. We need to preserve all original content word-for-word. So we must include all text exactly as appears, including line breaks? We will wrap paragraphs in. For headings, use
. For list items, use
- items. The bullet dash should be removed? The content should be the text of each bullet, but we must preserve original content word-for-word. The dash is part of the original? The raw text shows:
Responsibilities
- Design, build, and maintain scalable backend services using Python (Flask, FastAPI)
- Contribute to front end development (NextJS)
- Contribute across the stack when needed (APIs, integrations)
- Define clear technical specs that can be executed by AI-assisted development workflows
- Use AI tools (e.g. Claude Code, Codex) to accelerate development while maintaining high quality
- Review, test, and validate AI-generated code to ensure correctness, security, and performance
- Architect systems with a focus on reliability, observability, and scalability
- Build strong testing and validation pipelines (unit, integration, automated QA)
- Collaborate with Data teams to deliver end-to-end features
- Debug complex production issues and implement robust fixes
- Continuously improve engineering velocity through tooling and process improvements
We need to preserve the content word-for-word, but we can remove the leading dash? The instruction says "Preserve ALL original content word-for-word — do not add, remove, summarise, or rephrase". Removing the dash would be removing a character, which is a change. However the dash is not part of the content? It is a bullet marker, not part of the sentence. The instruction says "Use
How well do you match?
Get an instant AI match score for this role — free, takes 3 minutes.
Tailor your CV for this role
The concierge rewrites your whole CV and writes a matching cover letter for this job — opens right here, nothing to paste.
Tailor My CV to This Job ✍️Free cover letter for this job
Upload your CV and get a tailored cover letter in seconds — free, no account needed.
Generate a Cover Letter 📝Let jobs find you
Leave your email and our AI matches you to new jobs across 24 African markets — free. You wait for the call.
Add your CV for real matches
Upload your CV and we score every new job against your real experience — only strong matches reach your inbox. Optional, but it makes your matches far sharper.
You're in.
We'll email you the moment a job matches your profile. Check your inbox for a welcome from My Job Concierge.
I'm ECHO, your MJC career assistant. I can help you find jobs, explore career tools, and connect with opportunities across Africa.