Code for GovTech (C4GT) is India's pioneering mentoring program that focuses on open-source projects aimed at addressing significant governance challenges. When I learned about this program from a friend, I became extremely enthusiastic about the opportunity to participate. The prospect of contributing to a real-world project with the potential to impact millions of people, while also receiving compensation, was truly inspiring.
However, despite my eagerness, I was not selected as a participant in the program. Nonetheless, this experience provided me with valuable insights, particularly in the areas of proposal and specification writing. In this blog post, I aim to share my journey, detailing the preparation process, highlighting the challenges faced, and discussing the valuable lessons I learned along the way.
It's important to note that while I may have personal sentiments regarding the outcome, I have strived to maintain objectivity throughout this post. I want to ensure that my perspective is not misconstrued as a negative critique stemming from disappointment about not being selected. Let's delve into my experience with an open mind and a focus on the lessons gained.
The Preparation Process
The selection process for the program involved the submission of a comprehensive proposal for a chosen project from the available options. To provide an overview of the proposal, it required a demonstration of project understanding, identification of the existing problem, and a detailed plan for implementation, including milestones and a timeline for solving the problem. I opted to work on the "quiz-creator" project, which aimed to replace Google Appsheet with a custom web app, streamlining the quiz creation and management process.
The journey was not without its challenges. Firstly, the limited time frame and deadline pressure forced me to work late into the night, sometimes staying up until 2:00 am and waking up at 6:00 am the next day. Understanding the project's codebase and the underlying problem proved to be quite daunting. While mentors hosted doubt-clearing sessions on Discord, I often found myself having to dig deep for minor details. Crafting a proposal and specification required considerable effort. It involved creating detailed descriptions, brainstorming various designs, and meticulously planning step-by-step milestones and tasks to complete the software project.
Another challenge I encountered was the lack of prompt replies from mentors. While mentors did offer assistance and encouraged us to send work-in-progress proposals for feedback and ask questions, the practical reality was somewhat different. Replies from mentors took a significant amount of time, often at least a whole day. I reached out to two mentors, and one took 1-2 days to reply, while the other never replied at all. When racing against the clock, timely responses were expected, adding to the frustration.
Despite these challenges, I persevered and continued to navigate the preparation process. The next section will delve into the lessons I learned from this experience.
Through my recent completion of Systemic Program Design and Programming Languages courses, my perspective on programming has undergone a significant shift. While the concept of thoughtful consideration and brainstorming before diving into code was not entirely new to me, the process of writing a detailed proposal reinforced the importance of these practices. It reminded me that the development and coding phase itself is relatively straightforward. The real challenge lies in knowing what to code and, subsequently, debugging and iterating on the process.
During the proposal writing stage, I found myself constantly engaged in brainstorming sessions, generating numerous ideas. Ideally, these ideas would be tested through small prototypes, allowing for flexibility and refinement while simultaneously writing the software specifications. However, due to time constraints, most of my testing occurred mentally. I would contemplate how the design could be implemented, assess the available resources, and consult the documentation to determine feasibility and whether it could be accomplished within the given time frame (assuming I was selected). Additionally, gaps in my understanding of the project hindered my ability to test using prototypes, and from the previous section, the communication with mentors was not very helpful. Further emphasizing the importance of clear communication and timely feedback.
Nonetheless, the practice of thinking before coding has greatly enriched my development process. It has made each project more deliberate and has allowed me to approach them with a newfound appreciation for the beauty of thoughtful planning and brainstorming.
Another significant takeaway from this experience is the enhancement of my writing abilities and gaining insights into project management and planning. The process of crafting a detailed proposal required me to articulate my thoughts effectively, ensuring clarity and precision. Additionally, it provided me with valuable exposure to project management principles and the importance of meticulous planning.
Overall, this experience has left me with a sense of growth and enthusiasm for future projects. The combination of thoughtful consideration, enhanced writing skills, and insights into project management has enriched my approach to software development, making it a more holistic and rewarding endeavor.
While it is true that I felt a sense of disappointment upon not being selected, I am reminded of the Japanese proverb that says, "Fall Seven Times, Rise Eight." This experience has taught me valuable lessons and reinforced my commitment to continuous improvement as a developer. I strive to embrace a growth mindset and dedicate myself to becoming better each day, not only in my development skills but also in other areas of my life.
Did you find this article valuable?
Support Rohit Mehta by becoming a sponsor. Any amount is appreciated!