Davud and adjoe tech team at company hackathon sat on beanbags

Hackathon Highlights: Ready for Release Management & Feature Flags

I experimented with feature toggles during the hackathon. Our hackathons give us the opportunity to present the things we want to change and to present working solutions to the team.”

You’re a developer. You want to optimize your product – and also the technologies, processes, and software at your company. So, it’s a no-brainer that you hail in-house hackathons as well as the opportunity to showcase functional prototypes to your team and receive feedback from them. With any luck, you’ll then get to implement your idea in practice. 

Last month, adjoe’s Go Backend Developer Davud Safarov and DevOps Working Student Maaz Malik paired up for adjoe’s first hackathon of the year. Together, they decided to integrate a release management software into the development cycle at adjoe. By doing so, they wanted to address the pain points numerous developers face when deploying new features.

A Feature Working in Test Environments but Failing in Production

When releasing new features, you’re always vulnerable to unexpected user inputs or making a mistake deep inside the code. If the mistake is significant enough, the changes need to be reverted as soon as a problem has been identified. A process that can take up to a few minutes. It may well take longer if this error affects a large percentage of your clients. 

With their hackathon project, Davud and Maaz wanted to make sure that adjoe avoided exactly these problems caused by features failing in production. The release management software that Davud and Maaz integrated – Flipt – provides you with a dashboard. This allows you to enable or disable features in production with a click of a button. By integrating the software, the developers also wanted to make use of dark launching techniques.

screenshot of Flipt showing adjoe using release management and feature flags

Deploy as Much as You Want

Integrating a release management software helps you avoid taking big business risks and disappointing clients. With this software, you can

  1. adjust which percentage of your users will be able to see a new or experimental feature
  2. perform A/B testing for that feature to assess whether the feature would be beneficial to clients and adjoe itself,
  3. progressively deploy it to more users or more geographical zones and thereby avoid deploying a feature to all end users at once.

Developers – not just at adjoe – can also benefit from the capabilities of dark launching or beta releases. By incrementally deploying your features, you’ll be more confident when you release a new feature. Then, when you’re ready to launch on a larger scale, it’ll only take one click. With release management software, this step suddenly becomes significantly easier and quicker.

Release Management Software with Targeting Capabilities

By being able to decouple deployments from feature releases, you enable your product to have targeting capabilities without any extra effort. Without integrating an existing feature flag service, you can still build your in-house solution and enable certain features for an exclusive subset of partners. But you will ultimately be losing time and adding code complexity to your product.

Let’s say you want to optimize algorithms that determine how campaigns appear in adjoe’s Playtime offerwall. This would be a lot easier with release management software. Whether campaigns are sorted via CPI, margin, or profitability score, you can tailor your bidding model to suit certain partners. And once you know that you have a model that really works, you can deploy these optimizations on a larger scale. By doing this, you eliminate the risk of unnecessary revenue loss.

Example: Making an HTTP Request to the Feature Flag Service

After you have defined the flag and which partners you should expose to the profitability-based coin calculation algorithm in the dashboard, you can write your function that makes an HTTP request to the feature flag service, asking if the partner is in the experiment or not.*

* (code is simplified and does not reflect the full original code used at adjoe)

var profitabilityCalculationKey = "profitability-score-based-playtime-reward-calculation"
func (flip FlipFlagService) ShouldUseProfitabilityBasedCoinCalculation(partnerID string) bool {
    params := evaluate.NewEvaluateParams()
    params.SetBody(&models.FliptEvaluationRequest{
        FlagKey: strptr(profitabilityCalculationKey),
        Context: map[string]string{
            "PartnerID": partnerID,
        },
    })
    r, _ := flip.client.Evaluate.Evaluate(params)

    return r.Payload.Match
}

You can easily use this function for coin calculation and decide which algorithm should be used to calculate the coins for a campaign.

func (c CampaignService) calculateCoins(campaign Campaign) int64 {
    if c.experiments.ShouldUseProfitabilityBasedCoinCalculation(campaign.PartnerID)  {
        // calculate and return coin amount using new profitability-based algorithm
    }
    // calculate and return coin amount using the old way
}

Example 2: Targeting Test Devices for a New Offerwall Design

screenshot in Flipt of showing adjoe targeting test devices for new offerwall design

Here, Davud and Maaz selected who could see the new offerwall design; the targeted users are “adjoe test Devices.” Meaning that the new offerwall UI implemented by them will only be visible by the test devices owned by the company.

Avoid Wasting Time on the Revert Pipeline 

Integrating the right software with feature flags would mean developers like Davud and Maaz could deploy when and to whom they want. And much more frequently. They’d experience faster incident resolution thanks to kill switches – and also cut out a lot of the extensive communication and coordination needed between teams involved in the revert pipeline. No more team threads detailing what should be reverted, when a developer can tackle a fix, whether all external teams are ready for the release, and when the incident is finally resolved. 

