You are on page 1of 23

Gigachat

PROJECT PROPOSAL
SWE TEAM 1
CMP 3030

Company name: Gigachat


‫‪ID‬‬

‫‪Name‬‬ ‫‪Sec‬‬ ‫‪BN‬‬ ‫‪1st Role‬‬ ‫‪2nd Role‬‬


‫ابراهيم طارق عبد العظيم امين‬ ‫‪1‬‬ ‫‪3‬‬ ‫‪9210014‬‬ ‫‪Testing‬‬ ‫‪Leader‬‬
‫محمود أسامة محمود خطاب‬ ‫‪2‬‬ ‫‪15‬‬ ‫‪9213515‬‬ ‫‪Testing‬‬ ‫‪Sub-Leader‬‬

‫محمد سمير سعيد‬ ‫‪2‬‬ ‫‪7‬‬ ‫‪9210991‬‬ ‫‪Front‬‬ ‫‪Sub-Leader‬‬


‫عبدالرحمن محمد حفنى سيد‬ ‫‪1‬‬ ‫‪21‬‬ ‫‪9210584‬‬ ‫‪Front‬‬
‫اسماعيل رمضان مختار شاهين‬ ‫‪1‬‬ ‫‪13‬‬ ‫‪9210229‬‬ ‫‪Front‬‬
‫محمد طاهر محمد عبد الحميد سند‬ ‫‪2‬‬ ‫‪9‬‬ ‫‪9211000‬‬ ‫‪Front‬‬
‫يوسف محمد عبدالكريم محمد حجاج‬ ‫‪2‬‬ ‫‪34‬‬ ‫‪9211436‬‬ ‫‪Front‬‬

‫مالك حسام عبد الفتاح‬ ‫‪2‬‬ ‫‪4‬‬ ‫‪9210894‬‬ ‫‪Back‬‬ ‫‪Sub-Leader‬‬


‫سارة بشير فكرى‬ ‫‪1‬‬ ‫‪18‬‬ ‫‪9210453‬‬ ‫‪Back‬‬
‫عمرو صالح الدين فؤاد‬ ‫‪1‬‬ ‫‪29‬‬ ‫‪9210774‬‬ ‫‪Back‬‬
‫كريم عالء عبد هللا ابو العينين‬ ‫‪2‬‬ ‫‪3‬‬ ‫‪9210842‬‬ ‫‪Back‬‬

‫عبدالرحمن محمد عبدالفتاح‬ ‫‪1‬‬ ‫‪22‬‬ ‫‪9210587‬‬ ‫‪Cross platform‬‬ ‫‪Sub-leader‬‬


‫محمد عادل محمد عز الدين‬ ‫‪2‬‬ ‫‪10‬‬ ‫‪9211006‬‬ ‫‪Cross platform‬‬
‫أسامة صالح فرج‬ ‫‪1‬‬ ‫‪12‬‬ ‫‪9210195‬‬ ‫‪Cross platform‬‬
‫احمد محمد عمر‬ ‫‪1‬‬ ‫‪11‬‬ ‫‪9210143‬‬ ‫‪Cross platform‬‬

‫عمرو محمد أحمد الششتاوي‬ ‫‪1‬‬ ‫‪31‬‬ ‫‪9210781‬‬ ‫‪DevOps‬‬ ‫‪Sub-Leader‬‬


