Thinking Out of the Box: What I Learned at My First CaptivateIQ Hackathon

December 15, 2022
December 20, 2022

This is a guest blog post by Val Chapman, Site Reliability Engineer at CaptivateIQ. Before joining CaptivateIQ, Val held engineering positions at Zendesk and Vertical Trail, where he developed and maintained AWS cloud environments increasing security posture and enhancing developer workflows through automation and self-service. In this blog post, Val shares his experience participating in CaptivateIQ’s “Out of the Box” Hackathon and some valuable lessons he learned along the way.

CaptivateIQ held its bi-annual hackathon — a time-boxed event for teams to develop new or crazy software or features they’re interested in that relate to company objectives — on August 24th through the 25th. This year’s hackathon theme was “Out of the Box” — intending to get creative, goofy, farfetched — or, as the startup community says: disrupt the space! 

Hackathons at CaptivateIQ are a two-day experience where engineers team up with different members of the organization to develop cross-team relationships while exploring potential future features of our product, enhancing our developer experience, or anything in between that interests team members.

Here’s a recap of what it was like getting started, the challenges we faced, some of our results, and more.

Proposal and planning

Two weeks before the hackathon, we were encouraged to suggest ideas for a list of projects from which other developers could choose. As I turned to my creative side, I proposed an idea that received the most attention: a new desktop experience for CaptivateIQ. 

The proposal was to wrap the Rep Experience release with Tauri, a multi-platform desktop bundler that would easily integrate with our existing tech stack. A desktop application would enhance the user experience by reducing the latency of page loads, requiring less network bandwidth. The desktop application would also open the possibilities of more advanced caching for the user or simple offline capabilities.  

The team

As the dust settled and I looked around, I found myself set with a great team to get this project to a demo-able state: Nelson Tran (Software Engineer), Rafal Pomocnik (Quality Engineer), Piotr Lewkowicz (Quality Engineer), and myself (Site Reliability). 

Nelson, one of the leading developers on the New Payee Experience (NPX) application, helped position us to quickly make a few front-end improvements to integrate with the native OS for a more authentic desktop experience. 

Rafal and Piotr brought their expertise in quality assurance and knowledge of the application to ensure a smooth user experience.

Kicking it off!

To start the project, we met and discussed our goals for the project and our experience building systems like this. Tauri and desktop applications were new ideas for basically everyone on the team. I happened to have the most experience thanks to the initial research I had done to see what was possible. None of the engineers had written or read any Rust (a programming language required for Tauri). We also quickly noticed that our respective time zones posted a 9-hour gap, so we had to devise a mostly asynchronous game plan to ensure we reached our goals. Needless to say, we had a lot of work to do!

We split the project into four main areas with opportunities to explore more features the further we got. These areas consisted of:

  1. Branding of the desktop application
  2. Native navigation bars
  3. Authentication
  4. Native alerts

For each area, we set a measurable goal to track progress against — for example, the CaptivateIQ logo for desktop application or native navigation implementation.

CaptivateIQ’s logo and native navigation for the desktop application.

After setting the project goals, we all paired up our repository with Rust and Tauri so each developer could start working on their objectives. 

The pairing session went extremely fast with how thorough the Tauri documentation was in integrating Tauri into an existing project. In a short 30-minute meeting, we had Tauri running locally on all the developer’s machines. We were ready to start building and integrating new features with existing systems.

The challenges

The two most significant challenges were Cross-Origin Resource Sharing (CORS) and not knowing Rust. 

Diving into a new library or framework in a new language, such as Tauri, provided many learning opportunities for multiple team members. The documentation of Tauri and the Rust Book made this less painful: we had access to lots of great examples, including how to implement features such as native navbars. The Rust Book gave great examples of Rust code and how to interpret existing code into the desired goal.

One of our main objectives was to enable the desktop application to authenticate with the remote developer environment so that we could share the build bundle with anyone in the company to use on their local machines. 

After a day of investigation and trial and error, we determined that this goal was too ambitious for the timeframe, especially with no one on the team having had any extensive experience with authentication, networking, and CORS. However, investigating the work required led us to a deeper understanding of the systems required to support this project and how authentication in the application works across the team.

The result

In the short two-day timeframe, we were able to build a multi-platform (Linux, Windows, and macOS) desktop application with continuous delivery automation set in place with GitHub Actions capitalizing on many features Tauri provides. 

CaptivateIQ’s native application user login page.

Our application had native alerts, navigation, and icons. We were even able to reach some of our stretch goals of opening a second window of the application with help documentation to enable users to capitalize on multiple monitors. We also shared the build artifacts with developers (who had a local environment set up and running on their machine), so they could dive into the application for their own personalized demos.

The three key takeaways for me from this project:

  1. Cross-Origin Resource Sharing (CORS): Authentication and routing around native applications are vastly different than in a browser and require additional implementation to capture credentials during the workflow.
  1. Development Experience: Setting up an environment quickly is crucial for any exploratory work. Rust and Tauri quickly integrated into existing environments, sped up development times, and reduced onboarding of team members.
  1. Native Features: Desktop applications can interact with OS-level systems such as navigation bars. These systems make the application feel more integrated into the user experience, which a browser cannot offer (i.e., a custom logo on the application bar).

With that, I hope you’ve enjoyed this look behind the scenes of the CaptivateIQ Hackathon and learned something about our engineering culture and the spirit in which we work. 

Please contact me on LinkedIn if you would like to ask any questions or learn more about my experience.

CaptivateIQ, the CaptivateIQ logo, and all CaptivateIQ product and service names used herein are trademarks of CaptivateIQ, Inc. Other brand names referenced herein are solely for identification purposes and may be the trademarks of their respective owners. The CaptivateIQ Hackathon project described herein may not be incorporated into CaptivateIQ’s product roadmap and is not in any way guaranteed to become a part of future product releases.