view my work

My daily work comes around developing application in distributed systems, especially microservices. Working with it over the past 3 years give me a deep understanding. Not only knowing the theories, patterns, and concepts. But also a clear understanding the pros and cons of each of them. From that, I and my team can achieve the balance between development speed along with other factors like consistency, performance, and reliability.

Diagram

Simple design from my TerraJet open-source project (not my real project)

I and my team have used Clean Architecture along with Domain-driven design for our .NET (C#) project, these help us reflect the business domains clearly in the code base. We have designed and implemented complex business while strictly following SOLID, DRY principles, and ACID properties of SQL database. And applied CQRS to clearly separate read and write operations. From that, we can increase query performance easier in case some important APIs needed. Additionally, we effectively utilize the message broker from RabbitMQ for development to AWS SNS/SQS for production, and Outbox & Inbox patterns to implement Event-driven Architecture. To reduce query latency, we leverage the speed of NoSQL databases by using MongoDB, Redis & Elasticsearch. For message consumers, I used Lambda to reduce cost, our system is fine with cold start trade-off. I and my team usually facing other challenges in technical, but we have overcame together and try to deliver features on time.

As a part of my work, I spend time reviewing pull requests and helping my team members improve their skills. Monthly host small meetings to share and discuss new technical knowledge.

Besides that, I also spent time researching and upgrading cloud infrastructure. Migrated system to be managed by IaC tool, Terraform. Used GitLab CI/CD to automate FE, BE, and IaC deployment. Integrated Hashicorp Vault to secure back-end secrets. Set up a reliable ECS cluster with EC2 Spot mode to run and scale microservices apps. This improvement helps my company save 40% cost on EC2 computing. I helped my team fix security issues, optimized cost and performance in AWS. Switch some services to open-source software if needed. In my opinion, mixing between AWS cloud services and cloud-native open source software is a good idea to optimize multi factors when using the cloud.

Diagram

ECS cluster metrics from Grafana

I have built central monitor dashboard and alerts for my team to track and detect issue in all environments.

Diagram

Customized ECS service metrics from Grafana