Table of Contents
List of Figures..................................................................................................................................................IV
1. Back-End Technologies.............................................................................................................................5
A. Used Frameworks | DBMS | Libraries:...............................................................................................5
B. Naming Conventions...........................................................................................................................5
C. Questions & Answers:.........................................................................................................................6
I. Why did we choose NodeJS?..............................................................................................................6
II. Why not Django?.............................................................................................................................6
III. Why not NestJS?..............................................................................................................................6
IV. Why Express?..................................................................................................................................7
V. Why not SQL?.................................................................................................................................7
VI. Why NoSQL?..................................................................................................................................7
VII. Why these naming conventions ?....................................................................................................7
VIII. Why MongoDB not Cassendra?...................................................................................................8
IX. Unit Testing.....................................................................................................................................8
2. Front-End Technologies.............................................................................................................................9
A. Used Frameworks/Technologies/tools/libraries:.................................................................................9
B. Naming Convention:...........................................................................................................................9
C. Questions.............................................................................................................................................9
D. Answers.............................................................................................................................................10
I. React JS.............................................................................................................................................10
II. Technical Analysis.........................................................................................................................11
III. Angular..........................................................................................................................................11
IV. Tailwind.........................................................................................................................................11
V. Bootstrap........................................................................................................................................12
VI. Naming Conventions.....................................................................................................................12
VII. Jest.................................................................................................................................................12
VIII. Mocha/Jasmine...........................................................................................................................12
IX. React Docgen.................................................................................................................................12
3. Cross Platform Team:..............................................................................................................................13
A. Naming Conventions.........................................................................................................................13
B. Used Frameworks..............................................................................................................................13
C. Reasons We Choose Flutter...............................................................................................................13
I. Great portability thanks to a single code base...................................................................................13
II. Pre-built UI widgets.......................................................................................................................13
III. Ideal for MVP development..........................................................................................................13
IV. Previous knowledge.......................................................................................................................13
V. Global community.........................................................................................................................14
D. Reasons We Choose “flutter_test”....................................................................................................14
I. Isolation and Fast Execution.............................................................................................................14
II. Same Codebase as the main application........................................................................................14
E. Advantages over other Cross-platform frameworks..........................................................................14
|Page
I. Flutter vs React Native......................................................................................................................14
II. Flutter vs IONIC............................................................................................................................14
F. Used Dev Tools.....................................................................................................................................15
G. Reasons We Choose Android Studio................................................................................................15
I. very powerful flutter IDE..................................................................................................................15
II. Experience.....................................................................................................................................15
III. Currently the best flutter IDE........................................................................................................15
4. DevOps Team:.........................................................................................................................................16
A. Introduction:......................................................................................................................................16
B. Technologies & Tools:......................................................................................................................16
C. Cloud Hosting Service with HaaS:....................................................................................................16
D. Automation:.......................................................................................................................................17
E. Dockerization ( Containerzation ):....................................................................................................18
F. Monitoring:...........................................................................................................................................18
G. Conclusion:........................................................................................................................................19
5. Testing Team............................................................................................................................................20
A. Code Style.........................................................................................................................................20
B. E2E testing.........................................................................................................................................20
I. Cross-platform:..................................................................................................................................20
II. Front-end:.......................................................................................................................................20
III. Stress testing..................................................................................................................................21
IV. Browser testing..............................................................................................................................21
6. Repository and Task Management Tools.................................................................................................22
A. Common Features of Task Management Tools.................................................................................22
B. GitHub Project Boards:.....................................................................................................................22
C. GitHub's User-Friendly Interface......................................................................................................22
D. Repository..........................................................................................................................................23
E. Conclusion.........................................................................................................................................23
7. Notes........................................................................................................................................................23

List of Figures
Figure 1: sTACK Overflow Developer Survey.................................................................................................6
Figure 2: Stack overflow survey on most common web technology...............................................................10
Figure 3: Ranking of Usage Over Time...........................................................................................................11
Figure 4:Used Cross platform frameworks......................................................................................................15

|Page
1. Back-End Technologies
A.Used Frameworks | DBMS | Libraries:
NodeJS (JavaScript runtime environment)
NPM (Package Manager)
MongoDB (database management system)
Mongoose (library built on top of Mongo)
Jest (Testing)

B.Naming Conventions
Files, Components: PascalCase
Components instances: camelCase
CSS classes: flat case (all lowercase)
Constants: Screaming_Snake_case (Ex: API_URL)
Utility functions: camelCase
Props: camelCase & PascalCase for React Components
Variables: camelCase
Handlers: handleEvent or handleComponentEvent (e.g. handleCommentSubmit)

5|Page
C.Questions & Answers:
I. Why did we choose NodeJS?
According to Figure (1). NodeJS is the most popular back-end library, with 42.65% of respondents
saying they use it. It is also the most wanted front-end library, with 35.25% of respondents saying they
would like to learn it.

Figure 1: sTACK Overflow Developer Survey

