My Cloud computing journey

Hoang Le
Hoang Le
Nov 16, 2019 · 9 min read

Cloud computing is a buzzing word nowadays. It appeared as early as 1996, with the first known mention in a Compaq internal document (per Wiki). Many companies are joining the cloud computing journey and archived a lot of benefits.

I have been working on various cloud computing projects from start to finish; involved in the full project lifecycle, including design, planning, development, deployment, testing, maintenance, and support. Some clients prefer to use their on-premise data centers, but most of my projects used the cloud — Amazon Web Services, Microsoft Azure and Heroku. So, I wanted to write this post to share my cloud computing journey. My hope is to encourage you to build secure, scalable, highly available and cost-effective cloud applications. Learn to share and share to learn will help us all grow, don’t you agree?

If you are new to the cloud and wanted to explore more information, check out some articles as below:

Cloud computing from Wiki

This is a lengthy article. So, if you prefer to simply view a particular topic, you can use the table of contents below.


Who am I?

With 7+ years of experience in software development (web, desktop, and mobile), systems integration, Cloud computing, DevOps engineering, project management, and agile methodology, I thrive working both independently and collaboratively in a team, and have strong leadership and communication skills from working directly with both technical and non-technical stakeholders.

Starting my career as a software developer

  • For the first two years, the primary programming language I used was C# (AWS .NET WebForm and AWS .NET MVC).
  • For the next year, I transitioned to another role, leading a team working with system integration stuff using WSO2 and BizTalk, among other tools. I had a chance to work with our client’s CTO. We had a lot of fun and we did a great job.

The beginning of my cloud computing journey

Actually, it isn’t a real cloud-based application, since we used only a few cloud services to build the app. We have built the app and used the Elastic Beanstalk service for hosting. I have studied Jenkins and built a Jenkins job for analyzing code, building, testing, and deploying to the Elastic Beanstalk app. Here is the diagram of the CI/CD I’ve built at that time:

We initially hosted the application on Elastic Beanstalk apps in order to apply our CI/CD script using AWS Beanstalk plugin on Jenkins for deployment. However, our client wanted to host it on their data center. Then we still use Beanstalk for our SIT/UAT environments, but we had to write documentation around 10 pages to describe how to set up Web Servers, App Servers, NGINX, Node.js, RDS, etc. A lot of back and forth communications between our development team and infra team because of issues and errors. But finally, we have successfully deployed, the app is up and running.

We kept working on that project for around a year. While developing new features, I also learned Ansible and built some playbooks to allow my client to deploy the app automatically without manual steps.

  • Continuous Deployment — Deploying A Node.Js App To AWS EC2 Using Ansible

At that time, I and my co-workers have established a technical club to study and share about cloud computing. We learning cloud computing concepts, doing some hand-on exercises with AWS and Microsoft Azure. You can visit our Facebook page to see our activities and great memories.

Before leaving the company, I have studied and shared my CI/CD experiences. I have presented this presentation for my promotion to the Senior Engineer position (I have changed a few things to share with everyone).

My startup journey is just started

  • AWS Lambda using Node.js runtime and Amazon API Gateway that utilize Auth, Caching, Logging, Monitoring Throttling, Bursting Elastic features for backend services.
  • We use the Serverless framework for building API, deploy and configure AWS resources such as S3 bucket, SNS topic, Queue, DynamoDB. At this time, we used JavaScript as the primary programming language.
  • Amazon Cognito User Pool for authentication and authorization.
  • Amazon Aurora for the relational database. We keep using Sequelize and Liquibase.
  • Amazon Elastic Cache (Redis) for in-memory caching.
  • Other AWS services we have used such as VPC, S3, SNS, SQS, CloudWatch, Route53, Certification Manager, AWS System Manager, AWS Parameter Store, X-Ray
  • Angular for the frontend app. Static hosting with S3 and CloudFront.
  • Jasmine, Protractor for unit test, integration test and E2E test.
  • We still use Jenkins for our DevOps server. But instead of defining the job manually on the admin console page, we wrote a Jenkinsfile that using the Mutliplebranch pipeline.
  • And more…

