Joanah Fermin Tan
Senior C# / .NET developer
Good process makes good software.
Good engineering practice has always been the foundation of maintainable software that meets users' needs. With AI-assisted development, it matters even more.
Build
- C#, JavaScript
- .NET Framework (MVC)
- .NET Core (REST APIs)
- Entity Framework, Dapper
- MS SQL Server
- Azure DevOps, Git
Practice
- Team leadership
- Business analysis and requirements
- Layered system design, clean code
- Agile & Scrum
- Root-cause troubleshooting
- Test design and quality assurance
AI
- AI-assisted development
- Claude Code
How I build with AI
My workflow and principles for efficient AI-assisted development.
Before any code is written
Explore
Discuss the problem and goals with AI, tapping its broad technical knowledge to explore the options, then decide together.
Document
Write down the project decisions, what the team likes and doesn't, and a list of what to build.
Specify
Write each feature out in detail before any coding, a batch at a time.
Then the code
Build
AI codes one feature at a time, working from its write-up.
Test and AI review
AI reviews the code and writes unit tests.
Human review
Every change is read and approved by a person before it goes in.
Refine
Tick off the feature and move to the next one.
Discipline and continuous improvement
Any change of plan goes into the docs first, then the code.
AI is only as accurate as the guidance it gets. Every lesson, good or bad, goes back into the docs, so future results grow more accurate, judged by the team's own standard.
From self-taught to senior developer
My professional experience, newest first.
Senior Software Developer and Team Lead
Promoted to Senior Developer and now lead the team. Drive the analysis and troubleshooting of critical production issues, guiding everyone to resolve them together.
Teach technical concepts to the team, to spark curiosity and keep everyone improving.
Led the overhaul of the client's billing, with complex accounting rules and calculations.
Build and maintain web applications and REST APIs in C#: MVC on .NET Framework, and APIs on .NET Core, with Entity Framework and MS SQL Server. Take part in system analysis, requirements gathering and solution design, working closely with clients and stakeholders using Azure DevOps, Agile and Scrum.
Associate Software Engineer
Left a government role to switch to full-time software development, joining Accenture and training across several technologies.
Supported production batch processing for a large U.S. utility company: monitored job runs, automated routine tasks, and troubleshot failures, resolving them or escalating to the right teams. Kept the goal clear throughout: becoming a developer.
Self-taught C# Developer
Started with C# WinForms and SQL basics, then pushed far beyond them with no one asking: studied industry practice on her own, such as short focused functions, shallow nesting and a layered architecture, and moved from hand-written SQL to Dapper and then Entity Framework.
Found a problem worth automating: the department processed a very high volume of tax payments, mostly real property, and the work was all manual. Built a WinForms desktop app that automated the workflow for 20–30 staff.
Sole developer and business analyst across the whole lifecycle: database design, UI, coding, testing, deployment, training and support. Turned a manual process into a faster workflow for the whole department, and building and supporting the app grew into most of the work.
Software Quality Assurance Engineer
First role in IT, on an organized team of about 20 led by an experienced project manager. Learned Scrum the disciplined way: sprint planning, stand-ups and retrospectives.
Designed and ran test cases in SpiraTest, covering white, black, grey and regression testing, and helped keep quality high every sprint.
Data Encoder
Processed mail tracking numbers and managed data for Social Security IDs before release.
What I believe
About building software as a team.
Speak up, listen well
A team does its best work when everyone feels safe to ask questions and say what they think. Problems come out early, and the best idea wins, whoever it came from.
Everyone owns quality
Analysts, developers and QA share it. Nothing is accepted just because it was handed over, so mistakes are found early and not when delivery is close.
Talent needs good habits
Strong people each working their own way don't add up to a strong team. Shared engineering practice lets them help each other and deliver better.
Keep learning from the industry
Nobody has to reinvent everything. Learn from what the industry already knows, and choose carefully what actually helps the team.
Good software comes from a team that feels safe to speak, questions everything and keeps learning.