As the organizer of the Conciso Coding Dojo Dortmund I have a problem at the moment. We cannot meet interested programmers who want to join our event because the Corona Virus and the sanctions of the government forbid the normal procedure. There is no possibility to work in a mob or in pairs and meet in groups. For that reason I have to experiment with other possibilities to create a remote version of the event.
There are three things I have to achieve:
- Speak with the participants of the Coding Dojo and enable them to speak with each other.
- Do a retrospective together and collect criticism and recommendations about the event.
- Work together on the source code in one Code Base without time lags and create and run tests, immediately seeing the results.
Speak with the participants
First there is the possibility to communicate with a group of people via remote conferencing tools. We as company Conciso use Microsoft Teams or Zoom to stay in touch. Both tools have the possibility to be used without a special client installation although it is recommended. For Teams there is a maximum number of 350 persons (see https://docs.microsoft.com/de-de/microsoftteams/limits-specifications-teams) and for Zoom it is 100 people and more depending on the pricing model chosen (see https://zoom.us/pricing). In Teams you can share 20 video streams together on the screen and in Zooms there is a maximum of 50. In both tools there is the possibility to talk with all participants and everybody can mute him- or herself if there are some disruptions due to circumstances at home.
Do a retrospective
The second point is the retrospective where we need the possibility to write cards or give feedback verbally so that the moderator can write it down. In a non remote session a white board or flip chart is used. Both video tools have integrated such a functionality which can be shared with all participants. Both have the ability to write directly onto a virtual white board or use virtual sticky notes. Additionally there are other tools like Miro, which can be shared in a cooperative manner where participants can give feedback.
For that reason both video solutions would be appropriate for a remote coding dojo. There may be other ones but for me that is good enough.
For a Coding Dojo the third point is the most important. The exercises should be shared by all participants and we want to be able to work in alternating order on the source code. For a simple mob session with colleagues the normal screen with control sharing and the IDE on the instructors computer may be enough.
But depending on the web browser used by the participants giving control to keyboard and mouse may be not possible due to technical restrictions. Additionally the speed of this solutions is dependent on the network and the speed of the host computer which may be slow especially because the video tools are real resource-hungry. Another reasons against screen and control sharing is security because there has to be some kind of trust to let them take over the control to your computer.
The solution we are searching for is an IDE where all participants can take part and can share the control to the code under development. I found two different approaches. The first one is to extend the IDE with some code sharing mechanism which can be used by all participants. The other solution is to use a collaborative IDE hosted in the cloud.
Plugins for the IDE
In my Coding Dojo we are using the IntelliJ IDE from JetBrains. Because of that the first try was to have a look at the Plugins they are offering.
intellijmob is based on mob, which uses git for the hand over of the source code under work. Screen sharing is done with the help of a video session like Zoom. There is no possibility to work together with all participants at the same IDE with the same source code.
The CodeTogether Plugin is available for IntelliJ, Eclipse, VS-Code and via Browser. As Host you can create a Hyperlink which can be shared with all participants. Coding experience seems to be good and there is some kind of intellisense in the browser session too.
The Problem with this approach is that there is no possibility as driver to run the tests. At the moment there is no support for using some kind of terminal or run commands via the IDE of the host. For that reason this plugin is no solution for a Coding Dojo.
The CodeWithMe Plugin seems to be an alternative because it allows all participants to join in the actual IDE session of the host. The test can be run by every participant and there is no need to install the IDE because a simple java client can be started on the participant computers. After installing the plugin you get an additional dropdown menu in the toolbar where you can start the session. After pressing continue to copy a link you can share that with the participants.
These have to call the link in the browser or in their own IDE by copying it into the dialog field popped up by selecting the toolbar menu point. Then the host and the participant have to accept the session identified by a fingerprint
After that the participants can work on their representation of the IDE, run tests and run commands on the terminal, after the host has given them the right for doing this.
But there are two problems with this solutions. The last time I tried it the delay of the participants and the host was not acceptable. There was no possibility to work fluently on the code. This could be a problem with the tool itself or with the session of the video tool which consumes very much CPU power on my machine. The second problem is, that there is a limit of 5 persons at the moment and for that reason it is no alternative for me.
VS Code Live Share
Visual Studio Code and Visual Studio have the possibility to share the code too. For that reason let’s have a look at this solution too.
For the usage of Visual Studio Code as a Java IDE you should install some extensions. There is a tutorial to start Java development here. Additionally, to start sharing your sessions, there is a manual for installing the Live Share Plugin too.
To start a Live Share Session you have to select the folder containing your java project in the Editor. After that you can select the Live Share Symbol in the left toolbar. The host can select an account which he can use to share the session when he uses the plugin for the first time. After that he can select the account-provider (GitHub or Microsoft) in the settings. The link to the session will be copied into the clipboard and can be shared with the participants.
This link must be used to create the browser session. On the resulting screen the participants can choose if they want to use his VS Code Editor or the experimental browser editor.
If the user selects the browser based editor than he could choose the account he wants to use or to work as anonymous. But the anonymous option is not really helpful because then the user can access the files read only and cannot collaborate actively.
The cursor of host and participants and their work can be seen in all session.
This session seems to work good and the number of the participants can be up to 30 people. I cannot make any prediction to the performance with this number of people at the moment. The only problem here is that the participants need to have an account at GitHub or Microsoft to take part as programmers at the Coding Dojo. Otherwise they could not edit the files.
After searching in the internet I found some candidates which can be used to do a collaborative code sharing in one IDE.
Gitpod is an online IDE which can be used as cloud solution or self hosted. It provides a ready-to-code development environment, which can be configured easily with prebuild containers. It is a Theia based IDE which can be extended with VS Code plugins. The workspace can be continuously build during the programming session or with the help of a command line on demand.
To start with the free version you have to create an account with your GitHub or GitLab data.
Please check the getting started guide how to get the GitHub project you want because otherwise a pet clinic example is created. After granting some access permissions the IDE is shown and the project can be supplemented with some additional files for the gitpod environment during the import of the project (eg, docker file, gitpod.yml etc.). Then you can start developing. The IDE gives code completion and shows javadoc but it cannot run your tests directly without installing the VS Code plugin.
I created a simple HelloWorld example with a test and this works fine for me. There is the possibility to run your test continuously in a docker container but that has to be configured somehow and was not self-explanatory for me.
Sharing of the workspace can be done easily by two clicks. Participants who want to use the provided link need a gihub or gitpod account. The documentation of this service is good and they offer help if something is buggy or not well documented. The free plan gives you 50 hours per month of container time and the remaining time is shown in your settings. Gitpod is offered by Typefox, a company where the main contributer of Xtext and Theia IDE work at.
Eclipse Che is a collaborative IDE hosted by Red Hat. Like Gitpod it uses the Theia IDE and you can develop your code in your own container provided by a Kubernetes service. This is very similar to Gitpod so I do not go further into it now. The only unknown here is the possibility for sharing the session between the various participants.
The goorm IDE is a cloud IDE which can create up to 5 containers on the free pricing level.
For the login you can use your GitHub account or create a new one for the service only. After providing the credentials and give access to your profile data in GitHub. You are prompted to give your email address for validation but you can circumvent that if you open a new browser tab with the url of the service. As first action you have to create a container with various possibilities for different settings. Then a docker container is created which you can use for programming. You get an IDE which seems to be based on Eclipse because there are several files created related to it. There is some kind of autocomplete but in my case the given selections where not exactly what I wanted. I have created a HelloWorld example with test and both could be build with the help of maven.
In the IDE you can save some commands to run and debug the java classes but the source folder recognition does not include the maven structure directories. Because of that the packages in the files had to be corrected.
Sharing of the files works fine and other users can connect to the IDE without signing in to the service. Problem here is that only 3 people can be invited in the free version
The documentation of the IDE is good and you can start your work immediately. My problem was that the configuration seems not to work correctly because I could not configure the java version and change the source code folders to point on main and test java sources.
At the time of writing this blogpost GitHub Codespaces was still in the beta test and you have to submit a request towards GitHub to be part of this. This does not make sense for a Coding Dojo where it cannot be guaranteed that all participants do have a GitHub account. For that reason this is no alternative at the moment.
There is quite a number of possibilities for collaborative development available. All of them have pros and cons and everybody has to decide for himself, which one he wants to use. Gitpod, Goorm IDE and Eclipse Che have the advantage, that they can be used for pair and mob programming directly. GitHub Codespaces and Visual Studio Code Spaces are based on the same technology stack of the same company. As far as I know both are based on the Live Share functionality like the tested Visual Code solution. At the time of writing I cannot check the Code Space solution because of the still running beta in GitHub.
At the moment I would prefer the Gitpod solution because it seems a good solution to me without much problems. The developers of the Theia IDE host this service themselves and there is the chance to get help for problems in a short time range. Another reason for me is that the company behind Gitpod is located in Germany and some of them are former colleagues of mine.
I will give it a try next time I do a TDD session in my Coding Dojo or at my customers.
PS: During the work on my blogpost JetBrains published a new version of the IntelliJ IDE with a new version of the CodeWithMe Plugin. The presentation has changed slightly but the functionality is still the same.