Node.js comes with NPM, a powerful package manager that provides access to a vast ecosystem of
open-source libraries and frameworks.
Node.js is built on an event-driven, non-blocking I/O model, making it efficient for handling concurrent
connections and building scalable applications.
Node.js has a large and active community of developers, providing resources, tutorials, and support.

II. Why not Django?


Unable to handle multiple requests at once while Nodejs can do which our project need.
Django's performance is low compared to more lightweight frameworks. This can be a concern for
applications that require extremely high performance or have strict latency requirements.

III. Why not NestJS?


Performance Overhead: Due to its additional abstractions and features, NestJS may introduce a slight
performance overhead compared to Express.js. The additional layers of abstraction and the use of
decorators and dependency injection can impact the overall performance of the application, especially in
high-performance scenarios.

6|Page
IV. Why Express?
Simplicity: Express offers a minimalist and intuitive API, allowing developers to focus on clean and
concise code without unnecessary complexity.
Middleware: Express has a robust middleware system for adding modular and reusable functionality to
applications, such as request parsing, authentication, and error handling.
Routing: Express provides a flexible routing system for handling different types of requests and
implementing RESTful APIs, with support for route parameters and query parameters.
Integration with Node.js ecosystem: Express seamlessly integrates with other Node.js modules and
libraries, leveraging the vast ecosystem of packages and tools available.
Performance: Express is lightweight, efficient, and designed for high concurrency, making it suitable for
large-scale applications and performance optimization techniques.

V. Why not SQL?


Rigidity of Schema: SQL databases require a predefined schema, making it inflexible for evolving or
dynamic data structures.
Scalability Challenges: Scaling SQL databases horizontally can be complex, especially with large data or
high traffic loads.
Performance Impact of Joins: Complex joins on large datasets can impact performance and require
careful optimization.
Limited Support for Unstructured Data: SQL databases are not well-suited for handling unstructured or
semi-structured data.
Lack of Flexibility in Data Modeling: SQL databases enforce a rigid structure defined by the schema,
making it challenging to accommodate changes in data requirements.
In our project we need flexible schema, high performance DBMS

VI. Why NoSQL?


Flexible Data Model: NoSQL databases offer a flexible schema-less design, accommodating
unstructured or evolving data structures.
Scalability: NoSQL databases scale horizontally, distributing data across multiple servers for handling
large amounts of data and high traffic loads.
High Performance: NoSQL databases prioritize performance, optimizing read and write operations for
fast data retrieval and processing.
Schema-less Design: NoSQL databases eliminate rigid schemas, allowing for easier data modeling and
manipulation.
Our Project doesn’t need very complex queries which is the best advantage of SQL.

VII. Why these naming conventions ?


We searched some articles and found that these are the most famous best practices by experienced
people
These are the links:
https://climbtheladder.com/10-react-naming-conventions-best-practices/
7|Page
LinkedIn
javascript/react at master · airbnb/javascript (github.com)

VIII. Why MongoDB not Cassendra?


Complexity of Data Modeling: Cassandra's data modeling can be more complex compared to MongoDB.
It requires careful consideration of data partitioning, denormalization, and query patterns to optimize
performance. MongoDB, on the other hand, offers a more straightforward and flexible data model.
Limited Querying Flexibility: Cassandra's query language (CQL) is designed for distributed databases
and may have limitations in terms of querying flexibility compared to MongoDB's rich query language.
MongoDB provides a wider range of querying operations, including advanced filtering, sorting, and
aggregation capabilities.

IX. Unit Testing


Why Jest?
Jest comes with built-in features like mocking, code coverage, and snapshot testing, so we don't need to
set up additional tools or configurations to start writing tests
It has gained significant popularity in the React community. As a result, it has a large and active
community that can provide support, share best practices, and contribute to the tool's development.
It has a "zero configuration" philosophy, meaning it works well with React projects out of the box
without requiring extensive setup. It automatically detects your test files and runs them, making it easier
to get started with testing.
Why not other testing tools e.g. Mocha/Jasmine?
Jest has a simpler and more intuitive API compared to Mocha and Chai. They provide a declarative and
straightforward syntax that makes it easier to write and read tests.
Jest is an all-in-one testing framework with features like mocking, assertion, and code coverage analysis,
While Mocha is a more lightweight framework that focuses on providing a flexible test runner and
letting you choose your assertion library and mocking library.
While both Jest and Jasmine are capable testing frameworks, Jest may be a better choice for more
complex testing scenarios due to its richer feature set and faster execution speed.
Source: www.browserstack.com/guide/jest-vs-mocha-vs-jasmine

