Image for post
Image for post

It’s time for another article. This time I am going to talk about a really fun puzzle game I’m sure we have all played. Leetcode. Now, I have no affiliation with Leetcode. But, I really love the programmer puzzles that this site provides. It might seem like a time sink, but, I feel like it sharpens your skills a little while also giving you a fun brain teaser. It’s also great preparation for interviewing.

I chose to use Swift as my Leetcode challenge language because I enjoy the language. I think it is succinct and graceful programmatically. It’s fun using…


Turn On, Plug in, drop App

Image for post
Image for post

That was the name of my hack project at Optimizely. It was an IntelliJ plugin for all versions of IntelliJ with code complete for Go, Java, Kotlin, and Python. The plugin has now been released publicly. It was a great experience. I liked the IntelliJ ecosystem. You can literally create an IDE for a language that doesn’t exist. It essentially does all your basic lexical tokenizing for you.

After my experience, I wanted to write about it. I am very excited about Optimizely’s plugin and I think it will make using Optimizely seamless. In the first article of this series…


As a developer using feature flags while building Optimizely, I had to switch back and forth cutting and pasting between the application and the IDE while developing. This made my development flow hard to maintain because of all the context switching between application and IDE. It is also error prone with no way to test my configuration or audience other than to develop and run the project.

So, I wrote an IntelliJ plugin for Optimizely and the vscode extension, which helps you to manage, and use feature flags and experiments within the IDE. I will walk through an example using…


Image for post
Image for post

This is the last article in a four part series on the useful patterns that came out of the development of the Optimizely Swift SDK. The first in the series covered Swift enums with associated types. Then, we covered a new class called AtomicProperty. We discussed dependency injection in Swift as well. Here we will cover some clever ways to hide your objective-c implementations so as not to pollute your pure Swift design or APIs

Writing the Optimizely Swift SDK, we had to support both Swift and Objective-C APIs. I didn’t really want to pollute the Swift code with Objective-C…


Image for post
Image for post

This is the third article in a four part continuing series on the useful patterns that came out of the development of the Optimizely Swift SDK. The first in the series covered Swift enums with associated types. Then, we covered a new class called AtomicProperty. Here, we will discuss something a little more controversial: dependency injection in Swift.

The challenge in our SDK is that we have a lot of services that span different lifetimes and lifecycles. For instance, we can get a new configuration via json and some services may need to be recreated or re-initialized. The scope of…


Image for post
Image for post

This is the second article in a 4 part series on the useful patterns that came out of the development of the Optimizely Swift SDK. The first in the series covered Swift enums with associated types and the Result enum. Now, we will discuss a new generic class that I found very useful when dealing with a multithreaded environment. I called the generic class AtomicProperty.

A couple of requirements of the atomic property are that it had to be mutable (otherwise, why not just use a let), it had to hold a struct or class, and of course it had…


Swift enums with associated types and a generic enum pattern

Image for post
Image for post

I was recently tasked with writing the Optimizely Swift SDK. The timing seemed right, what with the introduction of Swift 5 and support for embedded frameworks in Swift.

For a little background, the Optimizely Swift SDK is used to run A/B testing as well as feature management on your iOS or tvOS device.

After completing the Swift SDK (we are in GA now), I looked back on some of the patterns that emerged. Some came out early, like enum usage, while others came out of needs during development. This has turned into a four-part series in which I’ll discuss the…


The Problem

At Optimizely, we’re always looking for ways to eat our own dogfood. Once we added feature flags to Optimizely Full Stack, we started adopting flags to remotely configure our own application. In the last few months, we’ve found this has been especially helpful for our end-to-end testing. Being able to toggle features on and off for each language we test makes running these features much faster.

Our SDK team is using a Full Stack project to configure our E2E tests. We do this by setting up our changes as feature flags in Optimizely, and creating an audience for each SDK…

Tom Zurkan

Senior Software Engineer at Optimizely working on Optimizely Full Stack. His interests lie in modern languages and how best to develop elegant crash proof code.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store