About Jared Harper
Distributed Systems Specialist
Distributed systems problems are multithreaded problems writ large.
I love digging into problems and understanding them holistically. Often systems are built to solve for a feature, but are later found to be problematic at scale. My passion is improving the efficiency of these systems. Sometimes the solution is at the granular level, while other times it lies at the overall architectural level, or anywhere in between.
- Languages: Java, Python, C++, Kotlin, Ruby, Golang, Rust
- Databases: MySQL, PostgreSQL, Clickhouse, Cassandra, RocksDB, SQLite
- Coordination: Zookeeper
- Asynchronous processing: Kafka, SQS, Redis, RabbitMQ, beanstalkd
- Transport: HTTP, gRPC
- Infrastructure: AWS, Google cloud
- Miscellaneous: Dropwizard, Protocol Buffers, Docker, containerization, CI/CD
Areas of focus
- Polyglot programmer
- I have worked in many languages, often across multiple repositories of the same project.
- Data storage
- Whether it's relational data or "big" data, I have experience in determining the best tool for the job, at scale.
- Distributed systems
- Whether running a classic service-oriented architecture, or newer flavors of microservices, it is important to identify how to maintain the system as it grows. Defining data flows and coordination are important to creating maintainable, scalable systems.
- Stream processing
- With incoming high-throughput data, it's important to persist data before operating upon it. It's also important to create partitioning schemes to enforce order when data is processed later.
- Knowledge of how a system is performing at every layer is crucial to improving efficiency and performance, and improves the odds of solving future problems quickly. Over the years I have cultivated a method for determining ways to increase observability while producing code. This most often includes metrics at any IO layer but also includes adding custom trace spans or log lines.