8|Page
2. Front-End Technologies
A.Used Frameworks/Technologies/tools/libraries:
ReactJs. (Java script library)
Tailwind. (CSS Framework)
Npm. (Package Manager)
Jest. (Testing)
React Docgen. (Document Generator)

B.Naming Convention:
Files, Components: Pascal Case
Components instances: camelCase
CSS classes: flat case (all lowercase)
Constants: Screaming Snake case (Ex: API_URL)
Utility functions: camelCase
Props: camelCase & Pascal Case for React Components
Variables: camelCase
Handlers: handleEvent or handleComponentEvent (e.g. handleCommentSubmit)

C.Questions
Why did we use React?
Why not Angular?
Why Tailwind?
Why not Bootstrap?
Why those naming convention?
Why Jest for unit testing?
Why not Mocha/Jasmine for unit testing?
Why Docgen?

9|Page
D.Answers
I. React JS
React is a wide used Java script library our current life, we chose it based on the facilities the library will
give us technically for this project, and what it will give as an experience, such experience can help us in
the market nowadays, we will first take a look on the market analysis of front-end developers.

 Market analysis

Figure 2: Stack overflow survey on most common web technology

According to Figure (2), React is the most popular front-end library. It has a large community and
ecosystem.
According to Figure (3), you can see that React is widely used nearly 80% of the Front-end developers
use, either in work, school, or for freelancing.
React has a large and active community, with over 1.5 million contributors on GitHub. This means that
there is a wealth of resources available to React developers, including tutorials, documentation, and
libraries.
Based on LinkedIn data and industry research, React is the most popular and in-demand front-end
technology.

10 | P a g e
Figure 3: Ranking of Usage Over Time

II. Technical Analysis


React's component-based architecture enables developers to break down their user interfaces into small,
reusable components. This makes it easier to develop, maintain, and scale large and complex UIs.
React has a shallow learning curve and most of us have already started learning it
React uses a virtual DOM, which is a lightweight representation of the actual DOM. This allows React
to efficiently update the UI when there is a change in the data without having to redraw the entire page.
This makes React apps fast and responsive.

III. Angular
React apps are generally faster than Angular apps because of the virtual DOM.
React is fast, efficient, and is growing in popularity because it is lightweight and suitable for mobile
native.

IV. Tailwind
Utility-first approach: Tailwind CSS uses a utility-first approach, which means that it provides a set of
low-level CSS utility classes that can be combined to create any design. This means a lot of control over
CSS and makes it easy to create custom designs.

11 | P a g e
V. Bootstrap
Bootstrap uses a component-based approach, which means that it provides a set of pre-built CSS
components. This can make it easier to get started with Bootstrap, but it can also be less flexible in some
cases.
Bootstrap comes with a built-in design system that can be difficult to customize.
Tailwind CSS is generally faster than Bootstrap. This is because Tailwind CSS produces smaller and
more efficient CSS files.
Tailwind CSS is easier to learn than Bootstrap. This is because Tailwind CSS has a simpler and more
intuitive API.

VI. Naming Conventions


We searched some articles and found that these are the most famous best practices by experienced
people, you will find in the references those articles.

VII. Jest
Jest comes with built-in features like mocking, code coverage, and snapshot testing, so we don't need to
set up additional tools or configurations to start writing tests.
It has gained significant popularity in the React community. As a result, it has a large and active
community that can provide support, share best practices, and contribute to the tool's development.
It has a "zero configuration" philosophy, meaning it works well with React projects out of the box
without requiring extensive setup. It automatically detects your test files and runs them, making it easier
to get started with testing.

