Technology choices at CDS
A few weeks ago, we opened our public recruitment campaign, looking for designers, developers, data scientists, product managers, and engagement experts. On the developer stream, a number of people have reached out to ask which technology platforms and programming languages we work in. It’s a great question! One of the exciting parts of joining CDS at such an early stage in our existence is that you’ll have a chance to shape how our technology choices evolve. With that in mind – none of these are set in stone – I thought I’d share the current thinking of our developer team, and the two (competing) goals that influence the technologies we choose.
Being pragmatic and moving quickly
When it comes to project delivery work, CDS’ focus is to build high-quality and user-friendly digital public services. In practical terms, that typically means building web applications. By building for the web, in an accessible and inclusive way, we’re able to reach a broader range of people than if we built (for example) native mobile apps or desktop software. There are definitely cases where these would make sense, but they introduce challenges around ongoing maintenance and future-proofing, as mobile platforms like iOS and Android change quickly and apps need to be constantly updated. Web applications are more universal – anyone with a web browser can use them – and they’re simpler to test and deploy than native mobile apps.
There’s a wide range of languages and frameworks that people use to build web applications. If you’re reading this, you probably have a favourite framework of your own! Many of our international partners (18F and GDS, for example) build a lot of their services and tools with Ruby or Python. Different platforms (like Rails or Django) add useful benefits for different technology use-cases, and one of our goals is to choose the best technology for a given problem (rather than starting with a particular technology in mind first).
Goal 1: Optimizing for reusability
CDS’ mandate is to build prototypes and digital solutions for our departmental partners, who will deploy and maintain these services in the long-term. That makes it critical that the IT teams within departments we work with are able to easily take and run with the things that we build. Within the federal government, many of these teams are specialized in .NET or Java – languages and frameworks that have been standardized for years, but that aren’t particularly well-optimized for building web applications quickly.
Laravel is a PHP framework that is highly-flexible, and has a wide-ranging community of open-source packages that easily handle anything from complex user roles and permissions to integrations with other systems. For developers that are used to .NET and Java, Laravel projects are easy to understand, learn from, and build on, which makes Laravel a really useful framework for the projects that we’ll be co-developing with other government IT teams.
We’re also building one of our first major projects with DrupalWXT, a specialized version of Drupal that includes all of the accessibility features of the Web Experience Toolkit. DrupalWXT provides a great foundation for this project in particular, since the project could involve a lot of customization work in the years beyond CDS’ involvement. The Ottawa region has a talented Drupal community that could help support this, both inside and outside of the federal government.
Goal 2: Optimizing for technology pathfinding
As Mike would say, though, the skills used to build React projects are almost completely different from the skills used to build with more traditional MVC frameworks. It’s fascinating to watch him build components and projects in React – the final products are stunning, but the learning curve is steep.
The road ahead
A key part of this is also about helping enable colleagues across government to experiment as well. If you’re a developer working in a “.NET shop” and you’d like to build something in a new framework or programming language, we’d love to chat. We’ll share what we’re learning along the way – when things work, and when they don’t – and if there’s any way we can empower you to use leading-edge tools, we’re here to help.
What do you think? Are we missing the latest and greatest modern framework? We’d love to hear from you. All of our code is on GitHub, and we’re just getting started on new projects. Give us a shout on Twitter anytime you have questions, and if you’re interested in joining the team apply now! We’d love to have you along for the journey.