# Starting a software project

So, you have been tasked with coming up with software. Where do you begin?

We will follow these general steps across the development of the project:

1. Requirements gathering
2. Design
3. Development
4. Testing/QA
5. Monitoring

# 1\. Requirements gathering

Identify all users of the proposed solutions and speak with them to understand their painpoints/needs. Gather all resources available and document your meetings. Once done, use the prompts below to come up with an SRS. An SRS ensures all stakeholders are onboard and in agreement with what is being built.

- [SRS prompt](https://drive.google.com/file/d/14_HGJsk4bpCPa-A7E5-eejVWQl4PWPNs/view?usp=sharing) - full SRS as per IEEE standard
- [Executive SRS summary](https://drive.google.com/file/d/14GGnmI2MAB9fN6kPlriYb-PvrdT2W-4S/view?usp=sharing) - user facing version of the SRS
- [Dev summary](https://drive.google.com/file/d/16GLvBnccaH9q4STK8iA01xkkHZaDQAbY/view?usp=sharing) - dev facing version of the SRS

# 2\. Design

## 2.1 System Design

System Design tells us how the application will be structured. We will use the [ECC claude skill](https://github.com/affaan-m/ECC) for our design. We will structure our documentation as follows:

```text
project/
├── docs/
│   ├── requirements/
│   │   └── SRS.md
│   │
│   ├── architecture/
│   │   ├── DATABASE_DESIGN.md
│   │   ├── INFRASTRUCTURE_DESIGN.md
│   │
│   ├── operations/
│   │   ├── DEPLOYMENT.md
│   │   ├── DISASTER_RECOVERY.md
│   │   ├── MONITORING.md
│   │
│   └── diagrams/
│       ├── system-architecture.mmd
│       ├── infrastructure.mmd
│       └── deployment.mmd
│
├── docker-compose.yml
├── Dockerfile
└── ...
```

| Design Area | Context | Prompt | Issues addressed |
| --- | --- | --- | --- |
| Database | \- SRS | [database design prompt](https://drive.google.com/file/d/1iJyAcyLoQd80ut0OuE_IiHCqK75MChoW/view?usp=sharing) | Database arcitecture<br>Migration and seed files |
| Infrastructure | \- SRS<br>\- DB design<br>\- Constrainst eg hosting budget, existing infra, expected users | [Infratsructure design prompt](https://drive.google.com/file/d/19yhG3JQVVBqCqDlsy1djwnhBCM1ULYz3/view?usp=sharing) | Hosting strategy, server sizing, app atchitecture and services, containerisation and orchestartion, network architetcure, reverse proxy, DNS, CDN, DB and object storage, environment separation, security and access control, cost estimation |
| Deployment | \- SRS<br>\- DB design<br>\- Infra design<br>\- Constrainst such as languages and frameworks, app structure, git workflows, automations, CI/CD workflows | [Deployment architecture prompt](https://drive.google.com/file/d/1JQK9Da6KUswm7PxE9d6Zl7IHOvB4pJ5N/view?usp=sharing) | git strategy, build processes, CI/CD pipeline architecture, automated testing, docker image creation and publishing, container registry, env specific configurations, db migration execution, deployment strategies, versioning and release management, rollbacks, access control for deployment operations |
| Monitoring | \- SRS<br>\- Infra design<br>\- Deployment architecture<br>\- Existing services<br>\- Critical operations<br>\- Backrgound jobs<br>\- External dependencies | [Monitoring and Observability architecture prompt](https://drive.google.com/file/d/1jPOBLi2HXzSClmpqFPX4GolO2BhJg29J/view?usp=sharing) | app running? resource limits? storage usage? failing jobs? memory usage? database usage? |
| Disaster Recovery | \- SRS<br>\- DB design<br>\- Infra design<br>\- Deployment design<br>\- Monitoring plan<br>\- Business importance of items eg uploads | [Disaster Recovery and Business Continuity prompt](https://drive.google.com/file/d/1g2DO7BEEiE9eKvhV3ZEmQNg1EaiJTNxK/view?usp=sharing) | risk and failure analysis, backuo architecture, database backups, object storage backups, backup retention, backup encryption, RPO, RTO, restoration procedures, Infra rebuild procedures, failover options, recovery testing, business continuity procedures |

> *Read the prompts and edit to suit your needs*

## 2.2 UI/UX design

Gather design inspirations from design sites such as [dribble](https://dribbble.com/). Use the Figma connector with Claude to fine tune UX screens. The SRS prompt gives screens suggestions and forms a good starting point.

These claude skills will help with UI/UX design and development:

1. [Impeccable](https://github.com/pbakaus/impeccable)
2. [Taste skill](https://github.com/leonxlnx/taste-skill)

## 3\. Development

Come up with coding standards, git workflows ([Coding standards and Git workflow](https://drive.google.com/file/d/15jDU4IeCb8x1Wm2dfe_WWVAFBDZd6sTs/view?usp=sharing)) and stack definition ([Tech stack definition example](https://drive.google.com/file/d/1h47t7nJCG0aUperE2zsfKVuzjnrEigK_/view?usp=sharing)).

I would encourage having these as skills in the .claude folder of your project. This is a [zip](https://drive.google.com/file/d/1NTbmWoX2aujd2gO20dTwOMyHGNAl9HhY/view?usp=sharing) folder containing sample standards folder to include in the skills folder of the .claude folder.

Helpful resources:

[Performance Optimisation for the backend](https://discovertech.hashnode.dev/performance-optimizations-for-your-back-end)

[Backend scafold for Express projects](https://github.com/VWanyungu/idealb). This scaffold covers:

\> [REST API design](https://discovertech.hashnode.dev/rest-api-design-with-express)

\> [API security](https://discovertech.hashnode.dev/api-security)

\> [Rate limiting](https://discovertech.hashnode.dev/rate-limiting)

\> [Setting up a new VPS](https://discovertech.hashnode.dev/how-to-set-up-a-new-vps-with-a-reverse-proxy-caddy-and-docker)

## 4\. Testing

Testing happens continuously throughout the project. The how and environment separation is covered in system design

## 5\. Monitoring

Refer to section in Design chapter