VIII. Mocha/Jasmine
Jest has a simpler and more intuitive API compared to Mocha and Chai. They provide a declarative and
straightforward syntax that makes it easier to write and read tests.
Jest is an all-in-one testing framework with features like mocking, assertion, and code coverage analysis,
While Mocha is a more lightweight framework that focuses on providing a flexible test runner and
letting you choose your assertion library and mocking library.
While both Jest and Jasmine are capable testing frameworks, Jest may be a better choice for more
complex testing scenarios due to its richer feature set and faster execution speed.

IX. React Docgen


React Docgen automates the process of generating documentation for components. saving us the time of
writing and maintaining documentation manually.
The generated documentation from React Docgen provides a clear and standardised format for
understanding and using the components. It includes information about props, prop types, default values,
and other relevant details.

12 | P a g e
3. Cross Platform Team:
A.Naming Conventions
Variables: camelCase
Components, Widgets: PascalCase
Files: dash-case
Functions: camelCase
Constants: SCREAMING_SNAKE_CASE
Global variables (if any): PascalCase
(Keep in mind that flutter has its own naming conventions for variables with different access types, so it
will be used side by side with these)

B.Used Frameworks
Flutter
flutter_test

C.Reasons We Choose Flutter


I. Great portability thanks to a single code base
The whole framework depends only on the knowledge of dart, which is an easy to learn language, there
are six platforms available from one codebase: Android, iOS, Web, Windows, macOS, and Linux. It
means you can use the same code to develop and publish your app on all these platforms with a slight
update.

II. Pre-built UI widgets


This makes the development process fast.

III. Ideal for MVP development


Which will be the model of the project – the application will use API made by the backend team -, this
makes the application flexible for the changes that can happen while executing the plan making it easy to
be modified.

IV. Previous knowledge


Most of the team had old experience with flutter which will help boost the process and help other
members without any problems.

13 | P a g e
V. Global community
Because Flutter is an open-source framework anyone can take part in its development and success.
Numerous Flutter specialists from all over the world share their experience, contribute new
documentation, create educational material such as books, courses, etc.
This way, Flutter is constantly becoming better based on the real diverse cases and involving the
expertise of the global community. Furthermore, Google itself consistently delivers prompt fixes and
often updates supporting the framework’s popularity.

D.Reasons We Choose “flutter_test”


I. Isolation and Fast Execution
Unit tests focus on testing individual units of code in isolation, without dependencies on external
resources or the user interface. This isolation allows tests to run quickly, making it feasible to have a
comprehensive suite of tests that can be executed frequently during development.

II. Same Codebase as the main application


It’s a flutter package which will be written with the same development language which as I previously
mentioned we got some knowledge about it.

E.Advantages over other Cross-platform frameworks


I. Flutter vs React Native
Although React Native is based on JS which is a widely popular programming language, flutter
performance is better on mobile applications since React Native uses a bridge to connect the JS code to
the actual native UI component, while flutter doesn’t do that.

Flutter has better documentation than React Native, since React Native depends on external dev kits
extensively.

Flutter has a built-in debugging environment, making identifying and fixing performance issues easy.

II. Flutter vs IONIC


Ionic has plugin issues with animation and vector graphics support, which may cause use problems in
development.

Ionic doesn’t have as many libraries and tools as in flutter.

14 | P a g e
Figure 4:Used Cross platform frameworks

F. Used Dev Tools


Android studio (flutter dev)
Visual studio Code (as a text / json editor)

G. Reasons We Choose Android Studio


I. very powerful flutter IDE
Android studio supports flutter by installing the flutter plugin inside android studio, it supports syntax
highlighting, a full debugging environment and it has a built-in compiler/emulator for flutter.

II. Experience
Most of our team members have already worked before with android studio and are used to its interface,
which will further boost the productivity of the team.

III. Currently the best flutter IDE


Other alternatives will be VS Code which is not an IDE rather a text-editor or IntelliJ Idea and Android
studio is better than IntelliJ since it supports android by native and has a built-in emulator.

15 | P a g e
4. DevOps Team:
A.Introduction:
DevOps is a software development approach that emphasizes collaboration, integration, and automation
between development and operations teams. It aims to streamline the software delivery process and
improve the overall efficiency and reliability of software development. DevOps relies on a variety of
tools, including Docker for containerization, Jenkins for continuous integration and continuous delivery
(CI/CD), and many others, to automate processes and facilitate seamless collaboration between teams.
These tools play a crucial role in enabling organizations to achieve faster deployment, enhanced
scalability, and improved software quality.
In this document, we will dive deeper into the tools that will be used in our project, why we’ve chosen
them and what could have been their alternatives.

