Here at Atlassian, we have wallboards everywhere. On my team, we have a wallboard that cycles through screens showing the build status, the number of open JIRA issues assigned to team members, how many pending code reviews we have, and relevant deadlines.
We recently had a ShipIt Day. ShipIt Days are a chance for developers to work on a project of their choice. Generally these projects are software – new plugins, spikes or products. Anna and I are Confluence developers with a distinctly crafty bend, and when we’re not coding, we’re crafting. Spurred on by ShipIt organiser Brian‘s encouragement to do an unorthodox project, we decided to make a wallboard with a difference in twenty-four hours. We brought out an Arduino, some calico, and a bunch of dyesticks to make a low-fi wallboard.
One of the main parts of ShipIt Day is demo-ing what you’ve created, and it’s always useful to have a good sales pitch. The features of the low-fi wallboard are many. It:
- Can be shipped immediately (one need only pack it into a box and post it)
- Is skinnable (the calico covering with the lettering can be manually interchanged for another fabric and design of choice)
- Lets you view build status in the Cloud (disclaimer: the Clouds here are made of tulle and toy filling)
- Alerts you when you break the build (thanks to a shrill Piezo buzzer)
What it’s made of
The wallboard is made out of lightweight foamcore board, with the through-hole component legs slotted through the board and soldered to electrical connections at the back. The LEDs are hooked up to Arduino pins and 150Ω current-limiting resistors. The connections are all heat-shrinked and liberally duct taped, because short circuits are what you don’t want when working under time pressure!
We used high-intensity blue, red, orange and green LEDs, and experimented with a couple of different methods of diffusing the light. The board was then covered with cotton calico, and we used dye-stick crayons and fabric markers to do the lettering on the front.
How it works
We used an EtherTen (essentially an Arduino with on-board Ethernet). A server runs off the Arduino, listening for incoming requests. We then have a Python polling script that pings the Arduino every couple of seconds with status updates. How does the polling script get the current status of the builds and how many issues are assigned to me? It’s very simple, thanks to Bamboo, JIRA and Crucible REST APIs. All we had to do was provide some parameters for the project, user and builds we were interested in, and the APIs did the rest. All three products give the option of returning XML or JSON strings – we used JSON as we found it simpler to parse. This meant that we could actually get the wallboard operational in time for the final demo.