# Software Development at Relinns

## Document Details

Version 1.0.4 | Last updated at 24/12/2024

<table><thead><tr><th width="198">Aspects</th><th>Details</th></tr></thead><tbody><tr><td><strong>Objective</strong></td><td>To ensure the whole team, internal and external, have a proper understanding of the development process at Relinns.</td></tr><tr><td><strong>Scope</strong></td><td>All developers who are working on Relinns Internal projects</td></tr><tr><td><strong>Purpose</strong></td><td>Keep all developers, project managers, and clients in sync regarding the project development process.</td></tr></tbody></table>

## :motorway: Generic Development Flow

The generic process of development at Relinns is as follows.

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FWnoPvawvnZHhxhGltmzZ%2Ffile.drawing.svg?alt=media&#x26;token=f76463b1-7758-43f5-aa92-38d57ddbca42" alt="Generic process of development at Relinns" class="gitbook-drawing">

## :gear: Development Stages

### 1. Project Discovery & Planning

Project discovery aims to identify all the requirements (both functional and non-functional) along with initial timelines, product roadmap and other activities such as risk management planning. Some of the major activities of this stage are as follows.

:white\_check\_mark: <mark style="color:blue;">**Product Road Map**</mark>

A product roadmap is used to give the team an overall understanding of coming features and expected timelines.

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FnX4uaUMLaqWT3ADPsBLh%2Ffile.drawing.svg?alt=media&#x26;token=cd0a148e-992c-4939-8f54-a526d22a417f" alt="Genric Product Roadmap" class="gitbook-drawing">