B.Technologies & Tools:


This section will be divided into different parts based on the function to be performed.

C.Cloud Hosting Service with HaaS:


Cloud hosting services are essential for businesses, providing scalability, flexibility, and cost-efficiency.
They enable rapid deployment, easy scalability, and offer high availability and robust security, ensuring
business continuity and data protection.
For this part, we will be using Amazon Web Services (AWS), and here are some of the reasons that
brought us to that decision:

 Wide Range of Services: AWS offers a comprehensive suite of services, including computer,
storage, networking, databases, analytics, AI/ML, IoT, and more, providing businesses with
flexibility and scalability to meet their specific requirements.
 Global Infrastructure: AWS has a vast global infrastructure with data centers strategically located
across regions worldwide. This allows businesses to deploy their applications closer to their target
audience, reducing latency and improving performance.
 Scalability and Elasticity: AWS provides auto-scaling capabilities, allowing businesses to scale their
resources up or down based on demand. This ensures optimal performance and cost efficiency, as
resources are dynamically adjusted to match workload fluctuations.
 Robust Security: AWS has a strong focus on security and compliance, providing features such as
encryption, access controls, identity management, and regular security audits. It also offers
compliance certifications to meet industry-specific regulatory requirements.
 Reliability and High Availability: AWS has a proven track record of delivering high availability and
reliability. It provides redundancy within and across regions, ensuring that applications and data
remain accessible even in the event of hardware failures or natural disasters.

And after careful consideration, we’ve decided that AWS, might be slightly better than some of its
competitors such as Microsoft Azure.
Note: AWS provides a free-tier subscription for one year which would be suitable for this project.

16 | P a g e
D.Automation:
Monitoring and automation tools are vital for businesses as they enable proactive monitoring of systems,
applications, and infrastructure, identifying issues before they impact operations. These tools automate
routine tasks, reducing manual efforts and minimizing human errors. By providing real-time insights,
alerts, and facilitating streamlined workflows, monitoring and automation tools enhance operational
efficiency, optimize resource utilization, and contribute to overall system reliability and performance.
For this part, we will be using a tool called Jenkins, and that is for the following reasons:

 Extensibility: Jenkins has a vast ecosystem of plugins and integrations, allowing for seamless
customization and integration with various tools and technologies.
 Open-source Community: Being an open-source tool, Jenkins has a large and active community that
contributes to its development, provides support, and creates a wealth of resources.
 Flexibility in Workflows: Jenkins provides great flexibility in defining and managing complex
workflows, allowing users to easily create and customize pipelines for different use cases.
 Wide Platform Support: Jenkins supports a wide range of operating systems, development languages,
and deployment environments, making it versatile and adaptable to diverse

Although we’ve considered some of its competitors, we’ve decided to land on Jenkins.
Here are some of Jenkins’ competitors and their disadvantages.

 TeamCity: Although TeamCity offers robust features and a user-friendly interface, it is a commercial
tool, which may be a disadvantage for organizations seeking open-source solutions or cost-effective
options.
 Bamboo: Bamboo, an Atlassian product, provides good integration with other Atlassian tools, but it
may lack the extensive plugin ecosystem and flexibility that Jenkins offers.
 CircleCI: CircleCI is a cloud-native CI/CD platform known for its simplicity and ease of use.
However, it may have limitations in terms of customization and extensibility compared to the highly
customizable Jenkins.
 GitLab CI/CD: GitLab CI/CD offers an integrated solution within the GitLab platform. While it
provides seamless integration for GitLab users, it may have a learning curve for organizations not
already using GitLab as their primary version control system.

17 | P a g e

E.Dockerization ( Containerzation ):
Dockerization is vital in modern software development. It simplifies deployment, improves scalability,
and ensures consistent behavior across different environments. By encapsulating applications and their
dependencies into portable containers, Docker enables efficient resource utilization and promotes
collaborative development. Overall, Dockerization accelerates the software development process and
enhances its efficiency.
For that part, we will be using the most recognized and the most famous technology, which is Docker,
and here are some of the reasons why:

 Broad Adoption: Docker has gained widespread adoption and has a large and active community,
