Community Engineering

Blogs and articles from our engineering team

We (at Community) just had another Innovation-Week. I was actually working on generating pact-files from frontend code and then generating openapi spec files from elxir backend code and then automatically check that the frontend pact is compatible...
At Community, we run most of our infrastructure and services on AWS. We use several AWS services. Many of our own services interact with AWS directly, such as by uploading and downloading files from S3, querying Athena, and more. Lately, I've been...
Distributed systems pose all kinds of challenges. And we’ve built them in the web age, when the tech of the wider Internet is what we use in microcosm to build the underpinnings of our own systems. Our industry has done somersaults to try to mak...
I mostly use property-based testing to test stateless functional code. A technique I love to use is to pair property-based tests together with example-based tests (that is, "normal" tests) in order to have some tests that check real inpu...
Updated (2022-01-01): Added stage. At Community we are building a platform that will allow you to have meaningful conversations with large audiences … at scale!!! The architectural backbone is a shared-nothing micro-services architecture, t...
Follow other posts by At Community.com, we had a problem where a bunch of workers needed to pick up and process a large amount of data from the same DB table in a highly scalable manner, with high throughput. We wanted to be able to: Not re...
This is a common question when using Phoenix and when searching the web I didn’t find any complete examples. I ended up experimenting for myself and I figured I might as well share my findings.You essentially have two options.Because a router is a...
Phoenix comes with a few handy ways to test its components. For example, it has Phoenix.ControllerTest module, which helps us make a request that goes through the application endpoint all the way up to the controller. Phoenix also generates a Conn...
As people know … I am big fan of building and maintain this balance between Product and Engineering where … Product makes sure we build the right thing and Engineering makes sure we built it right (and we help each other to do so :))...
I know the feeling all too well, trying to find the right balance of IAM permissions without opening up your policy to ["ec2:*"]. Figuring out every permission your application requires can be an arduous process but there is a better way.
Hamler Blog Post Series … Hamler (I) - First week (this post) Hamler (II) - All solutions for part 1 (in Hamler and Haskell) Hamler (III) - Making Day21 10 times faster What’s at the intersection of Haskell, the Erlang Beam/OTP and th...
Follow other posts by Apache Spark is a perfect fit for processing large amounts of data. It’s not,  however, a perfect fit for our language stack at Community. We are largely an Elixir shop with a solid amount of Go, while Spark’s native stack...
At Community, we use RabbitMQ, a lot. It's the infrastructure backbone that allows our services (over forty at this point) to communicate with each other. That mostly happens through events (since we have an event-sourced system), but in some case...
I am in Hidden Valley Holiday Park. Working on the career progression framework for Community. It is 5am and … I realized something. Don’t hold your breath: It is something obvious (but I thought I share it anyway). If you want to be ...
The system that we're building at Community.com is made of a few services (around fifteen at the time of writing) that interact with each other through a basic version of event sourcing. All events flow (published and consumed) through RabbitMQ an...
A kernel “bug fix” that happened at the end of last year may be killing the performance of your Kubernetes- or Mesos-hosted applications. Here’s how we discovered that it was affecting us and what we did about it at Community. Bad 90th Percenti...
Last week I was in London attending Code Elixir LDN 2019 delivering a lightening talk on 3 languages in 3 minutes … This was my first Elixir conference. We had about 100 people there. The conference was very well organized. From what I can ...
Elixir has a some great syntactic sugar. A nice feature that was introduced back in Elixir 1.2 is the with statement which allows you to string together pattern matches without horrific nesting. You can now write out the whole happy path for you...