{% content-ref url="sample-product-roadmap" %}
[sample-product-roadmap](https://docs.relinns.com/sample-product-roadmap)
{% endcontent-ref %}

:white\_check\_mark: <mark style="color:blue;">**Requirement Collection**</mark>

Requirement collection is the activity where BA try to find out all the requirement, both functional and non-functional. It majorly comes under four buckets.&#x20;

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FvYnlpmmeB0Uq5xFjJZTV%2Ffile.drawing.svg?alt=media&#x26;token=4e8eb3cb-200a-44ed-9138-726a63539aa4" alt="Requirement Collection" class="gitbook-drawing">

:white\_check\_mark: <mark style="color:blue;">**Statement of Work**</mark>&#x20;

Once we have all the information collected in the above activity, we will document the same, and this document will work as the base in the project envisioning stage.&#x20;

here is the sample scope of work document looks like

{% content-ref url="sample-scope-of-work" %}
[sample-scope-of-work](https://docs.relinns.com/sample-scope-of-work)
{% endcontent-ref %}

:white\_check\_mark: <mark style="color:blue;">**Risk Management Plan**</mark>&#x20;

Risk management planning includes assessing and controlling risks in an optimized manner.

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FWDmhi9zW1bC2jqU05QVg%2Ffile.drawing.svg?alt=media&#x26;token=08f55a67-c3c9-46d0-a179-83cb1607b435" alt="Risk Management Planning" class="gitbook-drawing">

an Here is example of issues that can cause system failures

<table><thead><tr><th width="72.33333333333331">SN</th><th width="130">Failure Point</th><th width="163">Description</th><th width="97">severity<select><option value="8e02c3aac04e49dd836ad80d7a035a4f" label="Critical" color="blue"></option></select></th><th>Mitigation Plan</th></tr></thead><tbody><tr><td>1</td><td>Nginx Failure</td><td>NginX failure due to un-responsive APIs</td><td><span data-option="8e02c3aac04e49dd836ad80d7a035a4f">Critical</span></td><td>1. Add scripts to auto-reload the NginX<br>2. Trigger email to relevant stakeholders</td></tr><tr><td>2</td><td>Analytics</td><td>Sudden spike in server resource consumption</td><td><span data-option="8e02c3aac04e49dd836ad80d7a035a4f">Critical</span></td><td>1. Count and Analytics API to be managed on the Database Read Replica<br>2. Analytics should not be on real-time data<br>3. Static Counter should be managed</td></tr></tbody></table>

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**Effort Estimation**</mark>

the Once we have the requirement in place, We will assess high-level effort required and will propose a timeline based on the same.

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FaWiEkqqXKMQmacQpoYkg%2Ffile.drawing.svg?alt=media&#x26;token=ea298a3b-0764-4f43-b0ca-ac14db2d8a11" alt="Generic Effort Estimation process" class="gitbook-drawing">

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**Business Changes Management**</mark>

Business change management is the process of documenting all the business changes done by the team. e.g. Direct Database patch.

Here is an example of the same

<table data-header-hidden><thead><tr><th width="81">SN</th><th>Change Summary</th><th>Description</th><th>Other Details</th></tr></thead><tbody><tr><td>1</td><td>New Plan Creation for WebHopers</td><td>1. A new plan has been created for XYZ. It will be a king Plan with 100000 messages/month</td><td><p>Requested by:  ABC<br>Approved by: Rohit Garg </p><p>Date: 28/12/2021</p></td></tr></tbody></table>

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**Product Changes Management**</mark>

Product change management is the process of documenting all the product changes done by the team and ensuring the compatibility of the application with all previous versions. e.g. Market feedback, new features, etc.

Here is an example of the same

<details>

<summary>[Example] Product Change 1.1</summary>

**Change Summary**

Type: New Feature

Name: Telegram Bot

Change Summary: Client should be able to connect the bot with their Telegram Channel and Manage the flow and other tools from BotPenguin

#### Change Description

**CP: Bot Creation**&#x20;

The Client will follow the same pattern as for the Facebook bot.&#x20;

1. The user clicks on the ‘Create Bot’ and Navigates to the bot creation flow
2. The client selects for the Telegram bot under the platform
3. In the next steps, the User will be asked to enter the Bot Token which has been generated from the BotFather
4. On successful registration, a bot will be created. The name and Profile pic will be fetched from the telegram itself.&#x20;
5. This bot will be treated as one bot and will be similar to the Facebook Bot

</details>

### 2. Project Envisioning

Project envisioning aims to give visual understanding to the product using user journey flows and XD design prototypes. Some of the major activities of this stage are as follows.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**User Journey Flows**</mark>

This activity covers how a user travels in the application for primary use cases. An example of the same is as follows

<img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2Fa1DVz9zxAgPUiz32v21A%2Ffile.drawing.svg?alt=media&#x26;token=1f8d3c73-70e0-4d3c-9801-983bbded9bd3" alt="Sample appointment booking user journey" class="gitbook-drawing">

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**XD Design Prototype**](https://xd.adobe.com/view/61f5abd4-b1e6-4709-9ba8-835b59d8c6d4-34a6/screen/86e5fd4a-fa6b-42b2-ae2f-8674b010a155/?fullscreen)

At this stage, We will build a clickable prototype of the application which allows users to see how the app will look and Feel.

### 3. Development Planning

It’s time for the developer to work and start building the blueprint of the product. The developer aims to define the architecture, code standard, and other development planning.

Some of the major activities of this stage are as follows.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**App Architecture**</mark>

The development team will create a high-level diagram of the system based on the current and future requirements which will allow seeing how requests & responses to user requests will flow in the system. An example of the same is as follows

<figure><img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2Fca0vwQzOk22IuKxPL7Sr%2FSample%20Physical%20Architecture-Copy%20of%20Page-1.drawio.png?alt=media&#x26;token=6229f9e1-ab2e-4482-8487-392ec7792d43" alt=""><figcaption><p>Sample Architecture Diagram</p></figcaption></figure>

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**Tech Stack**</mark>

The development team will also do the research and list down the best-suited tech stack for the product. It will be something similar to the below example.

**Development Tech stack**

| Component                         |         Technology         |    Version    |
| --------------------------------- | :------------------------: | :-----------: |
| Android App                       |           Kotlin           |     2.0.0     |
| iOS App                           |            Swift           |     6.0.3     |
| Website and Admin panel front-end |      Angular/React js      | 17.0.0/18.0.0 |
| Backend                           |      Node.js(express)      |    22.12.0    |
| Backend                           |           Python           |     3.13.1    |
| Backend                           |         Spring Boot        |     3.1.12    |
| Hosting Server                    |             AWS            |       -       |
| Database                          |           MongoDB          |      8.0      |
| Domain                            |           Godaddy          |       -       |
| Security                          | SSL/TLS 1.2 and AWS Shield |       -       |

**Deployment Tech Stack**

| Component                      |                           Technology                          |
| ------------------------------ | :-----------------------------------------------------------: |
| Virtual Machine                |                            AWS EC2                            |
| Database                       | MongoDB hosted on one EC2 instance/MongoDB Atlas(Self Hosted) |
| Web Server                     |                     NGINX (Reverse Proxy)                     |
| API Gateway                    |             NGINX (Reverse Proxy)/AWS API Gateway             |
| Application Firewall (Layer 7) |                           AWS Shield                          |
| CDN                            |                         AWS CloudFront                        |
| Storage                        |                         AWS S3 Bucket                         |
| DNS                            |                          AWS Route 53                         |
| Monitoring & Alerting          |                        Native Developed                       |
| CI/CD                          |                         Gitlab/Github                         |

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)<mark style="color:blue;">**DB Diagram**</mark>

The development team will also create the database diagram to make it scalable and extendable from day 1. A sample of the same as follows:

<figure><img src="https://846284488-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0VfxOO8mtitkakMyGhov%2Fuploads%2FZUSw8pLeUwIqiaQOLJVD%2FSample%20Database%20Diagram-Copy%20of%20Page-1.drawio.png?alt=media&#x26;token=6cc8883c-ad6c-4daf-8505-7c559b386ef3" alt=""><figcaption><p>Sample Databse Design Diagram</p></figcaption></figure>

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Client Check List**](https://docs.google.com/document/d/1TxFZukyPv59DcpLB-ateRP3lnfoHO_tN-CKs8-KrS8s/edit?usp=sharing)

In this activity, we will list down all the things which are required from the client end.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Delivery Timeline**](https://docs.google.com/document/d/1ZkUpJjvmRpqj3m3RUOxtSNQGHznI9mtqhUTTvpWekMQ/edit?usp=sharing)

This activity primarily deals with providing possible timelines.

### 4. Development

Let’s code and build what we planned. The developer aims to create and integrate the functionalities in the product and make it testable for QA and UAT team. Some of the major activities of this stage are as follows.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**API Documentation**](https://documenter.getpostman.com/view/20138819/Uze1wQCf)

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Code Guidelines**](https://www.notion.so/reltech/Coding-Guidelines-5f677b10bb4447149f94a9465d681255?pvs=4)

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Code Review**](https://docs.google.com/document/d/1359X3_fBsUDqBaTQo1mjs9Yvc8FFIm9OS7a0ucIAlyI/edit?usp=sharing)

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)**Code Versioning and Management -** Managed on GitHub

