Student: Maya Treacy
Mentors:
Admin: Isabel Costa
BridgeInTech (BIT) is an original idea project I proposed to AnitaB.Org for Google Summer of Code 2020.
This project was inspired by the existing AnitaB.org Mentorship System (MS) which helps women in tech mentor and supporting each other. BIT extends this collaboration by allowing organizations to be involved through hosting the Mentoring Programs where the mentor and mentee can apply and work on.
If you are interested to read more about the idea and motivations behind BridgeInTech, go to my blog post: BridgeInTech by AnitaB.Org
This project has two repository on Github. AnitaB/bridge-in-tech-backend for the backend system which is a RESTful API that can be accessed using the Swagger UI interface. AnitaB/bridge-in-tech-web is the frontend repository for the BIT ReactJS web application.
The mockups for this project can be found below:
- as Wireframe: on the initial proposal section Mockups
- as High-Fidelity Mockups
Backend | Frontend | Database |
---|---|---|
Python, Flask, SQLAlchemy | ReactJs | PostgreSQL |
Throughout GSoC coding phases, the following PRs have been submitted to the repositories:
Backend PR# | API endpoints | Functionalities | Frontend PR# |
---|---|---|---|
26 | POST /register | User Registration | 18 |
60 | POST /login | User Login | 26 |
71 | GET /user/personal_details | Get user's personal details | 38 |
74 | PUT /user/personal_details | Update user's personal details | 54 |
77 | POST and GET /user/additional_info | Create and Get user's additional info | View: 40 |
81 | PUT /user/additional_info | Update user's additional info | |
83 | POST and GET /user/personal_background | Create and get user's personal background | View: 46 |
87 | PUT user/personal_background | Update user's personal background | Create and Update: 61 |
99 | GET/users and GET /users/{user_id} | Get list of users and another user's personal details | View users list: 59; View other user's details: 62 |
101 | PUT /user/additional_info (refactored) | Refactor POST and PUT /user/additional_info to one endpoint (PUT only) | Create and Update: 57 |
103 | PUT and GET /organization | Create, Get and Update user's organization | 69 |
107 | GET /organizations; GET /organizations/{organization_id} | Get list of organizations; Get another organization | 70 |
114 | POST /organizations/{organization_id}/programs/program; GET and PUT /organizations/{organization_id}/programs/{program_id}; GET /programs | Create, Get and Update a program and Get list of programs | View list of programs and a program: 76; Create and Update a program: 79 |
Out of the list of features targeted to be on the Minimum Viable Product, there are few things still pending. These are:
-
Send Request functionality (Backend API endpoints and Frontend UI):
-
From User to Organization:
Allow a User to apply to a Program either as a Mentor or Mentee.
-
From Organization to User:
Allow Organization to request for a User to work on their Program.
-
-
See the list of Programs that a User had/has been involved in (aka Mentor/Mentee Portfolio).
-
See Progress Summary of a Program.
-
on Backend:
- tests for POST/GET/PUT programs list and program
-
on Frontend:
- tests for user's additional info functionalities
- tests for user's personal background functionalities
- tests for viewing list of members and another user's personal details functionalities
- tests for organization functionalities
- tests for viewing list of organizations and other organization functionalities
- tests for program functionalities
- tests for viewing list of programs and other program functionalities
- Authentication mechanism
As raised in the Spike issue#109 and my Medium blog post, keeping a secure and reliable authentication mechanism in BIT project has its own challenge. In fact, poses as one of the blockers to a smooth run in a remote environment where multiple users are expected.
- Deployment to a remote environment
Another blocker with deploying BridgeInTech application to a remote environment is caused by the fact that BIT needs multiple servers to run concurrently for the application to work. Unfortunately, the only option available to the project at the moment is to deploy the application on Heroku servers using its free dynos option. However, BridgeInTech architecture is a bit more complex for Heroku free dynos to handle. The details on the issue with Heroku as the option for BridgeInTech host servers is discussed in this blog post and in Spike issue#109.
BridgeInTech project is still in its initial stage and has a long way to go before it can reach the production stage. Anyone is welcome to participate to the project as there are still plenty of rooms for improvement. To contribute, check the available issues on the Backend and Frontend repositories. You can also join the project stream on the AnitaB zulip channel.
- Backend repository: anitab-org/bridge-in-tech-backend
- Frontend repository: anitab-org/bridge-in-tech-web
- UI Design improvement
- Calendar events
- Industry and organizations demographic
- Award board
- Blogs space
- Feedback highlights
- Maps - members/organizations location
- Comments box on Program profile page
- Analytics
- Extend frontend to other platform (IOS, Android, etc)
To learn more about the project, you can check out the initial proposal I submitted to GSoC.
I’ve been writing weekly reports and blog posts documenting my journey during GSoC.
- GSoC GitHub Wiki Page
- Project Link on Google Summer of Code official website
- Final Live Demo on YouTube
- Presentation Slides of final demo on Google Slides
- GSoC weekly blog posts on my Medium blogs
GSoC journey has been valuable. Below are some of the highlights I would like to share with you.
Although in a smaller scale, working on BridgeInTech project in GSoC has helped me experience a developer's life in an organization settings. I have learned about:
- how to maintain communication and collaboration through a remote settings
- how to resolve conflict respectfully and productively
- how to keep productivity going regardless facing a blocker in the project
I have learned many new technical skills through working on BridgeInTech. Here are some of them:
- in Python: namedtuple, decorator, EAFP (Easier to Ask Forgiveness than Permission) style vs LBYL (Look Before You Leap) style, List Comprehension, mocking API calls using requests and unittest.mock libraries, etc...
- in React: functional components, Hooks (useState, useEffect), Context (useContext), Declarative routing using useLocation Hooks, Protected routing, mocking API calls using Mock Service Worker (MSW) and react-testing library, etc
- in Git: understanding Git Workflow in an Open Source Project, using
Git pull --rebase
to manage a clean Git repository - in Heroku: Challenge on multiple servers deployment to Heroku free dynos
- I am a total noob in the IT fields. This is a career change from my previous backgrounds in Accounting and Teaching
- I am a mature age student who also has family commitments beside study and GSoC
- I have limited knowledge of the frameworks used in the Tech Stack as I've never officially learned them in depth as part of my university degree. My prior knowledge of the frameworks came from self-learning through online tutorials and a mini project
- I am also a noob to Open Source as I only had made minor contributions to Microsoft/VSCode-Wiki and AnitaB.Org Mentorship-System prior to working on BridgeInTech project.
On this level, challenges come from:
- Timezone differences, with team members coming from around the globe (India, US, UK, Australia)
- Team availabilities, with mentors have own work and family commitments outside GSoC
To overcome the challenges above, the team members implement the following approaches:
- shared each other's availabilities on WhenIsGood for scheduling meetings and catch-up sessions
- maintain communications using BridgeInTech stream on AnitaB.Org Zulip channel
BridgeInTech is a project with inherent complexity from its important system integration with AnitaB.Org Mentorship System. From its initial Planning stage during the Community Bonding period till the end of the Coding phase, the team have faced few challenges in the following areas:
- Database Design, which is discussed extensively both in the initial proposal and in the proposal review during Community Bonding period
- Project architecture (as explained in this blog)
- Mocking the API requests from BIT Backend to MS REST API for unit testing purposes
- Mocking the API requests from BIT frontend to BIT backend using Mock Service Worker (MSW) and react-testing-library
- Authentication mechanism (as mentioned in
Work left to do: on Blockers
above). - Deployment to Heroku (also mentioned in
Work left to do: on Blockers
above)
As part of GSoC requirements, student is required to do the followings:
- Maintaining daily Scrum check-ins
- Keeping documentations:
- planning docs
- technical decisions
- wiki
The requirements above are necessary not only to any project development, but in particular, as part of learning about contributing to an Open Source project. However, this adds to the time constraints that all students of GSoC need to carefully managed during our GSoC journey.
This has been an awesome journey. I have learned so much from this GSoC, not only about the frameworks and tech tools (Git, Travis, etc), but also about Open Source, team work, and project workflow. I’m grateful to the mentors and admin that have supported me throughout this journey. I especially love how the mentors always give me the chance to learn new technical skills whenever the opportunity arises. I'm also thankful that they are very patience and always keep an open mind in all our discussions, which makes conflicts resolution a piece of cake :P. Finally, I would like to thank AnitaB.Org that allows me to learn about Open Source through this GSoC. I look forward to continue contributing to AnitaB.Org Open Source and am proud of being part of this wonderful community.