making it easier to find support, resources, and pre-built images.
 Portability: Docker containers are highly portable, allowing applications to run consistently across
different platforms, operating systems, and cloud providers.
 Extensive Ecosystem: Docker has a rich ecosystem of tools and services that integrate seamlessly,
such as Docker Compose, Docker Swarm, and Kubernetes, enabling developers to build complex
and scalable architectures.
 Version Control: Docker enables version control for containers and their dependencies, making it
easier to reproduce and manage different application states.
 Efficient Resource Utilization: Docker's lightweight containerization approach optimizes resource
utilization, allowing multiple containers to run on a single host without conflicts.

F. Monitoring:
Monitoring tools are vital in modern software development, providing real-time insights for optimizing
performance, identifying issues, and ensuring a seamless user experience. They enable proactive
problem-solving and continuous improvement, leading to reliable and high-quality software.
For this part, we have decided to land on Grafana and Prometheus to be our monitoring tools, and here
is why:
Some advantages of Grafana:

 Powerful Visualization: Grafana provides a highly customizable and visually appealing dashboarding
capability, allowing users to create interactive and informative visualizations of various metrics and
data sources.
 Extensive Integrations: Grafana supports integration with a wide range of data sources, including
popular monitoring systems, time-series databases, and cloud platforms. This flexibility enables
users to aggregate and visualize data from multiple sources in a single dashboard.
 User-Friendly Interface: Grafana offers an intuitive and user-friendly interface, making it accessible
to users with varying levels of technical expertise. Its drag-and-drop editor and interactive features
simplify the process of creating and modifying dashboards.

18 | P a g e

Advantages of Prometheus:

 Efficient Time-Series Data Collection: Prometheus is specifically designed for monitoring and time-
series data collection, providing efficient storage and retrieval capabilities. It employs a pull-based
model, allowing it to collect metrics from a wide range of targets with minimal configuration.
 Scalability and Performance: Prometheus is known for its scalability and performance, making it
well-suited for large-scale deployments. Its efficient storage format and query language enable fast
and responsive data retrieval, even with a high volume of metrics.
 Flexible Querying and Analysis: Prometheus offers a powerful query language (PromQL) that allows
users to perform complex queries, aggregations, and calculations on collected metrics. This
flexibility enables in-depth analysis and monitoring of system performance.
 Active Development and Community: Prometheus has an active development community, which
ensures regular updates, bug fixes, and new features. The community-driven nature of Prometheus
fosters collaboration, innovation, and ongoing support for the tool.

G. Conclusion:
We’ve talked about some of the technologies and tools that we will use in our project, but these are
subject to change and modification.
Any change and/or modification to these tools will be addressed in the next versions of this document.

19 | P a g e
5. Testing Team
A.Code Style
variable Name, function Name, method Name : camelCase
GLOBAL_CONST, ENV_VARS : CAPITAL_CASE
Class Name, Module Name, Service Name : Pascal
Filenames, directory names : Pascal
formatter: prettier

B.E2E testing
End-to-end testing is a method used to test the whole application or web page from start to finish,
evaluating the entire application flow.

I. Cross-platform:
Appium:
Its UI testing is very useful to mimic real world applications and helps in maintaining
speed, consistency, automation, and scale for the code.
Compared to selenium, it supports android mobile applications.
It allows automation of all mobile applications, and its documentation support is good.
Playwright:
It has very clear documentation, making it user-friendly and easy to understand.
It’s very versatile, as it allows interactions with the various elements of the application.
It offers a straightforward and ready test-generator, which aids in generating locators
and saving time.

II. Front-end:
Cypress:
It supports various types of testing, including E2E testing, integration testing, unit testing, and
components testing.
It allows programmers to use the real-time reloading feature, which enables the programmer to see the
results of testing as they progress.
Its documentation is designed to be very approachable.

20 | P a g e
III. Stress testing

Stress testing, as the name implies, is a method of testing a web application or a mobile one under
extreme stress (extreme conditions), usually done by brute forcing through the whole app.

