I just got off the call with @Achim_AirGradient, @Samuel_AirGradient, and @Altair_AirGradient. It was a very nice discussion, and I think we covered a lot of important topics.
I’ll try to summarize from my end, but the AirGradient folks are welcome to add or correct details if they had different takeaways.
Staying responsive to community contributions
My biggest note was that I felt a disconnect between the AirGradient team and the community. I had a recent PR and a recent issue that have sat without acknowledgment from the AirGradient team for two weeks.
I don’t expect issues to be fixed or PRs to be merged immediately, but I’d feel much more encouraged to contribute to development if there was a timely response (i.e., within 2-3 business days) to at least acknowledge the contributions and set expectations about next steps.
The AirGradient team didn’t realize that the issue and PR had sat unaddressed for two weeks, but they’re aware that they need to do a better job staying on top of user contributions.
Resolution: AirGradient will explore ways of keeping better track of untriaged issues/PRs and unaddressed support forum posts so that users can feel confident that when they report an issue / make a PR, they’ll get a response from AirGradient.
Simplifying branching
I shared that I found AirGradient’s branching strategy confusing, as I had contributed docs improvements, but they’re still not discoverable on the repo README because the repo’s default branch is master
and my changes were merged into the develop
branch.
The AirGradient team explained that they use develop
for development and they leave master
unchanged until they’re ready to cut a new tagged release. They worried that if they merged changes directly into master
that users who are making customizations might unintentionally branch from master
and not realize it’s an unstable branch.
I suggested AirGradient get rid of the separate develop
branch and do all development in master
. For a project with tagged releases, I think it’s most common for master
to be be unstable and the tagged releases to be stable. If AirGradient ever needs to do a minor bugfix on a tagged release, they can still branch from the release tag. End-users who want to customize the firmware can branch from a tagged release for stability or from master
for a bleeding edge version.
Resolution: AirGradient will consider consolidating master
and develop
branches into a single master
branch.
Clarifying release versions
The latest tagged release on Github is 3.3.9, but the latest release on the AirGradient website is 3.3.8.
The AirGradient team shared that they’d like to fully automate this so that the tags always match globally, but currently they do not match. The canonical release is what’s on the AirGradient website
Resolution: The AirGradient team will consider marking the Github release as “pre-release” until it’s officially the release. The AirGradient team will work on automating the release more so that there’s a single, canonical release on both Github, the website, and the Airgradient dashboard.
Making initial onboarding clearer
I shared that my onboarding flow as a new AirGradient customer felt shaky both times I purchased the One indoor unit. The instructions in my package tell me to visit Thank You for Purchasing our Kit for setup instructions, but that’s the URL all AirGradient products share. It’s another four clicks to get to the AirGradient ONE indoor unit (pre-assembled).
Once I get to the AirGradient ONE instructions, I’m dumped here, which still doesn’t tell me the basics of setting up my device (e.g., how to connect to my Wi-Fi, how to put on the feet). The first option (AirGradient Cloud) requires me to create an account before seeing any instructions.
Resolution: I suggested that devices ship with a product-specific instructions URL so that the user could visit instructions for their specific product directly like airgradient.com/ag1-a
to show the basics and then once that’s complete, allow them to pick how to collect data from their unit.
Offering better support for local data servers
We discussed this recent issue I filed:
The AirGradient team shared that they make the disableCloudConnection
connection especially strict (read-only after initial Wifi setup) to prevent users from accidentally uploading data to AirGradient cloud.
I suggested an overhaul of the REST API, as a lot of the semantics are confusing (e.g., I thought disableCloudConnection
disables the default connection to AirGradient Cloud, but it actually disables external connections to any server, even if the user specifies one, I thought bootCount
measures how many times the device has booted, but it’s actually the number of measurement cycles since boot).
Resolution: The AirGradient team will consider making disableCloudConnection
writable after initial WiFi setup, which will at least create a path where the user can upload measurements to a local server without leaking data to AirGradient Cloud. The AirGradient team will consider a revision of the REST API to make it easier for API client development.
Thanks again for taking the time to speak with me! I look forward to further collaboration.