How to Disable Code: The Developer’s Production Kill Switch

758
CloudBees
CloudBees is the Enterprise Software Delivery Leader. We provide the leading DevOps solutions for large and compliance-first organizations. We enable developers to focus on delivering great software, while providing management with powerful risk mitigation, compliance and governance capabilities. You develop great software, we’ll take care of the rest!

The following is a guest post written by Carlos Schults.

Being able to disable code in production is a power that many developers aren’t aware of. And that’s a shame. The ability to switch off some portions—or even complete features—of the codebase can dramatically improve the software development process by allowing best practices that can shorten feedback cycles and increase the overall quality.

So, that’s what this post will cover: the mechanisms you can use to perform this switching off, why they’re useful and how to get started. Let’s dig in.

Why Would You Want to Disable Code?

Before we take a deep dive into feature flags, explaining what they are and how they’re implemented, you might be asking: Why would people want to switch off some parts of their codebase? What’s the benefit of doing that?

To answer these questions, we need to go back in time to take a look at how software was developed a couple of decades ago. Time for a history lesson!

The Dark Ages: Integration Hell

Historically, integration has been one of the toughest challenges for teams trying to develop software together.

Picture several teams inside an organization, working separately for several months, each one developing its own feature. While the teams were working in complete isolation, their versions of the application were evolving in different directions. Now they need to converge again into a single, non conflicting version. This is a Herculean task.

That’s what “integration hell” means: the struggle to merge versions of the same application that have been allowed to diverge for too long.

Enter the Solution: Continuous Integration

“If it hurts, do it more often.” What this saying means is that there are problems we postpone solving because doing so is hard. What you often find with these kinds of problems is that solving them more frequently, before they accumulate, is way less painful—or even trivial.

So, how can you make integrations less painful? Integrate more often.

That’s continuous integration (CI) in a nutshell: Have your developers integrate their work with a public shared repository, at the very least once a day. Have a server trigger a build and run the automated test suite every time someone integrates their work. That way, if there are problems, they’re exposed sooner rather than later.

How to Handle Partially Completed Features

One challenge that many teams struggle with in CI is how to deal with features that aren’t complete. If developers are merging their code to the mainline, that means that any developments that take more than one day to complete will have to be split into several parts.

How can you avoid the customer accessing unfinished functionality? There are some trivial scenarios with similarly trivial solutions, but harder scenarios call for a different approach: the ability to switch off a part of the code completely.

Feature Flags to the Rescue

Defining Feature Flags

There are many names for the mechanisms that allow developers to switch a portion of their code off and on. Some call them “feature toggles” or “kill switches.” But “feature flags” is the most popular name, so that’s what we’ll use for the remainder of this post. So, what are feature flags?

Put simply, feature flags are techniques that allow teams to change the behavior of an application without modifying the code. In general, flags are used to prevent users from accessing and using the changes introduced by some piece of code, because they’re not adequate for production yet for a number of reasons.

Disable Code: What Are the Use Cases?

We’ll now cover some of the most common use cases for disabling code in production.

Switching Off Unfinished Features

As you’ve seen, one of the main use cases for feature flags is preventing users from accessing features that aren’t ready for use yet.

That way, programmers developing features that are more complex and take a longer time to complete aren’t prevented from integrating their work often and benefiting from it.

Enabling A/B Testing

The adoption of feature flags enables the use of several valuable practices in the software development process, one of which is A/B testing.

A/B testing is a user experience research technique that consists of comparing two versions of a website or application to decide which one to keep. It entails randomly splitting users into two groups, A and B, and then delivering a different version of the application to each group. One group might receive the current production version, which we call the “control,” whereas the second group would receive the candidate for the new version, called the “treatment.”

The testers then monitor the behavior of both groups and determine which of the versions achieved better results.

Feature flags are a practical way to enable A/B testing because they allow you to quickly and conveniently change between the control and treatment versions of your application.

Enabling Canary Releases

If you deliver the new version of your app to your entire userbase at once, 100 percent of your users will be impacted if the release is bad in some way. What if you could gradually roll out the new version instead? You’d first deploy to a small subset of users, monitoring that group to detect issues. If something went wrong, you could roll it back. If everything looked fine, you could then gradually release the version for larger groups. That’s a canary release in a nutshell. It’s another powerful technique that feature flags might help with.

Customizing Features According to Users’ Preferences

It’s not uncommon to have to customize your application according to the needs of specific users, and there are several ways in which software teams can accomplish that—some more efficient, and others less so (companies that create separate branches or entire repositories for each client come to mind).

This is another area where feature flags could help, allowing teams to dynamically switch between different versions of the same functionality.

Disable Code in Production 101

How do you go about disabling code? That’s what we’re going to see now, in three increasingly sophisticated phases.

First Stage: The Most Basic Approach

We start with an approach that’s so primitive, it maybe shouldn’t be considered a feature flag at all. Consider the pseudocode below:

calculateAdditionalWorkHours(Employee employee, Date start, Date end) {     
    // return calculateAdditionalWorkHoursSameOldWay(employee, start, end);
    return calculateAdditionalWorkHoursImproved(employee, start, end); 
    }

In the code above, we're just commenting out the old version of some method and replacing it with a new version. When we want the older version to be used, we just do the opposite. (Well, I said it was primitive.) This approach lacks one of the most fundamental properties of a feature flag—the ability to change how the application behaves without changing its code.

However, it plants the seed for more sophisticated approaches.

Second Stage: Taking the Decision Out of the Code

The previous approach didn't allow developers to select the desired version of the feature without changing the code. Fortunately, that's not so hard to do. First, we introduce a logical variable to determine which version we're going to use:

calculateAdditionalWorkHours(Employee employee, Date start, Date end) {

    var result = useNewCalculation
        ? calculateAdditionalWorkHoursImproved(employee, start, end)
        : calculateAdditionalWorkHoursSameOldWay(employee, start, end);

    return result;
}

Then, we use some mechanism to be able to assign the value to the variable from an external source. We could use a configuration file:

var useNewCalculation = config[newCalculation];

Passing arguments to the application might be another option. What matters is that we now have the ability to modify how the app behaves from the outside, which is a great step toward "true" feature flagging.

Keep in mind that the code examples you see are all pseudocode. Using your favorite programming language, there's nothing stopping you from starting with this approach and taking it up a notch. You could, for instance, use classes to represent the features and design patterns (e.g., factories) to avoid if statements.

Stage 3: Full-Fledged Feature Flag Management

The previous approach might be enough when your application has only a small number of flags. But as that number grows, things start to become messy.

First, you have the issue of technical debt. Manually implemented feature flags can create terribly confusing conditional flows in your codebase. That only grows worse with new flags being introduced each day. Additionally, they might make the code harder to understand and navigate, especially for more junior developers, which is an invitation for bugs.

Another problem is that as the number of flags grows, it becomes more and more common to forget to delete old, obsolete ones.

The main problem of a homegrown approach is that it doesn't give you an easy way to see and manage all of your flags at once. That's why our third and final stage is a single piece of advice: Instead of rolling out your own feature flags approach, adopt a third-party feature flag management system.

Feature Flags Are a CI/CD Enabler

We've covered the mechanisms developers can use to disable portions of their codebase in production without having to touch the code. This capability is powerful and enables techniques such as A/B testing and canary releases, which are all hallmarks of a modern, agile-based software development process.

The names for the techniques might vary—feature flags, feature toggles, feature flipper, and so on. The way in which the techniques are implemented can also vary—from a humble if statement to sophisticated cloud-based solutions.

But no matter what you call them, you can't overstate the benefit these mechanisms offer. They're an enabler of Continuous Integration, which is essential for any modern software organization that wants to stay afloat.

CloudBees
CloudBees is the Enterprise Software Delivery Leader. We provide the leading DevOps solutions for large and compliance-first organizations. We enable developers to focus on delivering great software, while providing management with powerful risk mitigation, compliance and governance capabilities. You develop great software, we’ll take care of the rest!
Tools mentioned in article
Open jobs at CloudBees
Senior Development Support Engineer (...
USA
<p><strong data-stringify-type="bold">Our Customers Develop Software at the Speed of Ideas</strong></p> <p><span style="font-weight: 400;">CloudBees, the enterprise software delivery company, provides the industry’s leading DevOps technology platform. CloudBees enables developers to focus on what they do best: Build stuff that matters while providing peace of mind to management with powerful risk mitigation, compliance, and governance tools. Used by many of the Fortune 100, CloudBees is helping thousands of companies harness the power of continuous everything and gets them on the fastest path from a great idea, to great software, to amazing customer experiences, to being a business that changes lives.</span></p> <p><span style="font-weight: 400;">Backed by Matrix Partners, Lightspeed Venture Partners, Verizon Ventures, Delta-v Capital, Golub Capital, and Unusual Ventures, CloudBees was founded in 2010 by former JBoss CTO Sacha Labourey and an elite team of continuous integration, continuous delivery, and DevOps professionals.</span></p> <h2><span style="font-weight: 400;">Team description</span></h2> <p><span style="font-weight: 400;">CloudBees customers rely on our Support team to help them be successful in the use of our products. Our team is uniquely positioned to help sustain the company’s growth by providing a customer support experience that surpasses expectations. These positive customer experiences help drive annual renewals and business expansion. A successful Development Support Engineer (DSE) will use their skills and experience to accurately diagnose customer issues and get them resolved in a timely way, to the customer’s satisfaction. In addition, motivated individuals who want to contribute in other ways will have opportunities to work on our collection of internal tools that automate the diagnosis of issues, making the entire team more efficient by reducing manual work.</span></p> <p><span style="font-weight: 400;">A typical day in our Support team starts with a scrum meeting where we review open and unassigned cases and help each other with issues we’re stuck on. Working on active cases, we answer basic questions and also troubleshoot problems that range from the mundane to the fiendishly complicated (it helps if you enjoy a good challenge). We collaborate with each other throughout the day, via Slack or video calls. During down time, we build technical knowledge through training and tools development.</span></p> <p><span style="font-weight: 400;">CloudBees has been a remote-work-first company since it was founded, and the majority of the DSE team works remotely. The existing team has a mix of backgrounds including system administrators, developers, support engineers, and devops engineers. We strive to provide everyone on the team with interesting challenges, opportunities for personal and professional growth, and a positive work/life balance.</span></p> <h2><span style="font-weight: 400;">What You'll Do&nbsp;</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Answer customer questions about product usage and best practices</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Diagnose complex technical issues and provide solutions or workarounds</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Communicate with customers through a ticketing system, with phone support sometimes required for complex or urgent issues</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Collaborate frequently with members of the Support and Engineering teams</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Contribute to documentation</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Contribute to internal software tools to automate diagnosis of customer issues</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work a weekend on-call rotation every 4-8 weeks (daytime hours only)</span></li> </ul> <h2><span style="font-weight: 400;">What The Role Requires&nbsp;</span></h2> <p><span style="font-weight: 400;">A successful candidate will have:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Basic Linux system administration knowledge</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Good communication skills (English language fluency required)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The ability to work independently</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">The ability to build knowledge of new technologies easily</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">A sense of empathy with our customers</span></li> </ul> <p><span style="font-weight: 400;">As previously mentioned, members of our team have a variety of past work experience, and each bring a different mix of skills to our team. The following are some examples of these skills, but by no means do we expect candidates to have all of them. If any of these fit with your experience, we would love to hear from you!</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">System administration knowledge, especially Linux, storage, and/or networking</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Good working knowledge of popular DevOps tools and services such as: Jenkins, Docker, Artifactory/Nexus, Kubernetes, git &amp; GitHub</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of common enterprise environments &amp; technologies such as LDAP &amp; databases</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of common web application architectures, SSL, REST API concepts, etc.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Understanding of Continuous Integration and Continuous Deployment concepts and practices</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with cloud computing environments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Programming experience, anything from shell scripting to Java development</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Open source community contributions, especially Jenkins</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Previous experience in customer-facing roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Computer Science / IT degree or equivalent work experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Certifications: Cloud computing providers, Kubernetes, etc.</span></li> </ul> <h2><span style="font-weight: 400;">What You'll Get&nbsp;</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Gain experience working with and troubleshooting a variety of tools used widely in the tech industry</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Enhance your career by completing industry-recognized technical certifications</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Manage projects and initiatives within the team, contributing to team goals</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Potential future opportunities to grow into management, engineering, or other field roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Play a key role in maintaining and growing company revenue over time</span></li> </ul> <p><span style="font-weight: 400;">We have a culture of movers and shakers and are leading the way for everyone else with a vision to transform the industry. We are authentic in who we are. We believe in our abilities and strengths to change the world for the better. Being inclusive and working together is at the heart of everything we do. We are naturally curious. We ask the right questions, challenge what can be done differently and come up with intelligent solutions to the problems we find. If that’s you, get ready to bee impactful and join the hive.</span></p> <p>At CloudBees, we truly believe that the more diverse we are, the better we serve our customers. A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers. Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.</p> <p>In the technology industry, diversity creates a competitive advantage. CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers. CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.</p>
Associate Development Support Enginee...
USA
<p><span style="font-size: 12pt;"><strong>About CloudBees</strong></span></p> <p><span style="font-weight: 400; font-size: 12pt;">CloudBees provides the leading software delivery platform for enterprises, enabling them to continuously innovate, compete, and win in a world powered by the digital experience. Designed for the world's largest organizations with the most complex requirements, CloudBees enables software development organizations to deliver scalable, compliant, governed, and secure software from the code a developer writes to the people who use it. The platform connects with other best-of-breed tools, improves the developer experience, and enables organizations to bring digital innovation to life continuously, adapt quickly, and unlock business outcomes that create market leaders and disruptors.</span></p> <p><span style="font-size: 12pt;"><span style="font-weight: 400;">CloudBees was founded in 2010 and is backed by Goldman Sachs, Morgan Stanley, Bridgepoint Credit, HSBC, Golub Capital, Delta-v Capital, Matrix Partners, and Lightspeed Venture Partners. Visit </span><a href="http://www.cloudbees.com/"><span style="font-weight: 400;">www.cloudbees.com</span></a><span style="font-weight: 400;"> and follow us on </span><a href="https://twitter.com/CloudBees?s=20"><span style="font-weight: 400;">Twitter</span></a><span style="font-weight: 400;">, </span><a href="http://www.linkedin.com/company/cloudbees"><span style="font-weight: 400;">LinkedIn</span></a><span style="font-weight: 400;">, and </span><a href="https://www.facebook.com/CloudBees"><span style="font-weight: 400;">Facebook</span></a><span style="font-weight: 400;">.</span></span></p> <h2><span style="font-weight: 400; font-size: 12pt;">Team Description</span></h2> <p><span style="font-weight: 400; font-size: 12pt;">CloudBees customers rely on our Support team to help them be successful in the use of our products. Our team is uniquely positioned to help sustain the company’s growth by providing a customer support experience that surpasses expectations. These positive customer experiences help drive annual renewals and business expansion. A successful Development Support Engineer (DSE) will use their skills and experience to accurately diagnose customer issues and get them resolved in a timely way, to the customer’s satisfaction. In addition, motivated individuals who want to contribute in other ways will have opportunities to work on our collection of internal tools that automate the diagnosis of issues, making the entire team more efficient by reducing manual work.</span></p> <p><span style="font-weight: 400; font-size: 12pt;">A typical day in our Support team starts with a scrum meeting where we review open and unassigned cases and help each other with issues we’re stuck on. Working on active cases, we answer basic questions and also troubleshoot problems that range from the mundane to the fiendishly complicated (it helps if you enjoy a good challenge). We collaborate with each other throughout the day, via Slack or video calls. During down time, we build technical knowledge through training and tools development.</span></p> <p><span style="font-weight: 400; font-size: 12pt;">CloudBees has been a remote-work-first company since it was founded, and the majority of the DSE team works remotely. The existing team has a mix of backgrounds including system administrators, developers, support engineers, and devops engineers. We strive to provide everyone on the team with interesting challenges, opportunities for personal and professional growth, and a positive work/life balance.</span></p> <h2><span style="font-weight: 400; font-size: 12pt;">What You'll Do&nbsp;</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Answer customer questions about product usage and best practices</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Diagnose complex technical issues and provide solutions or workarounds</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Communicate with customers through a ticketing system, with phone support sometimes required for complex or urgent issues</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Collaborate frequently with members of the Support and Engineering teams</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Contribute to documentation</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Contribute to internal software tools to automate diagnosis of customer issues</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Work a weekend on-call rotation every 4-8 weeks (daytime hours only)</span></li> </ul> <h2><span style="font-weight: 400; font-size: 12pt;">What The Role Requires&nbsp;</span></h2> <p><span style="font-weight: 400; font-size: 12pt;">A successful candidate will have:</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Basic Linux system administration knowledge</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Good communication skills (English language fluency required)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">The ability to work independently</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">The ability to build knowledge of new technologies easily</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">A sense of empathy with our customers</span></li> </ul> <p><span style="font-weight: 400; font-size: 12pt;">As previously mentioned, members of our team have a variety of past work experience, and each bring a different mix of skills to our team. The following are some examples of these skills, but by no means do we expect candidates to have all of them. If any of these fit with your experience, we would love to hear from you!</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">System administration knowledge, especially Linux, storage, and/or networking</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Good working knowledge of popular DevOps tools and services such as: Jenkins, Docker, Artifactory/Nexus, Kubernetes, git &amp; GitHub</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Knowledge of common enterprise environments &amp; technologies such as LDAP &amp; databases</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Knowledge of common web application architectures, SSL, REST API concepts, etc.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Understanding of Continuous Integration and Continuous Deployment concepts and practices</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Experience with cloud computing environments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Programming experience, anything from shell scripting to Java development</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Open source community contributions, especially Jenkins</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Previous experience in customer-facing roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Computer Science / IT degree or equivalent work experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Certifications: Cloud computing providers, Kubernetes, etc.</span></li> </ul> <h2><span style="font-weight: 400; font-size: 12pt;">What You'll Get&nbsp;</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Gain experience working with and troubleshooting a variety of tools used widely in the tech industry</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Enhance your career by completing industry-recognized technical certifications</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Manage projects and initiatives within the team, contributing to team goals</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Potential future opportunities to grow into management, engineering, or other field roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400; font-size: 12pt;">Play a key role in maintaining and growing company revenue over time</span></li> </ul> <p><span style="font-weight: 400; font-size: 12pt;">At CloudBees, we truly believe that the more diverse we are, the better we serve our customers.&nbsp; A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers.&nbsp; Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.</span></p> <p><span style="font-weight: 400; font-size: 12pt;">In the technology industry, diversity creates a competitive advantage.&nbsp; CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers.&nbsp; CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.</span></p>
Principal Development Support Enginee...
- EMEA
<p><strong>About CloudBees</strong></p> <p><span style="font-weight: 400;">CloudBees provides the leading software delivery platform for enterprises, enabling them to continuously innovate, compete, and win in a world powered by the digital experience. Designed for the world's largest organizations with the most complex requirements, CloudBees enables software development organizations to deliver scalable, compliant, governed, and secure software from the code a developer writes to the people who use it. The platform connects with other best-of-breed tools, improves the developer experience, and enables organizations to bring digital innovation to life continuously, adapt quickly, and unlock business outcomes that create market leaders and disruptors.</span></p> <p><span style="font-weight: 400;">CloudBees was founded in 2010 and is backed by Goldman Sachs, Morgan Stanley, Bridgepoint Credit, HSBC, Golub Capital, Delta-v Capital, Matrix Partners, and Lightspeed Venture Partners. Visit </span><a href="http://www.cloudbees.com/"><span style="font-weight: 400;">www.cloudbees.com</span></a><span style="font-weight: 400;"> and follow us on </span><a href="https://twitter.com/CloudBees?s=20"><span style="font-weight: 400;">Twitter</span></a><span style="font-weight: 400;">, </span><a href="http://www.linkedin.com/company/cloudbees"><span style="font-weight: 400;">LinkedIn</span></a><span style="font-weight: 400;">, and </span><a href="https://www.facebook.com/CloudBees"><span style="font-weight: 400;">Facebook</span></a><span style="font-weight: 400;">.</span></p> <h2><span style="font-weight: 400;">Team description</span></h2> <p><span style="font-weight: 400;">CloudBees customers rely on our Support team to help them be successful in the use of our products. Our team is uniquely positioned to help sustain the company’s growth by providing a customer support experience that surpasses expectations. These positive customer experiences help drive annual renewals and business expansion. A successful Development Support Engineer (DSE) will use their skills and experience to accurately diagnose customer issues and get them resolved in a timely way, to the customer’s satisfaction. In addition, motivated individuals who want to contribute in other ways will have opportunities to work on our collection of internal tools that automate the diagnosis of issues, making the entire team more efficient by reducing manual work.</span></p> <p><span style="font-weight: 400;">A typical day in our Support team starts with a scrum meeting where we review open and unassigned cases and help each other with issues we’re stuck on. Working on active cases, we answer basic questions and also troubleshoot problems that range from the mundane to the fiendishly complicated (it helps if you enjoy a good challenge). We collaborate with each other throughout the day, via Slack or video calls. During down time, we build technical knowledge through training and tools development.</span></p> <p><span style="font-weight: 400;">CloudBees has been a remote-work-first company since it was founded, and the majority of the DSE team works remotely. The existing team has a mix of backgrounds including system administrators, developers, support engineers, and devops engineers. We strive to provide everyone on the team with interesting challenges, opportunities for personal and professional growth, and a positive work/life balance.</span></p> <h2><span style="font-weight: 400;">What You'll Do&nbsp;</span></h2> <ul> <li data-stringify-indent="0" data-stringify-border="0">Answer customer questions about product usage and best practices</li> <li data-stringify-indent="0" data-stringify-border="0">Diagnose complex technical issues and provide solutions or workarounds</li> <li data-stringify-indent="0" data-stringify-border="0">Communicate with customers through a ticketing system, with phone support sometimes required for complex or urgent issues</li> <li data-stringify-indent="0" data-stringify-border="0">Collaborate frequently with members of the Support and Engineering teams</li> <li data-stringify-indent="0" data-stringify-border="0">Contribute to documentation</li> <li data-stringify-indent="0" data-stringify-border="0">Contribute to internal software tools to automate diagnosis of customer issues</li> <li data-stringify-indent="0" data-stringify-border="0">Work a weekend on-call rotation every 4-8 weeks (daytime hours only)</li> <li data-stringify-indent="0" data-stringify-border="0">Works on large impact and unique issues</li> <li data-stringify-indent="0" data-stringify-border="0">Exercises independent judgment in methods, techniques and evaluation criteria for obtaining results</li> <li data-stringify-indent="0" data-stringify-border="0">Independently develops new diagnostic techniques for novel issues to be used by wider team and/or customer use.</li> <li data-stringify-indent="0" data-stringify-border="0">Designs and implements sophisticated tools or product features.</li> <li data-stringify-indent="0" data-stringify-border="0">Acts independently to determine methods and procedures on new or special assignments</li> <li data-stringify-indent="0" data-stringify-border="0">May supervise the activities of others</li> <li data-stringify-indent="0" data-stringify-border="0">Accountable for an outcome or performance for a team of people.</li> <li data-stringify-indent="0" data-stringify-border="0">Able to handle the most critical long running escalations with ease and drive them to completion</li> <li data-stringify-indent="0" data-stringify-border="0">Resolves business need through strategic planning</li> <li data-stringify-indent="0" data-stringify-border="0">Acts independently to determine methods and procedures on new or special assignments.</li> <li data-stringify-indent="0" data-stringify-border="0">Proactively identifies company-wide systemic issues.</li> <li data-stringify-indent="0" data-stringify-border="0">Regularly interacts with and relied upon by senior leadership team across the company, including Customer Success, Sales, Engineering and Product.</li> </ul> <h2><span style="font-weight: 400;">What The Role Requires&nbsp;</span></h2> <p><span style="font-weight: 400;">A successful candidate will have:</span></p> <ul> <li data-stringify-indent="0" data-stringify-border="0">Basic Linux system administration knowledge</li> <li data-stringify-indent="0" data-stringify-border="0">Highly professional communication skills with customers, many times including C-level. (English)</li> <li data-stringify-indent="0" data-stringify-border="0">Able to deal with negative experiences with C-suite or senior director customer participants.</li> <li data-stringify-indent="0" data-stringify-border="0">The ability to work independently</li> <li data-stringify-indent="0" data-stringify-border="0">The ability to build knowledge of new technologies easily</li> <li data-stringify-indent="0" data-stringify-border="0">A sense of empathy with our customers</li> <li data-stringify-indent="0" data-stringify-border="0">Minimum of 12 years of related experience</li> <li data-stringify-indent="0" data-stringify-border="0">Certified Kubernetes Administrator</li> </ul> <p><span style="font-weight: 400;">As previously mentioned, members of our team have a variety of past work experience, and each bring a different mix of skills to our team. The following are some examples of these skills, but by no means do we expect candidates to have all of them. If any of these fit with your experience, we would love to hear from you!</span></p> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">System administration knowledge, especially Linux, storage, and/or networking</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Good working knowledge of popular DevOps tools and services such as: Jenkins, Docker, Artifactory/Nexus, Kubernetes, git &amp; GitHub</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of common enterprise environments &amp; technologies such as LDAP &amp; databases</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of common web application architectures, SSL, REST API concepts, etc.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Understanding of Continuous Integration and Continuous Deployment concepts and practices</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with cloud computing environments</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Programming experience, anything from shell scripting to Java development</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Open source community contributions, especially Jenkins</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Previous experience in customer-facing roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Computer Science / IT degree or equivalent work experience</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Certifications: Cloud computing providers, Kubernetes, etc.</span></li> </ul> <h2><span style="font-weight: 400;">What You'll Get&nbsp;</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Gain experience working with and troubleshooting a variety of tools used widely in the tech industry</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Enhance your career by completing industry-recognized technical certifications</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Manage projects and initiatives within the team, contributing to team goals</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Potential future opportunities to grow into management, engineering, or other field roles</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Play a key role in maintaining and growing company revenue over time</span></li> </ul> <p><span style="font-weight: 400;">At CloudBees, we truly believe that the more diverse we are, the better we serve our customers.&nbsp; A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers.&nbsp; Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.</span></p> <p><span style="font-weight: 400;">In the technology industry, diversity creates a competitive advantage.&nbsp; CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers.&nbsp; CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.</span></p>
Sr Software Engineer (Backend / Java)
Spain
<h2><span style="font-weight: 400;">About CloudBees</span></h2> <p><span style="font-weight: 400;">CloudBees provides the leading software delivery platform for enterprises, enabling them to continuously innovate, compete, and win in a world powered by the digital experience. Designed for the world's largest organizations with the most complex requirements, CloudBees enables software development organizations to deliver scalable, compliant, governed, and secure software from the code a developer writes to the people who use it. The platform connects with other best-of-breed tools, improves the developer experience, and enables organizations to bring digital innovation to life continuously, adapt quickly, and unlock business outcomes that create market leaders and disruptors.</span></p> <p><span style="font-weight: 400;">CloudBees was founded in 2010 and is backed by Goldman Sachs, Morgan Stanley, Bridgepoint Credit, HSBC, Golub Capital, Delta-v Capital, Matrix Partners, and Lightspeed Venture Partners. Visit</span><a href="http://www.cloudbees.com/"><span style="font-weight: 400;"> </span><span style="font-weight: 400;">www.cloudbees.com</span></a><span style="font-weight: 400;"> and follow us on</span><a href="https://twitter.com/CloudBees?s=20"><span style="font-weight: 400;"> </span><span style="font-weight: 400;">Twitter</span></a><span style="font-weight: 400;">,</span><a href="http://www.linkedin.com/company/cloudbees"><span style="font-weight: 400;"> </span><span style="font-weight: 400;">LinkedIn</span></a><span style="font-weight: 400;">, and</span><a href="https://www.facebook.com/CloudBees"><span style="font-weight: 400;"> </span><span style="font-weight: 400;">Facebook</span></a></p> <h2><span style="font-weight: 400;">About the Role</span></h2> <p><span style="font-weight: 400;">Cloudbees, the leader in CI/CD (Continuous Integration and Delivery) and the company behind Jenkins, is seeking a Senior Software Engineer with a background in Java Microservices and experience in performance engineering, databases and Kubernetes, to join our industry leading </span><a href="https://www.cloudbees.com/products/cloudbees-flow/?utm_source=google&amp;gclid=EAIaIQobChMItov-2YiE5gIVOvfjBx2CaAlOEAAYASAAEgIiePD_BwE"><span style="font-weight: 400;">Cloudbees Software Delivery Automation</span></a><span style="font-weight: 400;"> team.</span></p> <h2><span style="font-weight: 400;">What You'll Do</span></h2> <p><span style="font-weight: 400;">You will collaborate with Product managers, UX designers, Backend engineers to design as well as implement UI software using React, write unit tests to automate the verification of their code, and provide mentorship to other team members via architecture, design and code reviews.</span></p> <p><span style="font-weight: 400;">The Cloudbees CD team places high value on software quality and you'll with Quality Engineers within the team to ensure that the software is tested end to end. The ideal candidate would be someone who is interested in learning varied technologies and be a quick learner.&nbsp;&nbsp;&nbsp;&nbsp;</span></p> <h2><span style="font-weight: 400;">Role Requirements</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Deep knowledge of Core Java</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Proven experience with Spring and Hibernate frameworks</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience developing backend components, services or APIs in Java or a similar language</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Strong skills writing high-performance, multi-threaded, efficient and maintainable code</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience crafting and implementing highly scalable and performant microservices based applications</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Familiarity with HTTP, REST, HTML, JSON, and similar web-based development technologies, and with building complex multi-tier parallel distributed systems that communicate with them (such as the backend of complex websites)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of SQL and experience working with mainstream databases (one of MySQL, PostgreSQL, Oracle, MS SQL Server)</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with building, maintaining and scaling large scale distributed systems.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">You can identify trade-offs to various implementations and can make decisions about which solution would be best for a given situation.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Understanding of SaaS, PaaS, IaaS industry with hands-on experience with public cloud offerings (e.g., AWS, GCP, Azure).</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Bachelor's or Master's degree in computer science is highly preferred</span></li> </ul> <h2 style="padding-left: 40px;"><span style="font-weight: 400;">Desirable</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience using public (or private) cloud provider platforms like GCP, AWS or Azure, Kubernetes and Docker containers.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Knowledge of continuous integration/continuous delivery (CI/CD) is a plus.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Experience with analyzing thread safety and race conditions, parallelism, synchronization, and locking, including between threads, between machines in a cluster, and in the database, including optimistic and pessimistic locking.&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">SQL, object-relational mapping (e.g. using Hibernate), and basic DBA skills in Oracle and writing transactional code</span></li> </ul> <h2><span style="font-weight: 400;">Role Requirements</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Be part of a 2 week sprint executing on the backlog&nbsp; in lockstep with other developers, writing code as part of an Agile team</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work as an independent contributor collaborating with a team of developers and test engineers</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Collaborate with product management, support and engineering teams in order to establish priorities&nbsp;</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Mentoring Junior Developers &amp; code reviewing for a remote team setting best practices and policies, writing specs, wiki pages, Knowledge Base articles and other internal documentation</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Work closely with the Support team, and communicate with customer sysadmins, DBAs and developers for troubleshooting</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Provide technology recommendations and strategy to support CloudBees product requirements</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Collaborate with product management, support and engineering teams in order to establish priorities, understand requirements, formulate test plans and execute them accordingly.</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work with customers directly on urgent issues</span></li> </ul> <h2><span style="font-weight: 400;">What You'll Get</span></h2> <ul> <li style="font-weight: 400;"><span style="font-weight: 400;">Highly competitive benefits and vacation package</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Ability to work for one of the fastest growing companies with some of the most talented people in the industry</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Team outings</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Fun, Hardworking, and Casual Environment</span></li> <li style="font-weight: 400;"><span style="font-weight: 400;">Endless Growth Opportunities</span></li> </ul> <p><span style="font-weight: 400;">At CloudBees, we truly believe that the more diverse we are, the better we serve our customers.&nbsp; A global community like Jenkins demands a global focus from CloudBees. Organizations with greater diversity—gender, racial, ethnic, and global—are stronger partners to their customers.&nbsp; Whether by creating more innovative products, or better understanding our worldwide customers, or establishing a stronger cross-section of cultural leadership skills, diversity strengthens all aspects of the CloudBees organization.</span></p> <p><span style="font-weight: 400;">In the technology industry, diversity creates a competitive advantage.&nbsp; CloudBees customers demand technologies from us that solve their software development, and therefore their business problems, so that they can better serve their own customers.&nbsp; CloudBees attributes much of its success to its worldwide work force and commitment to global diversity, which opens our proprietary software to innovative ideas from anywhere. Along the way, we have witnessed firsthand how employees, partners, and customers with diverse perspectives and experiences contribute to creative problem solving and better solutions for our customers and their businesses.</span></p>
Verified by
Technical Evangelist
Dir Growth Marketing
You may also like