Skip to content
All projects

GovTech · Integrations

e.gov.tm — Government Services Portal

Turkmenistan's unified portal for government services. I was one of two backend developers on the platform, which grew to more than 40 online services by early 2024.

My role
One of two backend developers (June 2022 – December 2023). Worked on the Go/PostgreSQL backend, integrations with government and payment services and the platform's ongoing development.
Stack
  • Go
  • PostgreSQL

The problem

Every online service on the portal depends on external systems — government agencies and payment providers — each with its own protocol, data format and availability. The platform had to keep adding new services without every integration becoming a one-off.

Architecture

e.gov.tm — Government Services Portal — Architecture diagramWeb portalcitizensGo backendintegrationsGovernmentagency systemsPaymentspayment providersPostgreSQLapplications
Citizens use the web portal, which talks to the Go backend. The backend stores applications and their statuses in PostgreSQL and communicates with government agency systems and payment providers through dedicated integrations.

Key decisions

  1. 01Each external system behind its own integration module

    Why
    Agency and payment systems differ in protocols and reliability. Isolating each one behind a consistent internal interface — with its own timeouts, error handling and logging — keeps the core service logic independent of provider details and makes adding a new service routine.
    Trade-off
    An extra layer of abstraction, and provider-specific features sometimes need special handling.
  2. 02Payment status changes inside database transactions

    Why
    Payment callbacks can arrive late, twice or out of order. Recording state transitions transactionally in PostgreSQL keeps the application status and the payment status consistent with each other.
    Trade-off
    A stricter status model to maintain, and reconciliation is still needed for edge cases.
  3. 03Go for the service layer

    Why
    Predictable performance, simple concurrency for calling several external systems in parallel, and single-binary deployments.
    Trade-off
    More explicit code compared to dynamic languages.

What I built

  • Backend development in Go with PostgreSQL
  • Integration of government agency services
  • Integration of payment services
  • Platform growth to 40+ online services by early 2024

In numbers

online services on the platform by early 2024
40+
backend developers on the team, including me
2