My Cloud computing journey

Hoang Le
INNOMIZE
Published in
9 min readNov 16, 2019

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 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?

Firstly, I’d like to introduce myself. My name is Hoang, I am the Co-founder and CTO of InnomizeTech. My title is CTO but I am a full-stack developer and software architect, passionate about Cloud Computing, Serverless, DevOps, Machine Learning, and IoT.

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

Before transitioning to Cloud computing, I worked for an outsourcing company in Vietnam for four years after I graduated from University.

  • 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

In the third year, I started my first Cloud computing project. We had a project from a US-based client to build an application for activating mobile devices for various carriers. I was the technical lead of that project. After studying the requirements, we selected the following technology stack:

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 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 in their data center. Then we still use Beanstalk for our SIT/UAT environments, but we had to write documentation of around 10 pages to describe how to set up Web Servers, App Servers, NGINX, Node.js, RDS, etc. A lot of back-and-forth communication between our development team and infra team because of issues and errors. But finally, we have successfully deployed, and 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 established a technical club to study and share about cloud computing. We learning cloud computing concepts and doing some hands-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 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

In August 2017, I started my own job. We had a project for building a core/shared backend API for various client applications including SPA, Mobile App, and Integration services. After clarifying requirements with our clients, we have selected the below technology stack:

  • AWS Lambda uses Node.js runtime and Amazon API Gateway that utilize Auth, Caching, Logging, Monitoring Throttling, and Bursting Elastic features for backend services.
  • We use the Serverless framework for building API, deploying and configuring AWS resources such as S3 bucket, SNS topic, Queue, and 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 used the Mutliplebranch pipeline.
  • And more…

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

In relation to DevOps, we have all the stuff scripted and provided CLIs to allow building and deploying 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 and then remove it completely without manual steps. Automation reduces human mistakes and increases productivity and quality.

My own company is officially established

In October 2018, we officially established InnomizeTech, our mission is to create awesome products that will make your everyday life easier. My aim is to build a professional team with passion, enthusiasm, and talent that can help bring more value to our customers and help them move fast and in the right direction.

The experienced engineering and development team at Innomize are committed, and 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

I and my team have been learning, and building a lot of real-world cloud-based applications for many years. To prove to our clients that we had the experience to do their jobs, we studied and took some AWS exams and finally, our team got AWS certifications:

  • 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

In early 2019, we had a contract with another client from the US, we will help their development team maintain and build new features for their micro-services (the integration component for their e-commerce system). They used Scala as their programming language, and Gradle as the build tool, their developer implemented some Gradle tasks to deploy the Lambda function, create the API gateway, and other required AWS resources. Here is the technology stack I can summarize:

  • 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 interface 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 work 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 to create CodeCommit repositories, and define CodeBuild projects, and CodePipelines automatically when creating a new project. New microservices can be up and running by using a single command.
  • We suggest using the AWS SAM framework for building Lambda functions 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

Recently, we have been working on some projects that apply Micro-service architecture. We continue the above technology stacks with some changes/improvements:

  • We used NX Dev Tool to define our workspace on a Monorepo. We built our CI/CD pipeline that supports deploying 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 use Okta, AuthO for authentication and authorization.
  • CI/CD with AWS Develop Tools, Jenkins, Azure DevOps.
  • Along with using Node.js runtime, we also use Java/Scala and .NET Core runtime.

Other works

We focused on AWS as the primary cloud vendor and wanted to become an active development service by partnering with them. Along with cloud computing, our team also has experience in other technologies. We work with the latest technologies specializing in Web Development, Mobile Development, Cloud Computing (AWS, Azure), DevOps, and Automation Testing. Refer to our Services section on our website for more information.

We continue working on some other projects such as:

My future plan

My quote is “Learn to share and share to learn”, I am continually challenging myself on the advancements and changes of the technologies. I wanted to meet more people, talk, work, and help them. I do have a few things on my list so I am going to do:

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

I cannot describe anything about myself in 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, an offshore team, or need consulting about the AWS cloud, Serverless architecture, and so on, then get in touch with us, we can help you!

Thank you for reading!

--

--

Hoang Le
INNOMIZE

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