Codence – Developer Software engineer Portfolio

Build Better Software, Seamlessly Together

Hi, I'm Ballerina

I’m a software engineer who turns complex ideas into performant, user-friendly web applications.

Clean Code Begins with Confidence

I believe that testing is not an afterthought—it’s a foundation. My approach to testing is proactive, meaning I write tests early and often to guide development and prevent issues before they arise. Rather than chasing bugs later, I focus on writing code that’s stable from the start.

Automated testing plays a key role in my workflow. It ensures that every change I make is validated against expected behavior, while thoughtful debugging practices help uncover edge cases and optimize performance. This balance of preventive testing and deliberate debugging results in software that’s not only functional, but also trustworthy and maintainable.

Skills & Technologies

Tools I use to build, ship, and scale.

Debugging Workflow

Precision Debugging, No Guesswork

Structured Logging

Here's a timeline of my journey through development roles, freelance work, and internships — each step sharpening my technical and problem-solving skills.

Breakpoints & Step-Through Debugging

Here's a timeline of my journey through development roles, freelance work, and internships — each step sharpening my technical and problem-solving skills.

Error Handling & Stack Traces

Here's a timeline of my journey through development roles, freelance work, and internships — each step sharpening my technical and problem-solving skills.

Performance Profiling

Here's a timeline of my journey through development roles, freelance work, and internships — each step sharpening my technical and problem-solving skills.

TDD / BDD Practices

I follow a Test-Driven Development (TDD) and Behavior-Driven Development (BDD) mindset to create software that's intentional, reliable, and easy to maintain. By writing tests before the implementation, I clarify what the code should do—before it does anything.

With TDD, each feature begins with a failing test that defines the expected behavior. This guides the development process, reduces ambiguity, and keeps the code focused. Once the code passes the test, I refactor with confidence, knowing everything still works as intended.

Case Studies

Testing in Action

Exploring

Catching a Regression Before Release

Thanks to a Jest unit test covering the cart reducer logic, the issue was caught during CI before it reached staging.

What People Say About Me

Feedback from those I’ve worked with — clients, collaborators, and mentors who’ve seen my code, communication, and consistency in action.