Professional Documents
Culture Documents
PROJECT PROPOSAL
SWE TEAM 1
CMP 3030
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.
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.
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.
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
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
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.
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.
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
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.
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.
14 | P a g e
Figure 4:Used Cross platform frameworks
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.
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.
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.
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.
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.
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.
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