K6:
It has a very easy syntax compared to Apache JMeter.
It utilizes JavaScript only, maintaining consistency in the code.
K6 utilizes significantly less resources than JMeter for the same load.
It has a very small response time, of less than 400ms.
It has more than 21k stars on GitHub.

IV. Browser testing


Lambda Testing:
It’s easier to learn compared to Browser Stack in terms of UI.
Provides more reliable solutions.

21 | P a g e
6. Repository and Task Management Tools
Task management is a critical component of effective project and team management. In today's fast-
paced, digital world, the use of task management tools has become indispensable for streamlining

processes, improving collaboration, and ensuring the successful completion of projects. This report
explores various task management tools, with a particular focus on GitHub, which offers unique
advantages due to its unlimited user policy.

A.Common Features of Task Management Tools


Before delving into GitHub, it's essential to understand the common features and functionalities offered
by task management tools. These features typically include:

 Task Creation: Tools should allow users to create and organize tasks efficiently, with the ability
to add details, deadlines, and assignees.
 Task Tracking: Tracking the progress of tasks, setting priorities, and categorizing them is a
fundamental function of task management tools.
 Collaboration: Collaboration features like comments, notifications, and file attachments are
crucial
for team communication and coordination.
 Integration: Tools should be capable of integrating with other software, such as calendars, project
management software, or version control systems.
 Reporting and Analytics: Access to data-driven insights on task completion rates, user activity,
and project timelines is valuable for performance evaluation.

B.GitHub Project Boards:


the choice between GitHub Project Boards and other task management tools largely depends on the
specific needs and context of your project or organization:

 If you are heavily involved in software development and version control, GitHub Project Boards
are a natural fit.
 Trello is an excellent choice for simplicity, visual project management, and versatile use across
various industries.
 Asana is suitable for more complex project management, advanced task customization, and
workflow automation.
 A significant advantage of GitHub is its policy of not limiting the number of users, making it a
cost-effective solution for both small teams and large enterprises.

C.GitHub's User-Friendly Interface


GitHub's intuitive user interface simplifies task management, enabling users to get started quickly. The
platform's clean design and the ability to customize project boards make it an appealing choice for a

22 | P a g e
wide range of users, from developers to project managers.

D.Repository
We have implemented a strategy to enhance organization and clarity within our project management on
GitHub. To achieve this, we have established separate repositories for each team working on the project.
This approach serves several key purposes:

1. Clean and Organized Structure: By creating individual repositories for each team, we maintain a
clean and organized structure. Each team's work is compartmentalized and can be accessed
independently, reducing clutter and confusion within a single repository.
2. Team-Specific Workspaces: Team-specific repositories provide dedicated workspaces for each
group. This separation allows teams to focus on their tasks without inadvertently impacting other
teams' work.
3. Clear Ownership: Each team is responsible for their specific repository, promoting clear
ownership and accountability. Team members can collaborate and manage their tasks without
interference from other teams.
4. Version Control: Separate repositories enable more precise version control for each team's
codebase and project files.
5. Enhanced Collaboration: While repositories are separated, collaboration remains seamless.
Teams can still utilize GitHub's collaborative features, such as issue tracking, pull requests, and
project boards, within their dedicated repositories.
6. Reduced Confusion: Separating workspaces minimizes the risk of confusion and conflicts that
may arise when multiple teams work within the same repository. Teams can structure their
repositories in a way that best suits their specific needs.

E.Conclusion
In the realm of task management tools, GitHub stands out as a robust and versatile option due to its
unlimited user policy, user-friendly interface, and seamless integration capabilities. While other tools
may excel in certain aspects, GitHub's combination of version control and task management makes it an
attractive choice for various industries and teams.

7. Notes
 The project google driver link
 I have sent both TAs an invitation on github organization to be able to view all repositories
 If the invitation link is expired, please contact me using one the following emails
ibraheimtarek1972@gmail.com (recommended)
ibrahim.amin02@eng-st.cu.edu.eg
I just don’t want to make the repositories public.
 The weekly reports will be delivered for our TA each Friday night at 11:59 pm
If it’s not suitable for you please contact me.

23 | P a g e

You might also like