Contributing to Giveth Development
Giveth currently maintains three products that focus on funding management, peer to peer donations, and DeFi for-good token economics. These are Giveth TRACE, Giveth.io and the GIVeconomy respectively
All our products share some common development standards that are paramount to learn before engaging in any development for Giveth. In this document we'll show you how to interact with our open-source repositories, getting in touch with the right people and how to begin creating and picking up issues.
Github Management
First things first, you'll need to install the zenhub extension for github for your web browser that will allow you to see the workspaces and pipelines we use in Github to manage issues.
We have transitioned to manage all three DApps(products) under one workspace, All-Devs
.
Repositories
The Giveth Github organization has many, many repositories. Here’s a general overview of relevant repositories that relate to our active products:
Product | Repository | Description |
Giveth.io | impact-graph | Backend of Giveth.io |
Giveth.io | giveth-next | Giveth.io current version |
Giveth.io | giveth-io-typescript | Givethio typescript version with new design. |
GIVEeconomy | GIVeconomy | Usually used for planning and issue tracking |
GIVeconomy | giv-token-contracts | Smart contract implementations |
GIVeconomy | liquidity-mining-dapp | GIVeconomy Frontend UI |
GIVeconomy | giv-token-subgraph | Calculating $GIV data for GIVeconomy Frontend |
GIVeconomy | givback-calculation | Calculating GIVbacks |
TRACE | giveth-dapp | Frontend and planning of giveth TRACE |
TRACE | feathers-giveth | Backend of Giveth TRACE |
TRACE | dapp-mailer | Email notification system for TRACE |
TRACE | giveth-bridge | Giveth Rinkeby - Mainnet Bridge system |
General Services | ui-design-system | npm package for Giveth design assets |
Pipelines on the All-Devs
Workspace
When you enter a workspace on the Zenhub tab you'll see a line of adjacent columns that are used to identify and manage the statuses of issues currently in the repositories. You can find a short description of each below:
New Issues - New bugs and features go here first.
Epics - Pipeline for Epic Issues. Larger tasks comprised of several smaller issues.
Icebox - Features or Suggestions that have been archived. Issues here are non-priority and might be added into sprints only if Devs have the bandwidth.
Backlog - Lower Priority Issues waiting to get pulled into Sprint Planning.
Sprint Backlog - These issues have been vetted and are ready to be worked on. They will be added into the next sprint according to priority and Developer bandwidth.
In Progress - Picked up and being worked on by the Developers, usually on local builds.
Code Reviews - Open Pull Requests waiting for review and eventual merge into the staging server.
It’s mandatory to have the code reviewed by one of the core team members, usually your mentor or the one which introduces the project to you can review it, pls ask for review before pushing it to any environment.
UAT Testing/QA - The feature or bug fix is deployed on the staging server for user testing and Quality Assurance.
Done - Bug fix or feature has been completed, and is ready to be deployed on the live server.
All issues should meet DoD (Definition of Done) criteria to be approved as Done and being in this column: Success Criteria passed (if it’s get mentioned in User Story / Task or related issue) Deployed in Staging UAT Tested by a tester or PM Documented
Closed - The bug fix or feature has been copied live. It’s recommended that all closed issues get related to a release number in the zenhub and get closed right after the version goes live.
Creating Issues
Creating Github issues is essential to ensure bug fixes or features are tracked properly and relevant information can be organized, and consolidated. The new issue template is a guide only, feel free to delete any heading that you don't use.
Labels will help add context to your issue, please use them so other developers can get a better understanding of issues at a glance and pick them up. Some commonly used labels in All-Devs
are:
fast follow
- Priority features or improvements following a product launch or version release.
documentation
- Requesting creation or updates of technical documentation.
bugs
- Functionality or feature of a product that is broken or not working as intended
feature request
- Requesting for a new feature or functionality to be added to a product
design needed
- Requesting support from the design team to create assets relevant to this issue
question
- There is a pending question inside this issue that needs a response in order to move forward
security
- Security issue or improvement
UI
- This issue relates to the User Interface of a given product
UX
- This issue relates to the User Experience of a given product
Ceremonies
We host in the Giveth Discord many Developer meetings throughout the week including:
- Daily Dev Standups from Tuesday to Thursday at 6:30am GMT-6
- All-Devs Sync weekly on Mondays at 10:00am GMT-6
- GIVeconomy Sync weekly on Wednesdays at 8:00am GMT-6
These meetings are important places to stay up to date with DApp development and to integrate with the Giveth Team as a Development Contributor.
Sprint Management
Framework: We’re practicing mostly Scrum, in biweekly iterations (called sprints), sometimes based on project situations we move to KanBan.
What is Scrum?
In scrum, the sprint is a set period of time where all the work is done. However, before you can leap into action you have to set up the sprint. You need to decide on how long the time box is going to be, the sprint goal, and where you're going to start. The sprint planning session kicks off the sprint by setting the agenda and focus.
The What – The product owner describes the objective(or goal) of the sprint and what backlog items contribute to that goal. The scrum team decides what can be done in the coming sprint and what they will do during the sprint to make that happen.
The How – The development team plans the work necessary to deliver the sprint goal. Ultimately, the resulting sprint plan is a negotiation between the development team and product owner based on value and effort.
The Who – You cannot do sprint planning without the product owner or the development team. The product owner defines the goal based on the value that they seek. The development team needs to understand how they can or cannot deliver that goal. If either is missing from this event it makes planning the sprint almost impossible.
The Inputs – A great starting point for the sprint plan is the product backlog as it provides a list of ‘stuff’ that could potentially be part of the current sprint. The team should also look at the existing work done in the increment and have a view to capacity.
The Outputs – The most important outcome for the sprint planning meeting is that the team can describe the goal of the sprint and how it will start working toward that goal. This is made visible in the sprint backlog.
Before the iteration starts, you may need to have your expected total contribution hours in Giveth Resource Planning Spreadsheet, the link usually gets shared in the Discord dev channel before the sprint meeting. You can find the sprint sheet and update the following cells:
It helps the Product Managers (PMs) to plan for the resources better and know if they are able to meet the milestone in each sprint or not. If you couldn’t find time to fill out the spreadsheet, you may be asked to do so during the meeting or whenever you can have an estimate, just DM it to PMs or put it in the dev channel.
The usual sprint planning goes like this:
- PMs bring the issues (Preferably User Stories to the planning meeting, describe it and make sure it’s clear for the team to start implementing.
- PM facilitates talks between devs to make it as clear as it can be.
- PM asks for estimations in Story Points (Story Points are the unit of minimum effort spent on a product which can be delivered asap, like a simple bug fix, for example, could take half of a working day. )
- PM starts building “Sprint Backlog” with prioritizing the issues and makes sure the total amount of Story Points are proportionate with the total capacity of the teams and contributors.
- Everyone agrees on the sprint plan and commits to the expected goal.
Key Contacts
- Development Working Group Steward - Amin
- Discord Handle:
Amin#2164
- Discord Handle:
- GIVeconomy Product Manager - Lauren
- Discord Handle:
karmaticacid#1218
- Discord Handle:
- Giveth TRACE, Giveth.io Product Manager - MoeNick
- Discord Handle:
MoeNick#1374
- Discord Handle:
- Giveth.io Lead Developer - Mateo
- Discord Handle:
mateodaza#3156
- Discord Handle:
- DevOps & Security - Kay
- Discord Handle:
geleeroyale#3228
- Discord Handle:
- Lead Designer - Marko
- Discord Handle:
markop#2007
- Discord Handle:
Installation Guides for Local Development
Testing Guidelines
Tools we Use
- Segment (Giveth TRACE, Giveth.io)
- Sentry (Giveth TRACE, Giveth.io)
- Infura (Giveth TRACE, Giveth.io)
- Autopilot (Giveth.io)
- Amplitude (Giveth TRACE, Giveth.io)
- Docusaurus (Documentation)
- The Graph (GIVeconomy)
- Netlify (Giveth TRACE)
- Vercel (Giveth.io, GIVeconomy)
- Cryptocompare (Giveth TRACE)
- Coingecko (All Products)
- Github Actions (All Products)
- MongoDB (Giveth TRACE)
- PostgreSQL (Giveth.io)
- Redis (Giveth TRACE, Giveth.io)
- Elastic Search (Giveth TRACE)
- Kibana (Giveth TRACE)
- Pinata (Giveth.io, GIVeconomy)
- Transak (Giveth.io)
- AdminBro (Giveth.io)