Sharing Our Passion for Technology
& Continuous Learning
Building a Mobile App using John Deere's IoT APIs
Each summer Source Allies offers an apprentice program to college students who want to develop their software development and consulting expertise. This summer’s team consisted of four returning apprentices -- Alec, Jared, Max, and myself -- as well as one new apprentice, Yousef.
Project
Each year the projects vary from developing internal tools to a partner website redesign. With so many of us returning from last summer, we had enough experience to be entrusted a project of our own. The purpose of the project was twofold: to create a mobile application which benefited John Deere dealerships and to illustrate a use case for Deere’s new Internet of Things APIs, thus providing an example for other developers to follow.
Motivation
The need the app set out to meet was simple: to help dealerships provide better service to customers awaiting repairs. Customers are often given long windows for service appointments, an inconvenience that’s present in other industries like ISPs and TV. The estimated time for the repair rolls past, and the customer hasn’t heard any updates.
It’s a relatable and common problem that’s frustrating for all parties: the customer, the technician, and the manager. The customer, impatiently waiting for service, calls the dealership for an ETA, but the manager doesn’t know the technician’s location or status. The manager calls the technician, who might be interrupted in the middle of a complex repair or unable to pick up. Finally, the manager can call the annoyed customer back with a time estimate.
AgPoint helps solve this problem by sending technicians’ real time locations to the John Deere Operations Center Run Map, allowing managers to provide customers with instant feedback about a technician's location and status.
Technologies
We built AgPoint using React Native, a framework that allowed us to leverage our background in web development, to create mobile applications for both iOS and Android with one codebase. Because we were limited to one summer, the project had a very accelerated timeline, and it was essential that we used a technology which was familiar to us. You can learn more about the app and download it here.
We use a service called Bitrise to deploy our apps to the app stores. Bitrise is a continuous integration solution built specifically for deploying mobile apps. It simplifies the build process, code signing, and release by providing built in steps for each stage of the process. After fighting with Bamboo, Bitrise was a breath of fresh air that took the pain out of deployments. It also hooks up to our git repo to run unit and end to end tests for each pull request.
In addition to the app, we built AWS Lambdas to authenticate our API calls. Deere uses OAuth 1.0a authentication for their APIs, so the library handles obtaining OAuth tokens and signing and proxying requests. The library was ultimately open sourced so that it could be used with other services that use OAuth 1.0a, like Twitter.
Accomplishments
As a team of independent apprentices, we’re extremely proud of all that we accomplished. We turned a hack into a production ready application in just one summer. Not only did we learn new technologies and skills, we also extended the software development practices that we learned last summer to a project of our own.
- Released AgPoint to production on the App Store and the Google Play Store
- Coming soon to John Deere’s ‘More Tools’ page in the Operations Center
- Open sourced our OAuth 1.0a proxy
- 700+ unit tests
- 100% test coverage on both projects
- Quickly shifted our focus based on feedback from demos
What I Learned
During my first apprenticeship, the most useful skills developed were not technical. Learning new languages and technologies is expected of software engineers; what’s more important is how to develop software. Pair programming, test driven development, and agile principles changed the way I’ve approached software development. Not only did they enable me to write better code, but I was more organized and it has made my school projects a breeze.
That’s why I came back for another apprenticeship. Not just for the opportunity to learn new technologies, but for the culture of teaching that Source Allies breeds and the software development practices that we uphold. This summer was no different, and as I head back to Northwestern University for my senior year, I feel prepared to be the teacher, leader, and expert that Source Allies strives to create.
I want to send a huge thank you to everyone involved in the AgPoint project: Ben, Darin, Matt, Scott, Sean, Tex, Tom, and anyone else we reached out to for support along the way. We couldn’t have done it alone, and I’m so grateful that I was welcomed back for a second summer to work with such an excellent team!