Hackathon 2023: The blog
If you’re familiar with Gravitywell, it’s likely you’re familiar with — or have at least heard of — our hackathon. This annual R&D retreat has become something of a pilgrimage, a company hallmark, where we discover and innovate with new tech while spending invaluable time together as a team.
For the 2023 edition, Gravitywell (plus a couple of pals from Mezze) headed to the Costa Blanca, a delightful slice of Spain known for its stunning sandy beaches, charming villages and capital of culinary culture, Benidorm.
Saturday [Day 1]
We assembled dozily at Bristol Airport shortly before 5 on Saturday morning and crawled through security and into the familiar comfort of a Starbucks queue. Two hours of upright napping later and we were en España.
After being fed and watered/cerveza’d in a local Teulada tavern, we settled into our gorgeous villa and spent the afternoon briefing the team, finalising our high-level goals for the week and putting together our key user flow (many Post-its were harmed in the making of).
Having our user flow nailed down meant we knew what we needed from our tech stack, and, perhaps more importantly, what we can happily ignore for the week. For example, we revealed that for now, we can forgo user authentication — it’s an important feature but one we’re comfortable adding later on, and we can hack around it for now. This means we can focus on the more interesting R&D challenges during the hackathon.
This is one of the most important aspects of a hackathon — we need to make brutal decisions quickly, and if that means cutting out features or finding shortcuts, we’ll happily take those opportunities to ensure we meet our base goals for the week.
We also finalised our data models by putting together an ERD, compiled a big list of topics for further R&D and unblocked wire-framing, another key activity to help define our product.
The evening was spent
drinking brainstorming brand names, an exercise that we hoped would prove fruitful in the sober light of day the following morning…
Sunday [Day 2]
Our first full day and what a stunner it was. Solid prior planning made it easy to assign tasks to the dev team. We knew our tech stack, we knew our product, and we knew the end goals for the hackathon, so today was about setting up the foundations for the rest of the week.
Some of the team spent the day in the sunshine, using our user flows from the day before to sketch out wireframes. Wireframes allow us to quickly visualise, using just pen and paper, what each screen needs to do, meaning we can chop & change with ease and speed.
For the techie folks out there, the tech stack we opted for was Serverless Stack (SST) with Kysely ORM (a Gravitywell favourite), and tRPC for an end-to-end type-safe API. tRPC’s tagline is "move fast, break nothing" — exactly what the doctor ordered for a week of rapid-paced development.
Hardware-wise, we’ve got Raspberry Pi’s connected to a couple of Inky Impression screens at different resolutions. One of the key technical hurdles is how we can make it simple for non-technical users to add Internet connectivity, but, once again, planning ahead meant we’d explored a few options. (More on that later.)
Like the savvy marketing man he is, Hugo saw an opportunity while the sun was shining to capture some new headshots for the team. He also managed to coerce a reluctant Simon into taking some for his personal portfolio.
Following another fantastic meal courtesy of our live-in chef (and Operations Manager) Henry, we spent the rest of the night playing who can make their drink disappear the fastest, set against a backdrop of music produced by our very own Gabe — one of many surprising talents.
With a late arrival (in the form of Michael) now present and the UK team (aka Dulcie) back to work, Monday morning was our first standup with everybody, so it was exciting to share our progress so far.
After endless hours of gloating to our nearest and dearest about our working week in the Mediterranean, karma dealt us a cruel blow in the form of torrential showers. This, for some reason, felt like the ideal opportunity for Simon and Hugo to make a mad dash to the supermarket. Fiddling around with a shopping trolley in a rainy car park? It felt just like home.
Back at base, the team broke out once again with the focus split between branding and messaging, native app and building the setup scripts for the Raspberry Pi’s.
One of today’s main goals was to "scaffold out" every screen in the native app, using yesterday’s wireframes to block out UI wherever possible so we could click through the entire app by stand-down, even if the logic behind each screen wasn’t working just yet.
We put together a new brand, wrote some copy and refined the use cases. It was very exciting to see it all starting to come together in the form of a mockup product landing page.
Introducing: dePost Ami
The evening was, mercifully, considerably calmer than previous nights. After a delicious dinner by Tom "Le Creuset" Foster, a few of the team (with help from passers-by) found themselves thinking the night away with Semantle — think Wordle, but more infuriating.
Tuesday [Day 4]
Today we had an ambitious goal: send Dulcie a postcard. Not that kind of postcard, obviously — we wanted to test out sending something to Dulcie’s screen in Bristol using our app in Spain.
To accomplish this we got our heads down, hooking up our API endpoints with the UI that was scaffolded yesterday. With today's mission in mind, it meant we could focus on the screens that were absolutely essential to the core flow, leaving out some of the setup for another day.
With the app development in hand, the rest of the team could continue the Pi config and setup endpoints to enable receiving a message and changing the image.
Today's hard work paid off and it was thrilling to be able to be able to send Dulcie an E Ink postcard using tech that didn’t even exist 48 hours ago.
We celebrated another successful day with what affectionately became known as Hugolibre’s. Hugo’s past life as a barman came in handy, gleefully serving up the strongest rum and coke’s this side of the Balearic Sea.
Our memories from this point on were fuzzier than the photos we later found in various camera rolls, but it was a very funny night.
Wednesday [Day 5]
Wednesday morning came around far too quickly, and with Simon’s shoes successfully fished out of the pool (don’t ask), it was back to work.
But first, coffee.
Wait, when did we run out of coffee??
So far the dev team has been split roughly in two:
- Half of us are working on creating, sharing and receiving images
- The other half has been working on how we connect up the Pi’s to the internet and enable them to talk to & listen to our app and API
This setup flow is quite complicated, and so far we’ve not been able to demo it in its entirety. Today's goal was to showcase the full setup flow from scratch as if somebody was unboxing our product for the first time.
Demo time rolled around (by which time coffee had been collected) and we managed to showcase our dream onboarding experience:
- The customer un-boxes their Ami and is prompted to download the app
- Their Ami shows a QR — scanning this with the app will connect it to the Raspberry Pi’s ad-hoc WiFi network, allowing us to talk to the Pi
- We ask the user to pick a WiFi network that has an internet connection for the Pi to work on
- The Pi reboots on the chosen network and pings our API
- Meanwhile, our app polls the API to find out if the screen was connected. Once connected, we complete setup and allow the user to start sending images to their Ami!
There’s an incredible amount of logic and edge case handling in this flow to make it work so smoothly, and seeing it all come together was very satisfying.
If that wasn’t enough, we also started working on some stretch goals, including allowing users to connect their Ami to external feeds like NASA’s image of the day or generate a random pixel art image.
Thursday [Day 6]
Our hackathons are always intense — we work fast, hard, and late — so it’s easy to lose a sense of perspective. It was decided that Thursday would be our morning away from the screens, giving us a chance to relax and refresh before the final push.
Ever the gentleman, George offered to be our chauffeur for the day and shuttled the team to the dramatic Costa Blanca coastline where we swam in the sea and hiked along the coast. This was a "death march" Hugo could fully get behind; incredible content opportunities and ample 5G to post it there and then. Muy bien.
Quads, hamstrings and possibly some skin burning, it was back to the villa for an intense evening of work (seriously!) and some equally intense BBQ-for-11 preparation. Once again, Simon showed off his grill skills. The kebabs were 🤌
In what has become a hackathon tradition (as of last year, but still) we dimmed the lights, switched the Spotify from Fred Again to Freddy Krueger and settled into a game of Werewolf or two. Or ten. We lost count.
The winner was clearly Evridiki, who should probably swap programming for professional Werewolf-ing. Honourable mention goes to Gabe and his narration, which transported George to his happy place: The Shire, Mr Frodo.
Friday [Day 7]
The final day of a hackathon is always a mad scramble, no matter how ahead of the game we’ve felt throughout the week. Lots of our features have been worked on in smaller teams, so today was about merging everything together and demonstrating all that the product has to offer.
Confident we had it all working, the devs called the rest of the team in at 3 pm and we excitedly showcased the full flow in a production environment — no smoke and mirrors this time.
- We showed off setting up an Ami from scratch and then sharing a link with Dulcie in Bristol for her to send us a digital postcard
- We could subscribe our Ami to external feeds and see the image change.
- We showed off how to set up groups so friends can send images to each other at any time (risky, depending on the type of friends you’ve chosen 🙃)
- We demoed writing and manipulating text over an image so you can send messages along with your postcard
- We didn’t demo the huge amount of edge case and error handling that supported our main setup flow — thankfully it all worked smoothly the first time — but this was an unusual area of focus for us during a hackathon because we knew this pivotal flow needed to be bulletproof
The team were incredibly proud and rightly so. Yes, there will always be a few snags and glitches but that’s the nature of our scrappy, hacky process. We had to cut some functionality along the way but we knew we’d get to it after the Hack — it was far more important to keep momentum going during the week rather than sink time into non-starters.
Ultimately, what we ended up with was a vast amount of excellent work, all of our end-of-the-week goals hit and a happy, inspired and stronger team. All in all a pretty good week out of office!
As we approached Alicante airport in our minibus early the following morning you could almost feel a sense of accomplishment in the air. Or was that the air conditioning? Perhaps it was both.