Thanks for signing up.
We'll see you soon 👋
We'll see you soon 👋
Hey everyone, welcome to the next interview from our Functional Workplaces series. This time, we chatted with Chris Bowdon, the CTO at Polecat Intelligence.
Chris shares how they transitioned from Java to Clojure and how that has benefited the team, as well as the rest of their tech stack and more details about Polecat Intelligence’s culture and team.
Before we dive in, don’t forget to sign up and subscribe to our newsletter to get personalised content and job opportunities straight into your inbox!
At Polecat Intelligence we help organisations understand and analyse the issues affecting their reputation. We process huge amounts of online news media and public social media through our data pipeline and enrich it with various algorithms and machine learning models, and make the results available for customers to explore through our web app. Environmental, Social and Governance (ESG) factors, and sustainability, are very important to us and we help our customers measure progress against their initiatives in these areas.
Our go-to language is Clojure. We use it for our backend web apps and data pipeline. The pipeline is composed of Kafka Streams applications, since we’ve found Kafka to be a reliable platform for the scale of data that we get. Our main data store is Elasticsearch, which is similarly great at handling the high data demand.
The bits that aren’t Clojure are Python web services that wrap machine learning models. That’s the area where Python really excels and it makes integrating the output of Data Science projects much easier.
The frontend is a SPA written in TypeScript and React, which talks to the backend via a single GraphQL API. We adopted GraphQL about 2 years ago as an alternative to a REST-ish API, and haven’t looked back. When we design new features, the schema serves as a great basis for discussing how frontend and backend integrate.
A few years ago we were working in Java and struggling with statefulness and hard-to-comprehend data transformations. One of our team members did a proof-of-concept in Clojure and after comparing it with some alternatives we were quickly convinced that this was the way forward. The flow of data through the Clojure code was much clearer and with no needless ceremony.
We started developing all our new code in Clojure and have now retired all the legacy Java code. It’s a cliche but yes, since adopting Clojure we have seen considerably fewer bugs and have a much more concise codebase.
Our perennial challenge is processing data at scale. Every day we receive millions of documents that must be enriched and aggregated, so efficient processing is a must. We’re constantly looking at ways to be smart about the computation we do.
Another challenge right now is enabling major customers to scale their usage of our product by using it for different teams or their own client organisations. So we’re developing this functionality now.
We’re very open, in terms of being receptive to new ideas and having everyone participate in the decision-making process. There’s no “This Is The Way” dictat, so when someone has an idea and can justify it, we listen and give it a chance. All of our tech choices have been engineer-led like this: Clojure, GraphQL, etc., as well as product features like our scoring algorithm.
We also tend to be data-driven at all levels: from understanding what features we can build from our data, to measuring the speed and accuracy of our code, through to customer analytics so we know if a feature has met our expectations.
It’s sometimes difficult to resist the urge to just ship something, but we find that this approach leads to better quality code and fewer headaches down the line.
Another important thing at Polecat is the work-life balance. We were originally hybrid-remote and then went 100% remote just before the first pandemic lockdown in the UK. This has been huge for us. Arranging your workday around life commitments like doing the school run, or just working at the hours that suit you best without worrying about commute times or missing people, is a much better way to work, so we’re proud to be one of the growing number of companies that are normalising this.
That’s not to say we’ve given up on the social aspect though. We still organise regular meetups, particularly in the Bristol area where we have a high concentration of people.
Here’s a photo from one of our recent lunches.
We do two stages, both online. First is a 15-30 minute audio call to discuss the role, ask any questions we have based on the candidate’s CV and answer any questions the candidate has. We also throw in a few technical questions to gauge ability.
The second stage is a video call with a technical segment and a segment on behavioural questions. The technical segment has some logic questions (the kind you can answer with pseudocode) and a pair programming exercise with one of our devs. The behavioural questions are aimed at understanding the candidate’s approach to teamwork and so on. The two segments take roughly one hour each, so we normally do them as two separate calls.
If you enjoy what you do and you’re proactive, you’ll succeed at Polecat. Simple as that.
Thanks for reading! I hope you enjoyed today’s interview. If you’re interested in joining the team at Polecat Intelligence they will start hiring for some new roles soon so make sure to keep on eye on there profile here at Functional Works!
Happy coding, Mihaela x
Engineers who find a new job through Functional Works average a 15% increase in salary.Start with GitHubStart with TwitterStart with Stack OverflowStart with Email