Konstantin Tennhard
Software Engineer

Hi, my name is Konstantin! I'm a software engineer based in Canada. I currently work for Shopify where I primarly focus on app integration and platform extensibility.

I'm passionate about science, technology, music production and photography. I maintain a handful of open source projects on GitHub, occasionally music production tutorials on YouTube, share some of my music on SoundCloud and post some of my photography on Instagram.

Professional Experience

Staff Developer at Shopify Inc.
Since November 2020 · Toronto, Canada

My main focus as Staff Developer at Shopify is conceptualizing and implementing strategies for platform extensibility. My work is focused on App Extensions and includes

  • defining interfaces for extending into various Shopify products (Checkout, Admin, etc.) across multiple platforms (React, React Native, iOS, and Android)
  • developing client-side and server-side frameworks enabling teams at Shopify to define extension points, as well as,
  • building CLI tooling for a great first and third-party developer experience, and
  • contributing to the development of client-side libraries used by first and third-party developers to build extensions.
Engineering Manager at Shopify Inc.
November 2017 – November 2020 · Toronto, Canada

As part of Shopify's App Platform team, I was primarily responsible for leading the App Extension team, which included vision and goal setting, planning execution, and internal stakeholder management. The teams focus was on on platform extensibility and deep integration of 3rd party applications into Shopify's products.

In addition to leading the App Extension team, I also had the engineering managers of two other teams report to me. These teams were focused on development tools and 3rd party education and a multi-month re-architecture and data migration effort in Shopify's core product.

Senior Developer at Shopify Inc.
June 2016 – November 2017 · Ottawa, Canada

As a software developer, my main responsibility was to consistently improve and extend the software ecosystem that forms the eCommerce platform operated by Shopify Inc. My day to day work was mostly focused around the improvements to Shopify Partners. The highlight of this phase of my career was working directly with the CTO of Shopify for two months to gain a better understanding of future opportunities surrounding 3rd party application. This work created the foundation for any subsequent work I have been doing at Shopify since.

Developer at Shopify Inc.
June 2015 – June 2016 · Ottawa, Canada

As developer on the Partners team, I was mainly focused on improving Shopify Partners as well as implementing an Uber Rush integration as a Shopify App.

Developer at flinc GmbH
August 2011 – December 2014 · Darmstadt, Germany

As a software developer, my main responsibility was to ensure constant technical advancement of the dynamic ride sharing platform operated by the flinc AG. This included developing technical solutions to various real-world problems, as well as, implementing these solutions using various technologies, including, but not limited to, Ruby, JavaScript, SQL, R, Haml / HTML, and SCSS / CSS.

Research Assistant at Technische Universität Darmstadt
July 2007 – July 2011 · Darmstadt, Germany

As a research assistant and software developer my main responsibility was to design and develop applications allowing users to interface with an experimental real-time timetable information system for the German rail road network. All research was done in cooperation with the the German railway service provider, Deutsche Bahn. My day to day work included the use of the following technologies: Ruby, JavaScript, SQL, C, HTML, CSS, and Bash.


M. Sc. of Computer Science with minor in Computer Linguistics

Technical University of Darmstadt, Germany, 2014
Designing a Generic Web Service for Timetable Information Systems

B. Sc. of Computer Science

Technical University of Darmstadt, Germany, 2010
Predictive Modelling for Efficient Detour Estimation in Dynamic Ride Sharing

Open Source Projects

Smart Properties

SmartProperties are Ruby accesors on steroids. They enable nil checks, type checks, type conversion and setting default values for properties.

Active Operation

ActiveOperation is a micro-framework for modelling business processes in Ruby applications. It is an especially great companion for Rails applications. The core idea behind an operation is to move code that usually would either live in a controller or a model into a dedicated object.

Request Interceptor

Request interceptor is a Ruby library for simulating foreign APIs using Sinatra applications. Its purpose is similar to VCR.

Action Widget

ActionWidget is a light-weight widget system for Ruby on Rails. Think server-side React, but for more traditional Rails applications.

Conference Talks

Building Extensible Platforms · Nordic API, 2018

APIs enable 3rd-parties to interact with your platform and utilize your data to build new products. However, with APIs, the integration possibilities are limited. An API alone does not allow 3rd-parties to deeply integrate into your platform.

This talk introduces App Extensions, a new platform concept that enables these types of deep integrations. Unlike APIs, which enable your 3rd-party developers to consume data, App Extensions work in reverse. Extensions enable your 3rd-party developers to surface 3rd-party functionality directly in your product. As a result, users get a seamless, rich and powerful user experience.

Foreign API Simulation with Sinatra · RailsConf, 2016

Nowadays, we often rely on third party services that we integrate into our product, instead of building every aspect of an application ourselves. In many cases, well written API clients exist, but on occasion we run into the issue that there isn't a ready to use one.

This talk focus on how you write good API clients and more importantly how you test them without hitting the remote API. So far, the standard approach has been replaying requests with VCR or stubbing them with Webmock. There is a third option: simulating foreign APIs with Sinatra from within your test suite!

Large-scale Rails Applications · Ruby Lugundum, 2014

Building large-scale applications is a demanding process – no matter which framework you use. The true challenge, however, lies in maintaining these applications. To guarantee maintainability, we need to focus on the following three aspects: comprehensibility, modularity, and robustness. And easy to maintain applications make developers happy!

This talk is about building large scale applications on top of Ruby on Rails. The framework is known for getting you started quickly, but is it still a good choice when your application grows past 100,000 lines of code?

During this talk, we will mainly focus on how to model complex business processes efficiently, that is, how to extend Ruby on Rails with a modular service-layer that plays nice with ActiveRecord. You will see how to take advantage of some of Ruby's unique and more advanced language capabilities.

But most importantly, you will learn how to use all these techniques to improve the design of any existing Rails application.

Natural Language Processing with Ruby · RubyConf India, 2014

Natural Language Processing (NLP) is the art and science of making sense of user-generated data. It is a combination of state-of-the-art computer science techniques and linguistics. Being able to analyze plain text data allows us to gain a lot of insights. Popular NLP tasks are text summarization, keyword extraction or automatic extraction of the author's opinion from a text. In the age of social media, only NLP provides solutions to analyze what users are really care about. Companies such as Google or Facebook invest millions in NLP solutions to harvest information from all the data they have been gathering over the years.

This talk discusses a real-world NLP problem from both, the linguistic and the computer science perspective. It demonstrates how to develop a processing pipeline to efficiently solve problems of this kind in an automated fashion. Among other things, it showcases the usual NLP pipeline components:

  • Sentence segmentation,
  • Tokenization,
  • Part-of-speech tagging,
  • Named entity recognition.