Fikazon Technologies

Engineering

How the work is actually done.

Ten things that happened on the way to shipping, what we can do and where it is proven, the rules we build by, and the platform underneath.

From the build record

Ten true stories.

Each is a problem we met in production and what we did about it.

The exam that must not need the internet

The situation
Schools wanted computer-based exams like the national ones, but their labs have unreliable power and internet, and many of their computers are old.
What we did
We put the whole exam system on a server inside the school. It pairs with the cloud once, then sets, runs, marks and releases exams with no connection. When one school said students must be able to start a test with no server reachable at all, a design that had shipped that morning was rolled back the same day and replaced.
The lesson
Offline is not a fallback to add later. It has to be the normal case. And when a customer's reality contradicts the design, the design loses.

One thousand one hundred students, one laptop

The situation
Before the first school exam day, the in-school server was load-tested with 1,100 simulated students starting at once on an ordinary laptop. On the first run only 811 got through.
What we did
Six specific fixes to the server — write locking, worker counts, how background work is launched on Windows, and others — took the same test to zero errors.
The lesson
A load test before the customer's big day is cheaper than an apology after it. Test the worst case on the worst machine.

Ten years of runtime, crossed overnight

The situation
A school management system in daily use was running on a language runtime and database that were years out of support, at a higher hosting cost than necessary.
What we did
About 3,700 files were rewritten automatically so the new runtime behaves exactly as the old one did. A compatibility layer kept twenty-year-old database calls working. The new servers were load-tested with 2,000 logins in a minute. The switch happened in the early hours, with a row-count comparison, health checks for days afterwards, and the old servers kept until the new ones had proved themselves.
The lesson
Modernisation is a migration problem, not a rewrite. Keep behaviour identical, prove it under load, and keep the way back open.

Money that checks itself

The situation
Several of our systems move other people's money: school fees, tuck-shop wallets, housing instalments, subscriptions.
What we did
Every amount is a whole number of kobo. Every movement is a double-entry ledger line. Ledgers add themselves up on a schedule and raise an alarm if they do not balance. Payments are confirmed by asking the provider directly. Collected fees are held for 72 hours before payout, so a parent's mistake can be put right.
The lesson
The cheapest control against fraud and error is a system that cannot quietly be wrong.

Every device is a server

The situation
A hospital cannot stop registering patients because a cable was unplugged or one computer died.
What we did
Every computer runs the same app and can act as the server. One is the hub, one is a standby that takes over, and the rest fall back from cloud to neighbours to their own queue. Before any patient data existed, a simulator replayed hundreds of seeded disasters — outages, crashes, reinstalls — and found fourteen real defects, fixed before a nurse ever saw them.
The lesson
If failure is normal, test failure on purpose, by the thousand.

Change one file, change the supplier

The situation
Outside services let you down: an upgrade that is never applied, an SMS route that needs manual approval, a mail port blocked by the host.
What we did
Every outside service sits behind an adapter. A football data supplier was replaced by writing one new adapter. A marketplace launched with email sign-in when the SMS route stalled. Email moved to a port the host does not block.
The lesson
A launch should never wait on a third party. Design so any one of them can be swapped in an afternoon.

A new module the customer can switch off

The situation
Schools on an old accounting module needed a better one, but nobody wanted to bet a school's books on a new system.
What we did
The new module writes the old tables in the old format, so a school can move to it and move back whenever it likes. Fixes to historical data are add-only, tagged, and proven — with their undo — on a copy before they touch the live books.
The lesson
Reversibility is a feature.

The machine that builds is not the machine that runs

The situation
Development happens on a Windows laptop; production is Linux. Small differences bit more than once: lock files that would not install, shell commands that damaged special characters, cached settings that ignored new values.
What we did
Each surprise became a written rule and a step in the deploy script: regenerate lock files on Linux, reload the runtime on every deploy, test as the real application user and not as an administrator.
The lesson
Every surprising failure should end as a rule or a script, so it can only happen once.

Guard the answer key

The situation
In an exam system, answers travelling to a student's device before the test is a real risk.
What we did
Answer keys are sealed to the device's own key and can only be opened at hand-in. Licences are signed and bound to a device. Content packs are encrypted and signed. A sealed channel lets the apps talk securely even on old PCs that fail normal certificate checks.
The lesson
Security has to work on the customer's actual equipment, or it will be switched off.

Tell the user what actually went wrong

The situation
A cashier facing the word Error at a till, or a school administrator facing a failed sync, cannot do anything with it.
What we did
It is a standing rule in the point-of-sale and exam products that every refusal names the real cause and what to do about it, and that the screen and the server apply the same rule so they can never disagree.
The lesson
Good error messages are a support department you do not have to staff.

