We use plenty of open source tools at Slack and we’ve benefited immensely from the wider Android, Kotlin, and Gradle communities. We also try to be good citizens by giving back. This includes things like sponsoring the Kotlin Lang Slack, contributions to projects we use like Anvil and Insetter, sharing projects of our own like Keeper and EitherNet, technical blog posts, and conference speaking!

Today, we’d like to share another step we’re taking in that commitment: embracing the idea of “Developing in the Open”.

Now, this doesn’t mean we’re going to just open source our entire Android app. But we are going to start developing more of our general-use tools and libraries in the open. Some will be distributed, versioned libraries, while others will just be public repos that are only consumed internally.

The core idea is that there is effectively no cost to us to do this, but a lot to gain. 

Goals

  1. Public repros. We often run into bugs in tooling that only reproduce in our internal project, which leads us to have to create trivial example cases of our internal tooling stack to file a bug report. This is particularly common with build system issues. We’ve been diligent about reporting these and having those public will help immensely.
  2. Knowledge sharing. We engage within the community fairly often between external Slack groups and conferences and shared channels with colleagues at other companies. Having more of our work public allows us to easily share in these circles. We’ve talked about some of the things we do in our Gradle infrastructure that the community has expressed a lot of interest in!
  3. Feedback from community experts. The sort of flip side of the above, we use a lot of tools maintained by other companies and developers. Where we’ve gotten the most benefit in OSS is regular feedback/code review/etc from these maintainers, bettering our own work in the process.
  4. More OSS exposure for Slack employees. While we’ve had some success with introducing engineers to the projects we’ve published, most of it has been in the form of code review rather than contributions. By making significant common projects like this public, we make open source work part of more folks’ regular work and normalize it.

Slack’s newest OSS releases

To kick this off, we’re open sourcing two new projects today.

slack-lints 

This is a repository of common lint checks that run on our codebase on every PR, covering a number of different areas like Android, Moshi, inclusive naming, and more.

auto-value-kotlin

This repository is home to a simple AutoValue extension and processor we wrote to help convert AutoValue classes to Kotlin data classes, with some custom support for other tools we use like Moshi and Parcelize. It’s not a turnkey solution for everyone, but it tries to do 95% of the tedium for you and make it easy to manually take care of the last 5%. This project will also be published as a versioned library on maven central.

We’re just getting started

We plan to continue publishing more projects in the future, where feasible, and we encourage you to consider doing the same. We can all benefit from seeing how we’re developing our general-use tools and libraries, and hopefully we can prevent each of us from having to reinvent the wheel. 

If you would like to help us develop more in the open, we’re hiring