Note: Quickly resolving a feature error by the feature toggle could in theory be managed by anyone in the company with access to the dashboard. For instance, anyone in adjoe’s Development, Product, or Business teams. You would not need knowledge of code to perform this incident resolution.

A Future of Feature Flags at adjoe

When Davud and Maaz opted to focus on release management software and feature toggles, they knew very well that this was not an adjoe-specific issue. But they did want to find an adjoe-specific answer and a working solution to show their team. And that’s exactly what hackathons are for. They looked at the market, picked flipt (a flag management service that was easy to set up), integrated it with adjoe’s product, and showed a fully working solution in a sandbox environment.

Davud and Maaz’s hackathon project brought to life a functional fix for a) optimizing adjoe’s partners’ performance, b) boosting adjoe’s business, and c) cutting important time spent on the revert pipeline. With its targeting capabilities, adjoe has already seen success in progressively deploying features for its partners. It could turn to release management software long-term as a means of boosting performance and team efficiency on a larger scale. So, it’s no wonder that the pair’s project received company recognition – and a reward.

It now remains to be seen which release management software adjoe will integrate its product with …

Senior Android Mobile Developer (f/m/d)

  • adjoe
  • Playtime Supply
  • Full-time
adjoe is a leading mobile ad platform developing cutting-edge advertising and monetization solutions that take its app partners’ business to the next level. Part of the applike group ecosystem, adjoe is home to an advanced tech stack, powerful financial backing from Bertelsmann, and a highly motivated workforce to be reckoned with.

Meet Your Team: Playtime Supply

Playtime Supply is building a unique software solution for app and game developers that puts users’ needs first. Instead of traditional monetization mechanisms, Playtime builds an engaging ad experience in which users can play and earn rewards for various new mobile games in Playtime. To predict which mobile game will best suit a user, the team has introduced ML algorithms.

To build this rewarded experience, adjoe’s backend reliably handles more than 200 million users – remaining stable despite impressive growth in the user base. And imagine this: adjoe’s Golang event consumer applications assign rewards equivalent to 700 months’ of time spent in Playtime every day to its users. 

The software depends on two main components.
1) adjoe’s Android mobile SDK – written in a combination of Java and Kotlin – which can be bundled by developers in their apps. 
2) The team’s highly scalable Golang backend, which is hosted on AWS and is otherwise responsible for developing a modern React (TypeScript) dashboard that provides adjoe’s clients and Business team colleagues with fast-loading insights.
What You Will Do
  • Help maximize our monetization by developing new features written in Java and Kotlin and implementing the newest Android or adjoe libraries.
  • Be responsible for cross-platform mobile development by ensuring our SDKs’ compatibility with other development frameworks like Unity, React Native, and Flutter.
  • Implement mechanisms to improve the technical stability, performance, and maintenance of adjoe’s SDK. Your goal is to make it as easy and smooth as possible for app publishers to implement and utilize adjoe’s technologies.
  • Take ownership of implementing Android specifications and requirements in our design.
  • Use test-driven development processes to further improve our test coverage and the smooth releases of our SDK updates to our hundreds of partner apps.
  • Work in an Agile/Scrum Environment alongside a team of developers to define the future of our products’ software architecture. 
  • Be part of an international English-speaking team dedicated to scaling our adtech platform beyond our hundreds of millions of monthly active users.
  • Who You Are
  • You are currently located in the EU region.
  • You have a degree in computer science (or a similar field) or 3+ years’ work experience as a mobile developer
  • You have gained expert knowledge of Java/Android/Kotlin
  • You have a deep understanding of Android app and service life cycles
  • You keep up to date with trends in mobile development
  • You have hands-on experience with libraries and SDKs
  • You are very aware of UX and UI trends
  • A big plus: You have knowledge of Android NDK, React Native (TypeScript), Unity (C#), Flutter (Dart), and React
  • A big plus: You have experience with build/deployment tooling (Maven, Gradle, NPM)
  • Heard of Our Perks?
  • Tech Package: Create game-changing technologies and work with the newest technologies out there.
  • Work–Life Package: Work remotely for 2 days per week, enjoy flexible working hours and 30 vacation days, modern office in the city center, dog-friendly.
  • Relocation Package: Receive visa and legal support, a generous relocation subsidy, and free German classes in the office.
  • Never-Go-Hungry Package: Graze on regular company and team lunches, free breakfasts, and a selection of free snacks and drinks.
  • Health Package: Free in-house gym, biweekly yoga classes
  • Activity Package: Enjoy a host of team events, hackathons, and company trips.
  • Career Growth Package: Dedicated growth budget to attend relevant conferences and online seminars of your choosing.
  • Skip writing cover letters. Tell us about your most passionate personal project, your desired salary and your earliest possible start date. We are looking forward to your application!

    We welcome applications from people who will contribute to the diversity of our Company.