DEV Community

Cover image for How my company follows Agile + DevOps in daily work
Thy Pham
Thy Pham

Posted on

How my company follows Agile + DevOps in daily work

Summary

  1. We form the dev teams by business domains, for example, Order, Article, or Inventory team.

  2. Each team consists of 1 Product Owner and 4 to 5 devs.

  3. The cross-functional teams can do all Frontend, Backend, DevOps, and QA tasks.

  4. We develop new features within every 2-weeks, called "Sprint."

  5. All teams hold a daily standup in the morning to quickly talk about what we did yesterday, what we're going to do today, and what is blocking us at the moment.

  6. At the beginning of each Sprint, we have a "Sprint-planning" meeting where we plan and estimate new features that we will develop in the next two weeks.

  7. Our Product Owner writes each new feature in one Story ticket on the Kanban board. After that, the devs will split the ticket into smaller sub-tasks. Each sub-task should be small enough to build, test and deploy within one day.

  8. The tickets will move through 5 main columns on Kanban board: Backlog -> In Progress -> In Code Review -> In QA -> Done

  9. We only have one main git branch (also called main). Everyone uses this branch to deploy the code to the development environment for testing. We will deploy the code from this main branch to production at the end.

  10. (Note) We containerize all the services and use Terraform or CloudFormation to define the infrastructure.

  11. When devs start with a new feature, a new feature branch will be branched off from main with the ticket name at the beginning of the branch name, for example, FEAT-2192-build-create-order-endpoint. All code commits must have the ticket name too.

  12. After implementing the new feature, the devs will make a Pull Request for others to review. At this point, the CI/CD pipeline will run the tests and linting. Only when all pass, then the Pull Request is ready.

  13. Code reviewers will check for coding style, tests, potential bugs, etc. And approve it if everything is ok.

  14. The devs merge new code to the main branch. After that, CI/CD pipeline will deploy the code to the development environment.

  15. Other devs or QA engineers in the same team will test the new feature on development environment.

  16. Finally, when QA engineers approve, someone can click the deploy button and trigger CI/CD pipeline to deploy the code to production.

  17. At the end of the Sprint, we have a Retrospective meeting where the team discusses what went well and what not to improve the process next Sprint.

  18. Continue to Step 1. and start a new Sprint.

The tech stack that we use

  1. Git, Github for version control.
  2. Github Action to build CI/CD pipelines.
  3. Kubernetes and Docker.
  4. Terraform to define infrastructure.
  5. AWS services.
  6. Jira for Kanban board, Confluence for writing documents and Wiki pages.
  7. Slack for communication.
  8. Bitwarden for storing password.

Discussion (11)

Collapse
andrewbaisden profile image
Andrew Baisden

Great insight thanks for sharing.

Collapse
deltd3v profile image
deltd3v

When you pushing a deadline..throw this stuff out da window

Collapse
murunwas profile image
murunwas

Pure gold... Thank you for sharing ❤️

Collapse
mrahmani71 profile image
RAHMANI Mohammad

Thanks ❤️

Collapse
curiousdev profile image
CuriousDev

Are you using any branch for the productive code? It looks like this is not the case, so is it correct, that a certain commit of your main branch, which is for development, contains the productive code?

Collapse
thyphamdev profile image
Thy Pham Author

Hi there!
We use the main branch for both the development and production environment. So new commits to this branch are always automatically deployed to the development env. But we only deploy specific commits to production manually.
So yea, the feature branches (branched off from the main branch) always include the latest productive code.

Collapse
sostenemunezero profile image
Sostene MUNEZERO BAGIRA

Amazing post, but just wondering why do you need ticket name for each feature?

Collapse
thyphamdev profile image
Thy Pham Author

Hi Munezero,

Thank you for being interested in my post!

We add the ticket name for the following reasons:

  1. To make it easier to filter the branches based on feature
  2. To link the branch to the ticket on the Kanban board so that other devs can open the ticket directly for more details. (inversely open the branch from the ticket)
  3. Also, help us easily track which features are on the development environment or are deployed to production when looking at the history.

Have a nice day! :)

Collapse
pgarzina profile image
Petar Garžina

This is how we do it as well. Main branch and feature branches. Rather easy to maintain and do deployments. Has its pros and cons though.

Collapse
owsilva profile image
Walace Silva

how is the process to make new releases? does you make tag branches in the github?

Collapse
thyphamdev profile image
Thy Pham Author

Hi Walace,
We only use the main branch to deploy new code to Production. The team will manually choose a specific commit on this branch for deployment.