I had the honor of being invited to a seminar on "Automatic Quality Assurance and Release" at Dagstuhl by Benoit Baudry (we collaborate together on the STAMP research project). Our seminar was organized as un unconference and one session I proposed and led was the "Onboarding" one described below. The following persons participated to the discussion: V. Massol, D. Gagliardi, B. Danglot, H. Wright, B. Baudry.
Onboarding Discussions
When you're developing a project (be it some internal project or some open source project) one key element is how easy it is to onboard new users to your project. For open source projects this is essential to attract more contributors and have a lively community. For internal projects, it's useful to be able to have new employees or newcomers in general be able to get up to speed rapidly on your project.
This brainstorming session was about ideas of tools and practices to use to ease onboarding.
Here's the list of ideas we had (in no specific order):
- 1 - Tag issues in your issue tracker as onboarding issues to make it easy for newcomer to get started on something easy and be in success quickly. This also validates that they're able to use your software.
- 2 - Have a complete package of your software that can be installed and used as easily as possible. It should just work out of the box without having to perform any configuration or additional steps. A good strategy for applications is to provide a Docker image (or a Virtual Machine) with everything setup.
- 3 - Similarly, provide a packaged development environment. For example you can provide a VM with some preinstalled and configured IDE (with plugins installed and configured using the project's rules). One downside of such an approach is the time it takes to download the VM (which could several GB in size).
- 4 - A similar and possibly better approach would be to use an online IDE (e.g. Eclipse Che) to provide a complete prebuilt dev environment that wouldn't even require any downloading. This provides the fastest dev experience you can get. The downside is that if you need to onboard a potentially large number of developers, you'll need some important infra space/CPU on your server(s) hosting the online IDE, for hosting all the dev workspaces. This makes this option difficult to implement for open source projects for example. But it's viable and interesting in a company environment.
- 5 - Obviously having good documentation is a given. However too many projects still don't provide this or only provide good user documentation but not good developer documentation with project practices not being well documented or only a small portion being documented. Specific ideas:
- Document the code structure
- Document the practices for development
- Develop a tool that supports newcomers by letting them know when they follow / don't follow the rules
- Good documentation shall explicit assumptions (e.g. when you read this piece of documentation, I assume that you know X and Y)
- Have a good system to contribute to the documentation of the project (e.g. a wiki)
- Different documentation for users and for developers
- 6 - Have homogeneous practices and tools inside a project. This is especially true in a company environment where you may have various projects, each using its own tools and practices, making it harder to move between projects.
- 7 - Use standard tools that are well known (e.g. Maven or Docker). That increases the likelihood that a newcomer would already know the tool and be able to developer for your project.
- 8 - It's good to have documentation about best practices but it's even better if the important "must" rules be enforced automatically by a checking tool (can be part of the build for example, or part of your IDE setup). For example instead of saying "this @Unstable annotation should be removed after one development cycle", you could write a Maven Enforcer rule (or a Checkstyle rule, or a Spoon rule) to break the build if it happens, with a message explaining the reason and what is to be done. Usually humans may prefer to have a tool telling them that than a way telling them that they haven't been following the best practices documented at such location...
- 9 - Have a bot to help you discover documentation pages about a topic. For example by having a chat bot located in the project's chat, that when asked about will give you the link to it.
- 10 - Projects must have a medium to ask questions and get fast answers (such as a chat tool). Forum or mailing lists are good but less interesting when onboarding when the newcomer has a lot of questions in the initial phase and requires a conversation.
- 11 - Have an answer strategy so that when someone asks a question, the doc is updated (new FAQ entry for example) so that the next person who comes can find the answer or be given the link to the doc.
- 12 - Mentoring (human aspect of onboarding): have a dedicated colleague to whom you're not afraid to ask questions and who is a referent to you.
- 13 - Supporting a variety of platforms for your software will make it simpler for newcomers to contribute to your project.
- 14 - Split your projects into smaller parts. While it's hard and a daunting experience to contribute to the core code of a project, if this project has a core as small as possible and the rest is made of plugins/extensions then it becomes simpler to start contributing to those extensions first.
- 15 - Have some interactive tutorial to learn about your software or about its development. A good example of nice tutorial can be found at www.katacoda.com (for example for Docker, https://www.katacoda.com/courses/docker).
- 16 - Human aspect: have an environment that makes you feel welcome. Work and discuss how to best answer Pull Requests, how to communicate when someone joins the project, etc. Think of the newcomer as you would a child: somebody who will occasionally stumble and need encouragment. Try to have as much empathy as possible.
- 17 - Make sure that people asking questions always get an answer quickly, perhaps by establishing a role on the team to ensure answers are provided.
- 18 - Last but not least, an interesting thought experiment to verify that you have some good onboarding processes: imagine that 1000 developers join your project / company on the same day. How do you handle this?
Onboarding on XWiki
I was also curious to see how those ideas apply to the XWiki open source project and what part we implement.
Ideas | Implemented on XWiki? |
---|---|
1 - Tag simple issues | Onboarding issues |
2 - Complete install package | Debian apt-get, Docker images. |
3 - Dev packaged environment | We have a Developer VM |
4 - Online IDE onboarding | Hard to do provide for an OSS project in term of infra resources but would love to provide this |
5 - Good documentation | User guide, Admin guide, Dev guide + there's a wiki dedicated to development practices and tools. |
6 - Have homogeneous practices and tools inside a project | See http://dev.xwiki.org |
7 - Use standard tools that are well known | Maven, Jenkins, Java, JUnit, Mockito, Selenium |
8 - Automatically enforced important rules | See Automatic checks in build |
9 - Have a bot to help you discover documentation pages about a topic | IRC bot (used here - been broken since 2017-05-09). |
10 - Projects must have a medium to ask questions and get fast answers | XWiki Chat |
11 - Have an answer strategy so that when someone asks a question | XWiki answer strategy and FAQ |
12 - Mentoring (human aspect of onboarding) | Done to some extent by employees of XWiki SAS who are committers on the open source project but not a generic open source project practice. |
13 - Supporting a variety of platforms for your software | Windows, Linux, Mac, multiple DBs, multiple browsers, multiple Servlet containers. |
14 - Split your projects into smaller parts | Core getting smaller and more and more Extensions. |
15 - Have some interactive tutorial to learn about your software | Would be nice to have |
16 - Human aspect: have an environment that makes you feel welcome. | This is subjective. Sometimes we may be a bit abrupt when answering (especially me! Sorry guys if I've been abrupt, it's more a consequence of doing too many things. I need to improve. I think we're globally a welcoming community, WDYT? |
17 - Make sure that people asking questions always get an answer quickly | I think we're very good at answering fast. See the Forum for example. We also answer fast on Matrix/IRC (we try). |
18 - 1000 devs joining at once experiment | Actually we participated to Google CodeIn 2017 and this is exactly what we experienced: 756 students interacting with us. |
So globally I'd say XWiki is pretty good at onboarding. I'd love to hear about things that we could improve on for onboarding. Any ideas?
If you own a project, we would be interested to hear about your ideas and how you perform onboarding. You could also use the list above as a way to measure your level of onboarding for your project and find out how you could improve it further.