### 5. Testing

Don’t call it a feature, It’s a bug. QA team aims to ensure that none of the bugs are remaining for UAT and Go live in this phase. Some of the major activities of this stage are as follows.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Test Scripts**](https://docs.google.com/spreadsheets/d/1gdam8cpaeNTUhHOh5wNo5eRJQsmha41h5L2vDCMuWvY/edit?usp=sharing)

Under this activity, The QA team will create the test scripts for all the possible scenarios and then execute them once an app is in testing. Any test script has below structure on high level

<table><thead><tr><th width="107">Test Case ID</th><th>Test Case Description</th><th>Expected Result</th><th>Actual Result</th><th>Result (Pass/Fail)</th><th>Defect ID (if failed)</th></tr></thead><tbody><tr><td>TC_001</td><td>-</td><td>-</td><td>-</td><td>Fail</td><td>MV1-0234</td></tr><tr><td>TC_002</td><td>-</td><td>-</td><td>-</td><td>Pass</td><td>-</td></tr><tr><td>TC_003</td><td>-</td><td>-</td><td>-</td><td>Pass</td><td>-</td></tr></tbody></table>

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**UAT Acceptability Criteria**](https://docs.google.com/document/d/1s6T92uYE48AVoUvXN_PD7QJrVXaD326rd9Z7uH1nfXg/edit?usp=sharing)

This activity is to identify when you can make the product changes live for users. It depends on multiple factors such as experimentation rate, stage of product, etc

### 6. Deployment

This is where we bring our product to customers. Some of the major activities of this stage are as follows.

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Software Deployment Plan**](https://docs.google.com/document/d/1FN30g6sFWU14_Xe7ZloRZ2sEdLev0LINcEo24_92f-8/edit?usp=sharing)

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Security Review**](https://drive.google.com/file/d/1b9FoxAj3y2xnmtbUO3h9HSqZqRyW1TDl/view?usp=sharing)

:white\_check\_mark:[ ](https://docs.google.com/document/d/1dH-HQA5yREOkd-G8kLxCVKW-C64c37E2grvFOWlV61k/edit?usp=sharing)[**Release Update**](https://docs.google.com/document/d/1E7n_3OF3FfM6q6M4M70UN_YKFQP5Kl37x3AHmLXnYfg/edit?usp=sharing)