We kept applying the same stack to a few projects for other clients and continuously improve and refactoring our core modules/libraries. We have delivered and received positive feedback from our clients. The applications were running well, lower cost, high availability, secured.

In relation to DevOps, we have all the stuff scripted and provided CLIs to allow build and deploy applications automatically. We’ve used CloudFormation to provision and configure infrastructure components such as VPC, RDS. We outlined steps to deploy/remove and send it over to our client, DevOps engineers, they can deploy a new environment using a few commands then remove completely without manually step. Automation reduces human mistakes and increases productivity and quality.

My own company is officially established

Experienced engineering and development team at Innomize are committed, passionate, and continually challenge themselves on the advancements and changes of the technologies we utilize to deliver the most up-to-date and innovative solutions.

We got the first AWS certification

  • 02 AWS Certified Solution Architecture — Associate
  • 02 AWS Cloud Practioner
  • 01 AWS Certified Developer — Associate

We have been with The Coral Edge our partner and primary client. Recently, they officially became the Select Consulting Partner with AWS and we are their Development Team.

A few more serverless projects

  • Each microservice has its own Lambda function and API Gateway as the original design. They had an NGINX server as a reserved proxy server that will route traffic to AWS API gateways based on the request path.
  • http4s as the interfaces for Restful API.
  • They used the Postgres database and also using Liquibase to manage their database schema and versioning. They used Doobie for functional JDBC for Scala.
  • Sentry for error monitoring and reporting.
  • They do use AWS CodeBuild, AWS CodeDeploy, and AWS CodePipeline to implement CI/CD but it isn’t fully implemented when we join their team.

When our developers working with their team, we have proposed some approaches to enhance and refactor their design:

  • To remove their NGINX server and cost, we suggest they apply the Robust API pattern.
  • We helped design and built a project template in order to add a new microservice easily. Here are some of our ideas:
  • Defining a project template that uses AWS CodeStart which will allow us creating CodeCommit repository, define CodeBuild projects, CodePipelines automatically when creating a new project. New microservices can be up and running by using a single command.
  • We suggest using AWS SAM framework for building Lambda function and defining required AWS resources (i.e. Queue, Bucket, Topic, etc.). Previously, they deployed Lambda and other resources by implementing custom Gradle tasks.

Our most recent cloud computing projects

  • We used NX Dev Tool to define our workspace on a Monorepo. We built our CI/CD pipeline that supports deploy only affected apps by a change instead of redeploying all services. Thanks to the NX team for their idea and awesome tool.
  • Step Functions for our micro-service communication, automated workflow.
  • NestJS for our Restful API that running on AWS Lambda.
  • AWS CDK to provision and configure our infrastructure as code (IoC)
  • Jest, Cypress for unit test, integration test, and E2E testing.
  • Along with using Cognito we also using Okta, AuthO for authentication and authorization.
  • CI/CD with AWS Develop Tools, Jenkins, Azure DevOps.
  • Along with using Node.js runtime, we also using Java/Scala, .NET Core runtime.

Other works

We continue working on some other projects such as:

My future plan

  • Build InnomizeTech stronger, work with more clients and collaborate with more people.
  • Learn more things such as Machine Learning, Deep Learning, Transfer Learning, Convolution Neural Network, IoT.
  • Build my own product.

I cannot describe anything about myself on this post, if you wanted to know more about me and our team, then you can get in touch with me via:

If you are looking for developers, offshore team, or need consulting about the AWS cloud, Serverless architecture, and so on, then hire us, we can help you!

Thank you for reading!

InnomizeTech

We are an offshore software development and IT consulting company based in Vietnam. Our aim is to create awesome products that will make your everyday life easier. As a start-up company, we always put humans on first priority and welcome young people to join our team

Hoang Le

Written by

Hoang Le

Co-Founder, CTO at @innomizetech | Software Architect, Full-stack DEV | Passionate about #cloudcomputing #aws #serverless #devops #machinelearning #iot #startup

InnomizeTech

We are an offshore software development and IT consulting company based in Vietnam. Our aim is to create awesome products that will make your everyday life easier. As a start-up company, we always put humans on first priority and welcome young people to join our team

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade