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()
        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 …

Frontend 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
  • Build and maintain highly interactive data-rich web applications (TypeScript React frontend). Collaborate closely with backend developers, QA, a product designer, and the Product Lead to design and implement new features while keeping an eye on appealing user interfaces.
  • Leverage your understanding of data query languages (e.g. SQL) with RTK Query to create meaningful and seamless user experiences.
  • Work with Docker and GitLab pipelines to facilitate Continuous Integration and Continuous Delivery (CI/CD) workflows.
  • Make our data speak by creating stunning data visualizations.
  • Enable our Business teams to effortlessly drill into data.
  • Provide junior developers with mentorship in best practices.
  • Work with extensive unit testing and Cypress E2E test coverage.
  • Reuse code in other projects via npm or yarn workspaces.
  • Explore Go and expand your knowledge across adjoe’s extensive tech stack.
  • Who You Are
  • You have experience in frontend development (ideally working on enterprise and/or analytics software).
  • You have experience in working with React, Angular, or Vue.js
  • You have gained knowledge of working in Typescript, Redux, Emotion-js, JSS, Tailwind, or a similar framework, Git, and (ideally) Docker.
  • If you have worked with React, you know how to work with hooks.
  • You know how to reuse code in other projects via npm modules or yarn workspaces.
  • You know how to structure an application and make it easy to understand for other developers.
  • You use the entire pyramid of tests and have worked with Jest and Cypress or similar tools to implement your automated tests.
  • You have experience with SQL and working with different databases.
  • You are interested in designing and implementing features while keeping an eye on user experience.
  • You have a keen interest in new technologies and best-practice approaches in the market to continuously improve products.
  • 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, and work remotely for 3 weeks per year, in a 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, and biweekly yoga classes.
  • Activity Package: Enjoy a host of team events and hackathons.
  • Career Growth Package: Dedicated growth budget to attend relevant conferences and online seminars of your choosing.
  • Wealth Building: Virtual stock options.
  • 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.