Luan Phung
Published on

Feature Development Flow

Authors
  • avatar
    Name
    Luan Phung
    Twitter

The story

Four years ago, I held the position of technical leader at an outsourcing company. During that time, I utilized the waterfall model, which followed a structured process:

  • Initially, I conducted meetings with customers to ascertain their requirements. Subsequently, I documented these requirements and formalized them into an agreement.
  • Following the agreement, the design team commenced their work, generating mockups and designing the UI/UX.
  • Once the design phase concluded, I spearheaded the development of the project's codebase, delegating tasks to team members for various modules.
  • Upon completion of development, the product underwent deployment in a test environment, where our dedicated testing team rigorously evaluated its functionality.
  • Following thorough testing, the product was deployed onto servers and officially launched.
  • Post-launch, a maintenance process was established in accordance with the previously agreed-upon terms.
Waterfall Model

This model is effective for small-sized outsourcing projects where requirements are often clear. However, when dealing with larger projects, customers tend to change requirements frequently. This is when I realize the necessity of employing another model to better handle this challenge.

The update flow

Gathering requirements & feedback

The process begins with the product team collecting user feedback and requirements. Subsequently, both the product and engineering teams collaborate to break down these inputs into smaller work items or user stories.

Developers then select these items during sprint planning meetings, which typically span 1-2 weeks. In the case of larger projects, tasks may span multiple sprints.

Engineering managers or tech leads play a crucial role in prioritizing and sequencing items across sprints to effectively manage team capacity.

The software utilized in this process includes tools such as Microsoft Word, Excel, and Notion for managing requirements, while Jira is employed for ticket and user story management.

Development

Once the sprint is planned, developers begin building. For certain large and critical features, it is necessary for us to convene and deliberate on the design patterns and architecture we will implement, ensuring the product's scalability and maintainability.

When modifications to the database schema are necessary, careful consideration is essential. We need to assess whether such changes will impact other data components.

Developers utilize Git for source control, creating feature branches to develop new functionality without affecting the main codebase. This approach effectively isolates their work. In cases where alterations to the database schema are needed, migration scripts are also developed within branches. Given the potential risk of data corruption, schema migrations undergo extensive testing

Review

Once the code is ready, developers open a pull request for the team to review. This knowledge sharing effectively identifies and resolves potential issues at an early stage.

After approval, the code gets merged into the main branch after running comprehensive and rigorous unit tests, which play a pivotal role in detecting and rectifying bugs early.

Upon successful testing, the feature is merged into the main branch, triggering the initiation of the CI/CD pipeline. Utilizing tools such as GitHub Actions and Jenkins, the code is automatically built, tested, and deployed across multiple environments, including development, testing, and staging. Ensuring validation across these environments is imperative, aligning the staging environment with the production infrastructure to maintain consistency.

Testing & Deploy to Production

QA engineers thoroughly validate functionality, performance tests, API tests and more.

When the build passes all checks, it goes to UAT. UAT stands for user acceptance testing. The product team, QA, and developers all validate the features together. Release candidates that pass UAT proceed slowly to production.

Feature & Bug Monitor

Throughout this process, we need to monitor metrics, logs, and traffic for any production issues. Bugs are prioritized and fixed to ensure that the feature functions as expected and does not negatively impact other business metrics.

Summary

Our feature request undergoes a journey through design, development, testing, and incremental rollout before being integrated into the software for end-user use.