Docs that make complex APIs feel obvious.

I'm a technical writer and software engineer who lives at the intersection of both disciplines. At Programus Ltd. I manage end-to-end documentation for enterprise clients — API docs, user guides, configuration documents, tutorial videos, and release notes.

Open to work Germany Netherlands Ireland UK
// 200 OK
{
  "role": "Junior Technical Writer",
  "employer": "Programus Ltd.",
  "based_in": "Sri Lanka",
  "education": "BEng (Hons) Software Engineering, University of Westminster",
  "toolchain": ["OpenAPI", "Swagger", "Postman", "Git", "Azure DevOps", "RoboHelp"],
  "background": "full-stack, Android & API engineering before technical writing",
  "targeting": "technical writing / documentation engineering / devrel, EU",
  "status": "open_to_work"
}
GET /overview

Overview

With a BEng (Hons) in Software Engineering from the University of Westminster and hands-on experience building real-world applications, I bring genuine technical depth to the work of documentation and developer experience. Before moving into technical writing I spent time as a software engineer across full-stack web, Android, and API layers — Java, JavaScript, React.js, Node.js, SQL, Spring Boot, Bash scripts, Ansible playbooks, Linux environments, and open source contributions. That background means I can read a codebase, understand what developers are building, and document it without needing everything explained from scratch.

I also write about software engineering on Medium — one explainer on Python operators was curated and featured by Medium's editorial team, reaching 2.5K+ readers. If you're building a developer-facing product and need someone who genuinely understands both sides, feel free to reach out.

GET /experience

Experience

Junior Technical Writer — Programus Ltd.

Sep 2024 — Present
  • Independently manage end-to-end documentation deliverables — user guides, configuration documents, tutorial videos, release notes, and client-specific documentation — across multiple enterprise clients.
  • Own API documentation and validation workflows using OpenAPI/Swagger and Postman, collaborating with development and QA teams to reduce integration issues and support ongoing feature releases.
  • Partner cross-functionally with project managers, developers, support teams, and clients to clarify complex workflows and improve documentation usability and consistency.

Trainee Software Engineer — hSenid Mobile Solutions

Jul 2022 — Jul 2023
  • Fixed bugs and shipped features for Applova Admin web, Merchant web, API services, and Android mobile/kiosk applications.
  • Wrote Bash scripts and Ansible playbooks to automate module builds and back up/restore databases — the toolchain background that now shapes how I scope documentation work.

Associate Software Engineer — Sustainable Education Foundation

Jun 2022 — Jul 2023
  • Wrote and structured the SEF volunteer handbook, took part in wireframing ScholarX v2, and wrote/proofread content for the SEF site and related activities.
  • Wrote public-facing web copy for the SEF website, addressing students, industry experts, and volunteers as three distinct audiences.
  • Hosted a Google Summer of Code awareness session and led interviews with ScholarX program mentors to gather feedback.
GET /case-studies

Case studies

Sanitized enterprise documentation samples, published under the placeholder product name "Venuix."

Enterprise User Guides

Venuix — event & venue management platform

End-to-end workflow guides written in my current role at Programus Ltd. for an enterprise event and venue management platform, covering simplified event setup, seating chart maintenance mode, and booking status configuration — from high-level setup flows to granular conditional logic, written for a non-technical audience.

Read excerpt — Simplified Event Setup

To set up an Event using the Simplified Event Setup Process in Venuix:

  1. Visit the Venuix Portal and sign in using the username and password provided to you.
  2. Go to the Setup Module by clicking on the Setup button.
  3. Select Events and Products from the left side panel, then select Events from the module list.
  4. Select Add New Event, which directs you to a new page.
  5. Under the General tab, provide a name for the event, upload an image, and choose Public or Private as the event type — public events are scheduled in advance (sports, classes, courses), while private events are customer-driven (weddings, product launches).
  6. Assign a primary venue, event category, and responsible event manager from their respective drop-downs.
  7. Click Save to create the event.

The full guide also covers email templates for booking/enquiry/waitlist confirmations, facility linking, and package configuration — condensed here for length.

Read excerpt — Seating Chart in Maintenance Mode

