Case studyShipped
Creditas Internet Banking
- Client
- Creditas Digital Factory
- Role
- Senior React Developer
- Timeline
- 2025 – 2026
Refactoring the parts of a 100K+ line internet banking app that kept producing bugs, and cutting defects there by 56%.
Context
Creditas runs the internet banking that its retail customers open every day to move real money. That sets the bar: a release has to be reliable the first time, every screen has to work for someone using a keyboard or a screen reader, and a transfer screen that feels slow costs trust faster than any missing feature wins it.
I joined the frontend team as a senior React developer to ship features and fix defects in a codebase that had grown past 100,000 lines of React and TypeScript.
The problem
Defects were not spread evenly across the app. A large share of them came from the same places: older modules nobody really owned, where component structure differed from screen to screen, helpers had been copy-pasted and then quietly drifted apart, and the same concept went by three different names.
Working in those modules was slow and risky, because you could not tell from reading a file what else a change would touch. So people patched around them, which made the next fix harder.
What I did
Treated the bug tracker as a map
Rather than only closing tickets, I used the defect history to find where the codebase actually hurt, and improved those areas on purpose:
- Standardised component structure, so screens that do similar things are built the same way.
- Extracted shared utilities to replace copy-pasted logic that had drifted between modules.
- Unified naming conventions, which made both code review and onboarding noticeably cheaper.
All of it shipped in small, reviewable steps next to regular feature work. There was never a rewrite branch to merge, and never a week where the team could not release.
Made the app feel faster
Several banking flows wait on more than one backend call. I redesigned those screens around loading skeletons that match the final layout, so content fills in progressively instead of the page jumping when the last response lands. The data did not arrive any faster. The interface felt faster and calmer, which is what a customer actually judges.
Accessibility as part of the definition of done
I brought the key flows in line with WCAG 2.1: ARIA labelling, full keyboard navigation, focus management in dialogs and multi-step flows, and colour-contrast fixes. Banking is not an optional service, so a screen reader user hitting a dead end is a defect like any other.
Outcome
- 56% fewer defects in the areas I refactored.
- More predictable releases, with fewer surprises at deployment time.
- A consistent foundation the team could change without holding its breath.