Like A Girl

Pushing the conversation on gender equality.

Code Like A Girl

Dare To Pair

The Midsummer Mark

This is the fourth blog post in the series of fortnightly blog posts undertaken by Team 200 OK, to track their progress through the coding period of Rails Girls Summer of Code, working for coala. Previously, we have published an introduction to our project, the community outreach and guiding principles in the RGSoC community and the practices of test driven development (TDD). This post coincides with the midway mark through the summer and focuses on the fundamental Agile practice governing Rails Girls Summer of Code — pair programming.

What is Agile Software Development?

Programming for personal projects is very different from that required for software development in the industry and open source projects. These projects involve development over a large scale, across a wide spectrum of stakeholders. With the enormous size of the team as well as the code base, arises the need to keep the code continuously evolving with the changing requirements and solutions, through collaborative development. Agile Software Development is a set of principles which facilitates successful development in a constantly changing environment.

Life Cycle of Agile Software Development

By delivering working, tested and deployable software on an incremental basis, agile practices deliver increased value, visibility and adaptability, much earlier in the life cycle, which results in project risks being greatly reduced.

Pair Programming : What, How and Why?

Pair programming is an agile practice involving pairing two programmers to a single workstation. One programmer drives the development, focusing primarily on the code at hand (syntax, semantics and algorithms), while the other programmer navigates through the development by focusing on a higher level of abstraction such as testing, time taken by all tests to run, the overall quality of design etc. Pair programming yields better designs, higher quality, bug-free code and more functionality per unit time in the long term perspective.

The role of pair programming in establishing a mentoring mechanism and spreading knowledge through the team is certainly unmatched. Be it problem, language, framework, refactoring or testing knowledge, knowledge transfer is much more effective than traditional methods.

Pair Programming and Rails Girls Summer of Code

What sets Rails Girls Summer of Code apart from similar other programs, is the emphasis on learning and transfer of tangible skills through collaborative development and mentorship. Thus, it is no surprise that RGSoC advocates the practice of pair programming in a big way, with each applicant having to apply along with a teammate and work in collaboration with her all throughout the summer. In addition, each team must have a minimum of two coaches available to guide the students through hands-on coaching sessions, which are essentially executed through pair programming.

This entire setup provides a conducive environment for the maximum possible knowledge transfer for all people involved. Simply put, the students get to learn from all possible avenues — from their pair as well as their coaches, and result in producing high quality code, with greater productivity.

Our Tryst with Pair Programming : Key Takeaways

Setting separate goals and helping each other achieve them

During the course of the summer, Prachi and I have relied heavily on pair programming to achieve our daily targets.

  • We pick up issues separately and work on them together. Albeit slightly lengthy and time-consuming, this approach ensures that we are both thorough with each of our pull requests and can spot bugs and errors before they make our builds go red.
  • Resolving each others’ build failures, too, is much simpler when done in pairs. The constant iterations of writing code and getting it reviewed by the other person ensure that we not only write and send in quality code, but also debug it efficiently.
  • Our project, writing linter integrations for coala, requires a lot of brainstorming on the design and implementation of each bear, to ensure maximum configuration of the linters. Devising implementations are much simpler when we put our heads together, in consultation with our coaches.
  • Moreover, the one-to-one coaching sessions with our coaches, ensure that a seamless mentoring mechanism is in place.
  • Our coaches lay emphasis on a hands-on review of our work, rather than conventional code reviews, which makes learning from our mistakes and seeking guidance completely effortless.

Working full-time on an open source project has taught me that there is a whole lot more to software development than just coding. The entire thought process behind developing a single bear, the multiple iterations based on the feedback received on each pull request— it is all an immense learning experience. And this experience is all further enhanced when you have help at hand, so that you can learn quicker and learn more. Both of us feel that our learning curve wouldn’t have been as steep without the element of pair programming in this summer.

We record our daily incremental progress here (very Agile of us 😛 ) and are also on Twitter. We would love to hear from you and promise to get back.