Once the seating chart has been accessed via the Booking or Diary module, the following steps apply:

  1. Switch to maintenance mode using the toggle in the upper right corner.
  2. By default, seating categories are grouped by price band — you can also group by booking list or block.
  3. Use the search field to filter by booking reference, client name, contact name, package name, or notes.
  4. To reserve seats: select the preferred seats, click Reserve Seats, enter a note, and submit. A confirmation message displays on success.
  5. To free up seats: select allocated seats and click Un-allocate, confirming in the pop-up that follows.
  6. The freeze option prevents selected seats from being un-allocated while other actions are performed — useful for holding a block during a multi-step booking process.

Note: "Using the Allocate button will automatically assign the seats starting from the top left-most available section." — an inline callout preserved from the original guide.

Read excerpt — Booking Status Configuration

To add a new booking status:

  1. From Setup → Bookings → Booking Statuses, click Add New Booking Status.
  2. Select a Parent Booking Status to establish the status hierarchy — this determines the progression path a booking can follow.
  3. Configure checkboxes for whether the status reserves stock, requires specific user rights to edit, requires a linked client, or should be hidden from the public portal.
  4. Under the Approval tab, optionally require approval to enter this status, with separate drop-downs for the approved and rejected outcome statuses.
  5. If the parent status is Provisional or Quotation, an Expiry tab appears, letting the status auto-expire after a set number of days or relative to the event's start/end date.

This workflow demonstrates documenting conditional logic — fields and tabs that only appear based on earlier selections — clearly enough for a non-technical admin to configure correctly.

Onboarding & Handbook

SEF volunteer handbook

Written during my time as Associate Software Engineer at the Sustainable Education Foundation (2022–2023). The organizational overview introduces SEF to prospective volunteers across all backgrounds; the Engineering Team chapter covers who the team is, what they do, and the concrete steps to get set up — GitHub, Slack, and Hive accounts — before introducing yourself to the community.

Demonstrates: welcoming organizational writing, and step-by-step onboarding content that stays human for a technical audience.

Web Copy

SEF public-facing website copy

Homepage copy for the SEF website addressing three distinct audiences in turn — students, industry experts, and volunteers — each in their own paragraph and tone, rather than one generic pitch trying to speak to everyone at once.

Demonstrates: audience segmentation and concise web copywriting.

GET /writing

Writing

Medium — Featured

Working with Operators in Python

A beginner-friendly technical explainer, curated and featured by Medium's editorial team. 2.5K views · 1.4K reads.

Read on Medium ↗
Medium

Interning as a Software Engineer at hSenid Mobile — Part I & II

A firsthand account of my software engineering internship — onboarding, tools, and technical work.

Part I ↗ · 554 views · 77 reads   Part II ↗ · 545 views · 70 reads
Thesis, 2024

Bright Horizons — Procedurally Generated Serious Game to Promote Learning in Individuals Affected by Trisomy-21

Final year undergraduate thesis for my BEng (Hons) at Westminster — contextualizing a research problem for a broad audience, then explaining a Unity3D/C# implementation and a regression model in structured, precise language.

Read excerpt — Abstract

The serious game "Bright Horizons" uses a procedurally generated approach to level design, producing a unique experience each playthrough to maximize engagement for individuals affected by Trisomy-21 (Down syndrome), who are strong visual learners. A regression model calculates ideal activity engagement time from gene expression data, while learning resources — numbers, letters, and colors — are distributed throughout the gameplay loop so players can learn while engaged.

Read excerpt — System implementation

The solution has two components: the game, built in Unity3D with C# logic scripts, and a regression model. Key scripts include a Procedural_Generation script that builds the terrain, places collectibles, and positions the finish line in a safe zone each run, alongside movement, life-cycle, and menu scripts.

The regression model was trained on medical data from four Excel sheets of gene expression changes, consolidated into a dataset of 10,000+ entries using pandas, then used to predict ideal activity engagement times consumed by the game engine at runtime.

GET /skills

Toolchain

OpenAPI / Swagger Postman Git Azure DevOps Adobe RoboHelp Markdown Java JavaScript React.js Node.js Spring Boot SQL Bash Ansible Linux
POST /contact

Get in touch

Open to technical writing, documentation engineering, and developer relations roles across Germany, the Netherlands, Ireland, and the UK. If you're building a developer-facing product and need someone who genuinely understands both sides, feel free to reach out.