Capabilities

What we can do, and where it is proven.

Each capability is listed with the systems that prove it.

  1. Offline-first and local-first systems

    In-school exam servers, signed offline licences, encrypted content packs, apps that work for 30 days without a connection, tills and hospital stations that carry on alone.

  2. Sync and distributed data

    Immutable signed events, gapless per-device sequences, two-way sync between building and cloud, and a multi-device simulator that replays outages.

  3. Payments and money safety

    Checkout, custody holds, approved payouts, refunds and subscriptions on Paystack, with money stored as integer kobo in double-entry ledgers.

  4. Accounting systems

    Ledgers, fees, banks, reconciliation, budgets, inventory, payroll and loans, fully reversible.

  5. Multi-tenant SaaS

    One system serving many organisations with strict separation between them.

  6. Desktop and mobile apps

    Flutter apps for Windows with installers and signed self-update, Android apps, and installable web apps.

  7. Applied cryptography and security

    Ed25519 signatures, X25519 sealing, XChaCha20-Poly1305 encrypted packs, SQLCipher databases, Argon2id, mutual TLS, device-bound licences and database-enforced access rules.

  8. AI and language-model integration

    A voice study companion that operates tools while it explains, a pipeline from photographed exam books to verified questions, AI screening of marketplace posts, with the cost of every reply metered.

  9. Legacy modernisation and migration

    A live school system moved from PHP 5.6 to PHP 8.4 and MySQL 5.7 to 8.4 with an overnight cutover, load-tested beforehand.

  10. Data engineering and analytics

    A Python engine computing match verdicts, dominance and luck measures, versioned and append-only, plus content and checking pipelines.

  11. Real-time and games

    Live one-against-one battles, leaderboards, tournaments and an AI opponent.

  12. Marketplaces and trust design

    Sealed bids, contact details revealed only to verified bidders, automatic pause and suspension rules.

  13. Performance and load testing

    1,100 students starting an exam at once on one school laptop. 2,000 logins in a minute, then 1,700 students in a test while 300 teachers entered scores.

  14. Operations: servers, deploys, backups, recovery

    Ubuntu servers behind Cloudflare, push-to-deploy, encrypted off-server backups with tested restores, and scheduled health checks.

  15. Documentation and training

    In-app help centres with generated printable guides, teacher and school guides, tutorial videos, a client handbook and user manuals.

The rules

Nine habits behind every system here.

  1. A written specification before code

    Each product starts from a document that is the binding specification. A change to the product is a change to the specification first.

  2. Every decision recorded

    Products keep a numbered register of decisions, each with its reason: 69 in StudyFrames, more than 170 in Fikacare. Nothing has to be argued twice, and a newcomer can see why the system is the way it is.

  3. Phases with gates

    A phase does not start until the one before has passed its gate. Fikacare's first gate needs a simulator run of ten thousand seeded scenarios to come back clean. That gate is still open, which is why we say in pilot and not live.

  4. Tests and simulators before launch

    Automated tests run in the hundreds to thousands per product. Where a bug would be expensive — exam day, patient records, money — a simulator or load test proves the system first.

  5. Money handled the way an accountant would

    Whole kobo, never floating point. Double-entry ledgers that check their own balance on a schedule. Fixes to data are add-only and reversible.

  6. Every outside provider behind an adapter

    Payments, SMS, email, storage, AI models and data suppliers each sit behind one interface, so a provider can be replaced in one file. We have had to, and it worked.

  7. A way back, always

    New modules are built so a customer can switch back to the old one at any time. Customers adopt faster when the way back is guaranteed.

  8. Push-to-deploy and proven recovery

    One main branch, deployed by git, never by copying files over a live site. Backups are encrypted, kept off the server, and restored in tests.

  9. Guides for the people who use it

    Help centres, handbooks, printable guides and videos are part of the deliverable, written in plain language.

Platform

What it is all built on.

Languages and frameworks
PHP 8.4Laravel 13DartFlutterPythonTypeScriptNext.jsReactVue 3
Data
MySQL 8SQLiteSQLCipherRedisPostgres (Supabase)Firebase Realtime Database
Hosting
UbuntuDigitalOceanVultrCloudflarenginxApacheCaddyDocker
Services
PaystackAmazon SESTermii SMSCloudflare R2Cloudflare Workers AIClaude APIElevenLabsVosk
Testing and release
PHPUnitPestFlutter testPlaywrightk6 load testsInno Setup installersGit push-to-deploy

Tell us the problem.

We will tell you what it takes to ship it, and what it takes to keep it running.

Start a project We wrote to you? See the offer0805 403 7391