This is the first blog post of a short series which will be updated over the remaining two years of my undergraduate B. Computing (Co-op) degree at the University of Guelph. Since the end of April 2018, I have been out of school and in the work-place, as part of the co-operative aspect of my education. As I head into my 3rd year at U of Guelph, I hope that this post will elaborate on and serve as documentation of my experience working on the RightMesh project at Left Inc., for the first two (of five) work-terms in my five-year degree.
Who is Left™?
Founded in 2010, Left™ is a late-stage technology start-up headquartered in the small city of Maple Ridge, British Columbia, Canada — just about an hour from downtown Vancouver. Despite the small-town location, Left™ is known to have set and achieve high-profile goals, and has been ranked 7th in MediaCorp's Canada's Top 100 Employers List of 2018.
As a registered B-Corp, Left™ is committed to using technology for positive social impact — manifest through core values, global sustainability goals, and an investment in projects that seek to narrow the digital divide.
Left™ supports RightMesh, the decentralized mobile-mesh networking platform which I spent the past eight-months developing.
What is RightMesh?
RightMesh AG (subsidiary of Left™) is a company which “is on a mission to connect the next billion people and lift 100 million out of poverty.” RightMesh has created the world's first software-based ad-hoc mobile mesh networking platform and protocol. The project solves the problem of connectivity in remote, rural, and urban areas where there are sparse or other-wise low-quality Internet connections, as is the case in many developing nations, and even populated areas of Canada.
Getting involved with RightMesh
While I've been working for the School of Computer Science at the University of Guelph since my second semester of school under the advisory of Dr. Daniel Gillis, it wasn't until the Fall of 2017 that I joined an interdepartmental research group with the following (paraphrased) goals:
- Improve and extend environmental and health monitoring capabilities in the Canadian Circumpolar North where there is little infrastructure;
- Assess the impacts of (and attempt to narrow) the Digital Divide*;
- Develop a solution using community-lead design;
- Improve connectivity using non-traditional connectivity due to lack of existing infrastructure.
The latter goal of the group lead to collaboration with RightMesh. Dr. Gillis put forth a reference for me to Left Inc. which was looking to fill the role of an “SDK Developer” for the RightMesh project, and after a series of discussions I was happy to accept an offer to move out west to Metro Vancouver and work on a professional decentralized technology.
What is an “SDK Developer”?
Let's start by defining an SDK.
A software development kit (SDK or devkit) is typically a set of software development tools that allows the creation of applications for a certain software package, software framework, hardware platform, computer system, video game console, operating system, or similar development platform.
In the case of RightMesh, our “SDK” consists of the
Android and JRE variants of
lib-rightmesh (the software
library that handles the automous P2P connections between devices), the
RightMesh protocol (which the library implements), the Developer Web
Portal, and various tooling and infrastructure to support it.
From Left's job description:
[You'll need to own] your experience developing APIs, frameworks, and infrastructure so your insights can intuitively shape the product [and have] intelligent conversations around collected feedback from developers about how to improve and refine the API/SDK as it evolves. [Differentiate] the complexity of what we are creating from what is exposed to the developers, while documenting the process clearly. […]
- You've woven your passion into working towards a Bachelor's Degree in CS, Computer Engineering or other related fields.
- You have a solid understanding of object-oriented development with Java.
- You understand the structure of Android applications […] and have experience with the Android development stack.
- You know how to collaborate on a codebase effectively with Git and software like GitLab and GitHub.
- You know the value of unit and integration testing, and how to develop testable code.
- You are familiar with using 3rd party APIs/SDKs (e.g. Socket.io, Unity, etc.) or better yet have developed one yourself!
- You are passionate about distributed systems and have developed your own peer-to-peer applications or mesh networks.
- You're a team player so you have created sample apps or tutorials for a technology or framework.
- You are familiar with any level of the web development stack and have an understanding of the web services, the client/server architecture, and related technologies.
- You have experience maintaining code infrastructure or working with continuous integration tools […] and automated test tools.
In short, I was employed as a general-purpose developer to help build out the library, protocol, and tooling associated with the RightMesh project. That covers a wide area of domains, and presented a number of challenges and learning opportunities that I was eager to take on.
Work term 1 (2018 May - Aug)
RightMesh was a very exciting project for me to work on; I have always been fascinated by peer-to-peer (P2P) and distributed systems, web applications, and protocol bridges since I first learned of them many years ago. The prospect of working on a best-in-class mobile mesh networking suite was not only insanely attractive from personal and academic points of interest, but necessary to build an understanding of how these systems work — as one of my favourite scientists has famously stated.
What I cannot build, I cannot understand.
— Richard Feynman
Considering that Left™ is a start up working on a novel project, I came onto the team with the understanding that, as with most start-up companies, everyone on the team wears multiple hats. I knew that I would be able to pursue multiple areas of interest over the course of my work-terms and that in doing so I could diversify and solidify my knowledge and gain a better understanding of which area(s) of software development I want to focus on as I build my career.
In other words, I was excited to be challenged and ready to tackle every single problem that came my way!
At the beginning of my first work term, I identified four (4) main goals which I thought were necessary to track my learnings. Having never worked in a professional software development firm, I felt that the following goals were a good starting point, building on previous experience and taking advantage of the unique environment in which I was working.
- Become proficient with Agile methodologies in a professional team.
- Improve technical writing skills.
- Learn more about decentralized technologies, such as mesh networks and blockchains.
- Automate all the things! Learn some DevOps, script infrastructure and set-ups, and make internal development operations more fun and efficient.
When I started at RightMesh, Agile methodologies were relatively new to the organization, so it was a really cool experience to see how over time, our planning sessions, stories (and slices) became more effective and efficient. I was told that I make effective and meaningful impact through outlining issues and potential solutions as they have came up. I would say that I now have a good understanding of Agile processes, and when and how they work in our organization.
Over the course of the term, I was praised for my ability to write excellent software documentation and for my ability to explain technical challenges, designs, and solutions. It was an important learning experience to have each of my documents thoroughly reviewed through the writing process, much in the same way that my code underwent review. From this process, I was able to tailor my writing to the organization and reduce assumptions and cognitive biases.
As the RightMesh project matured over the term, technical proposals became very important to ensure that the design of overall system was correct and scalable. As a result, research was very important, and I was able to hone my skills with reading and parsing computer science papers and specifications to find the ideal solution to our problems. Through this process, I learned a lot about Distributed Hash Tables/Trees, Merkle Trees, and other distributed structures as they may be applied into a P2P networking stack.
This is a (linear) mesh of 5 phones running @Right_Mesh. Left-most is connected to the internet, communicating with a #superpeer which joins it with another physically separate (linear) mesh of phones.#testing #development #meshnetworking #thisisactuallyexcitingdontmindme pic.twitter.com/b5VmSVUzvG— Keefer 🌻 (@keeferrourke) August 13, 2018
Beyond research and development of the networking protocols and implementations, a major part of my job for my first work term was to automate and codify our infrastructure — leaning on my existing experience with orchestrating Linux servers.
In August I was fortunate enough to travel to Montréal, Québec to speak at the 2018 Indigenous Mapping Conference as a) a representative from the RightMesh development team to explain our technology and answer technical questions; b) a researcher from the eNuk Project.
The conference highlighted a lot of social and technical issues in (often remote) Indigenous communities, and was a great opportunity to address challenges surrounding connectivity and data sovereignty. It also validated our efforts as professionals and researchers, as another group of presenters at the conference, Digital Democracy, presented a project called “Mapeo Mobile” which attempted to deal with mapping areas of the Amazon Rainforest while communicating entirely offline — this homegrown application was a marked example of how mesh networks can and will be used more often in the future.
I wrote a short article which goes into much more detail about this experience.
Work term 2 (2018 Sept - Dec)
As a progression from the previous work term, my expectations were that I would continue to build on and learn new skills as they pertained to my established position in the company. With a very good understanding of our software stack and processes, I felt that I would be able to work with strengthened confidence and efficacy.
I defined the following objectives for the last 4 months of my time at Left:
- Demonstrate an understanding of how modular codebases can be developed and maintained.
- Improve leadership skills in development teams.
- Better understand storage and caching mechanisms in software, and how they pertain to performance.
- Better understand MVP and prototype thinking, and how that plays into corporate business models.
One of the biggest challenges during various tasks of development while working on the RightMesh project was dealing with tight class coupling and an abnormal build process for our consumable software artefacts. A long-on-going effort across the whole team was to clean up these class relationships with well-informed object-oriented design in an iterative process. I spear-headed the project of eventually modularizing the RightMesh library codebase, eliminating a lot of technical debt and improving software build-times. In doing so, I learned Gradle best practices, and what nice class relationships in complex software look like (especially as it pertains to internal and external API design).
Having observed and taken note of what made good leadership skills within our development team over the previous four months, I wanted to apply what I learned while managing the development of the eNuk web application (which I began developing at U of G the previous winter semester). I found that by applying the procedures, techniques, and strategies that have been effective while working on the RightMesh project, leading the development on the eNuk web application went very smoothly and reliably when compared to the previous semester of work. In working on this project, I also gained a better understanding of non-relational databases, which I consider to a necessary asset in back-end and general-purpose software development.
Before working on RightMesh, and indeed in some of my earlier work at Left™ in the first work term, I very much had a perfectionist attitude, and would occasionally be slow to commit code or create documents, as I did not want to share it unless it was perfect. I felt that this was a flaw in my work-flow, and as such had semi-regular meetings with my supervisor Rachel to break down large stories into "slices" which could be tackled in smaller chunks and improved later without slowing down development. After applying these story slicing techniques and adopting a more prototype-oriented thought process, I was always able to complete every ticket that was assigned to me in each sprint, whereas previously large point tickets tended to sit in review and spill into the following sprint due to their size. This was a really valuable skill to learn, and has completely changed the way I approach tasks in software development.
Takeaways from the Co-op placement
Working for Left™ on the west coast was an extremely valuable (and very fun!) experience. It would be misleading to suggest that I spent 100% of my time writing code and documentation during my term — as there is much much more to working at a tech company than that. The folks at Left have absolutely no shortage of enthusiasm or passion, and sharing that with the community is part of their culture! While I learned a lot through this co-op placement, I also had ample opportunity to share what I learned and to actually teach others … kids included!
It felt incredibly fulfilling to be able to work for a company that values family, community, and making an impact on others as much as I do. I certainly was not just a code monkey, rather I was a team member, an engineer, and I felt like a valued member of the community. While I recognize the need for new experiences and want to further broaden my perspective and skillset as a software developer, I hope to take a bit of Left™'s culture with me wherever I end up in the future.
I'm looking for a more local opportunity in the Toronto, Ontario region. If you feel like I would be a good fit for your team, do not hesistate to contact me.
Over the past year I've worked with some amazing people who consistently challenged me, collaborated with me, and helped me during my time on the west coast.
I'd like to thank my team leads: Rachel Cheng and Frazer Seymour, RightMesh CTO: Jason Ernst, fellow Software Engineers: Benjamin Hughes, Igor Yakubov, Cam Farion, Connor Heidema and Conor Brady, Chief Networking Scientists: David Wang and Lucien Loiseau, and fellow co-op student: Sachin Raturi, for their diligent review, criticism, constant encouragement, support, mentorship and friendship through my first experience in a professional software development team. I'd also like to thank Caryl Longden for keeping our small team on track and the scope-creep at bay.
Special thanks especially go to Alan Bailward and James Wang for ensuring the IT in our organization ran smoothly, especially considering the volume of AWS requests from the RightMesh team.
To the folks in Left™ corporate: John Lyotier, Diana Moric, Tracy McDonald, Lindsey Matthews, Melissa Quinn, Amber McLennan, Aldrin D'souza, Joe Deobald, Chris Jenson, Tracey Topping, Simon Jones, and many others; thank you for making my term fun, memorable, and meaningful. I will always be proud to be a Lefty.
Lastly, I would like to thank my undergraduate research advisor, Dr. Daniel Gillis from the University of Guelph, who put forward a personal reference and made me aware of this opportunity — even before any job postings were available.
All graphics in this article are courtesy of Left Inc.