In the beginning, there was darkness.
[[Launch Time]]
[[Adventure choices]]
[[Case study]]This is Toggle.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_191226.jpg" width=500>
Toggle is a space explorer and spacelane maintainer. Their job is to go to new parts of space and plant spacelane flags so that the home office can create safe, efficient spacelanes.
Pack everything Toggle needs for a trip!
[[Rocket fuel]]
[[Spacelane flags]]
[[Tunes]]
[[Crew]]
[[All packed!|Adventure choices]]#Adventure
#choices
Hey, audience! Let's choose our adventure. You can't all vote, because it would take forever, so I'm just going to point at someone making eye contact with me, and they can make a choice.
(text-style:"rumble")[Where shall we go?]
* [[Development]]
* [[Design]]
* [[O(o)ps|O(o)ps]]
* [[Sales and Marketing]]
* [[User fun]]
* [[Deployment]]
* [[Case study]]
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190630.jpg" width=800>##Development
You are a developer deploying, but not always for external audiences. You might want to turn on features in these ways:
[[Internal testing]]
[[Dogfood]]
[[Visibility]]
[[Merging]]
[[Back to Adventure Choices|Adventure choices]]
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190835-1.jpg" width=500>##Design
Feature management is easy for everyone! What if your design team would like a chance to test some of the changes that they've been making to the interface?
Toggle likes to think about making a giant dot-to-dot drawing of all the flags they've placed.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/Toggle_launching.jpg" width=600>
[[A/B testing]]
[[Accessibility]]
[[White-labeling]]
[[Custom documentation]]
[[Back to Adventure Choices|Adventure choices]]##O(o)ps
We all know that the operations part of DevOps is full of people who care passionately about uptime, solid delivery, and security. They want a hand in feature management and a way to make sure they can turn things off in a hurry.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_192012.jpg" width=500>
[[Failover]]
[[Deployment failure]]
[[Kill switch]]
[[Deployment]]
[[Back to Adventure choices|Adventure choices]]##Sales and Marketing
Our products aren't very successful if we can't get people to want them and use them. For that we need marketing people to explain why our product is awesome, and sales people to find the people who need our solutions. These teams also need to be able to configure some parts of your product without a lot of fuss.
<!--demo screencap?>
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_191941.jpg" width=500>
[[This or that?|A/B testing]]
[[Currency]]
[[Market segments]]
[[Feature tiers]]
[[Tutorials]]##User settings
If there were no space travelers, Toggle wouldn't have a job. But different travelers care about different things. Some of them want to get where they're going as fast as possible, and some want to route around black-hole turbulence. Some travelers want to see as many planets as they can.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_191542.jpg" width="500">
Whatever their goal, we want to make sure the users, and the travelers, get the experience they are hoping for.
[[User colors]]
[[Accessibility]]
[[SSO customization]]
[[Back to Adventure choices|Adventure choices]]##Deployment
Deployment is not the same thing as activation.
Toggle deploys spacelane flags on moons and planets.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190738.jpg" width=500>
But until the signal is sent to activate them, they are dark and silent, waiting.
[[Canary launch]]
[[Albatross launch]]
[[Market segments]]
[[Kill switch]]
[[Internal testing]](enchant: ?Page, (background: "none"))
##Colors
(background: #ff00ff)[Users have a lot of feelings about their interfaces.]
(text-colour: white)[Some of us need high-contrast text to read.]
(css: "font-size: 200%")[Some of us need larger text.]
You can use feature flags and feature management to offer your users a high-contrast version of your site. Or one that looks like a hot dog stand.
[[Accessibility]]
[[SSO customization]]
[[Back to User fun|User fun]]
[[Back to Adventure choice|Adventure choices]]##Accessibility
Accessibility can include colors, but it can also mean offering users interfaces designed for tabbed or touch interfaces, interfaces that don't download images for slow connections, or even interfaces that are automatically dimmed at night.
The Net doesn't always have a lot of bandwidth between the stars, so Toggle appreciates it when she can set the tablet to only download images when they click them. It's fine to download everything planetside, but not out here.
[[User colors]]
[[SSO customization]]
[[Back to User fun|User fun]]
[[Back to Adventure choices|Adventure choices]]##Internal testing
Before you send someone out into deep space, you have them spend some time tooling around the solar system.
In the same way, you may want to test a product internally before you show it to the outside world. Use a feature toggle to turn it on only for the people who are logged in from your company IP addresses.
[[Canary launch]]
[[Albatross launch]]
[[Dogfood]]
[[Market segments]]
[[Kill switch]]
[[Back to Deployment|Deployment]]
[[Back to Development|Development]]
[[Back to Adventure choices|Adventure choices]]##Canary launch
Any spaceperson will tell you that you don't have to turn your rockets all the way on or all the way off to get where you're going. Steady, constant acceleration will do the trick and leave you more room for emergency manuevering.
When we launch a product, we can start by showing it just to the people who signed up as beta testers, or just to 10% of our user base. That gives us some time to make sure there aren't any unexpected effects at a larger scale, and that our infrastructure is up to the load. We can gradually increase the roll-out.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190835-1.jpg" width="500">
[[Internal testing]]
[[Albatross launch]]
[[Market segments]]
[[Kill switch]]
[[Back to Deployment|Deployment]]
[[Back to Adventure choices|Adventure choices]]##Albatross launch
Not everyone is excited about the amazing new features you've added. In fact, some people are really resistant to change, because they've built a whole infrastructure around the way it used to be.
Rather than force them to upgrade, you can create a non-upgrading group, and leave them out of all the new stuff so they can keep doing their custom things.
[[Internal testing]]
[[Canary launch]]
[[Market segments]]
[[Kill switch]]
[[Back to Deployment|Deployment]]
[[Back to Adventure choices|Adventure choices]]##Segments
Your feature may be banned in some countries. Or you may need to use a different method of data collection. What if you need to comply with COPPA, to track how children use your site?
Your deployment can have room for all these variables in the same codebase, if you take the time to design your features to be able to operate independently as they are switched on and off.
Think of your features like microservices - nothing is going to need to call all of them except a test harness.
[[Internal testing]]
[[Canary launch]]
[[Albatross launch]]
[[Kill switch]]
[[Back to Deployment|Deployment]]
[[Back to Sales and Marketing|Sales and Marketing]]##(text-style:"blink")+(text-color:"yellow")[aOOOga!]
<!--add a klaxon sound-->
Something has gone very wrong with a feature, and you need to get it out of production fast!
How fast does the kill switch work?
Literally (the literal literally), faster than you can say "Kill that feature".
If there's one thing Toggle appreciates, it's swift emergency response.
[[Internal testing]]
[[Canary launch]]
[[Albatross launch]]
[[Market segments]]
[[Back to Deployment|Deployment]]
[[Back to O(o)ps|O(o)ps]]##Dogfood
Toggle hopes they don't have to eat dogfood on their mission! But developers have made a joke about this - their dogfood (code) is so delicious that they would eat it like human food.
If you want to test in production, but not publicly, set your flags to show the feature only to internal users.
[[Visibility]]
[[Merging]]
[[Back to Development|Development]]
[[Back to Adventure Choices|Adventure choices]]
##Visibility
Developers want to be able to see their changes to test them, but they may not be ready for everyone to see them.
You can turn on a feature just for yourself while you're figuring it out. Just create the flag and add yourself as the only person who can see it.
Toggle tries out a lot of fancy dance moves when no one is around to see it.
[[Dogfood]]
[[Merging]]
[[Back to Development|Development]]
[[Back to Adventure choices|Adventure choices]]##Merging
If you've ever had to have an extended negotiation with someone because you have a merge conflict, you know why it's best to do trunk development or very short-lived branches. Trunk development seems risky until you realize that you have total control over what is actually released.
<!-- Merge spaghetti-->
Sometimes it's hard keep a bunch of branches straight in space-time. That's why Toggle wishes that everyone used the same spacelane, but Toggle doesn't always get their way.
[[Visibility]]
[[Dogfood]]
[[Adventure choices]]
#Currency
How do you want to get paid? Toggle gets paid in bars of gold-pressed latinum, but you may want to switch your prices from US dollars to Canadian dolllars, or yen or pesos or euros.
The user's browser probably already knows where they are, so we just need to send them the price in the correct currency.
<!--money-->
[[Feature tiers]]
[[Tutorials]]
[[Market segments]]
[[Back to Sales and Marketing|Sales and Marketing]]
[[Back to Adventure choices|Adventure choices]]##You get what you pay for
Super-luxury spaceliners are fast and comfortable, but they cost a lot to fly on. Toggle knows that if you're willing to fly in a smaller cabin, you can save a lot of gold-pressed latinum. It's the same spaceliner, but different experiences.
Sometimes we want our users to have different experiences, depending on what they paid for.
[[Currency]]
[[Tutorials]]
[[Market segments]]
[[Back to Sales and Marketing|Sales and Marketing]]
[[Back to Adventure choices|Adventure choices]]##Tutorials
It's helpful to have a tutorial the first time or two you use a product, but you don't want it popping up Every. Single. Time. Use a feature flag to let users opt out of tutorials when they're done.
Toggle has a lot of time to do video tutorials, but they're really sick of the tutorial about how to use the video player.
[[Feature tiers]]
[[Currency]]
[[Market segments]]
[[Back to Adventure choices|Adventure choices]]##Failover
Whether you're live in production or on your own in trackless space, sometimes you need to switch from something that isn't working to your backup.
You have a backup, right?
<!--smoking spaceship>
[[Deployment failure]]
[[Kill switch]]
[[Deployment]]
[[Back to O(o)ps|O(o)ps]]
[[Back to Adventure choices|Adventure choices]]##Fail forward
Sometimes things go wrong, and we usually reach for the roll-back in that case. If we just put everything back the way it was, it /should/ work again.
But what if instead of rolling back, you could roll foward? Keep all the good parts of the deploy, and just turn off the one feature that is failing, rather than everything? That would be better.
On a run, sometimes Toggle will put out a flag that doesn't work right. They don't have have to go pull out all the flags from that run, just the one that's not working.
<!--one failure, many successes-->
[[Kill switch]]
[[Failover]]
[[Back to O(o)ps|O(o)ps]]
[[Back to Adventure choices|Adventure choices]]##Rocket fuel
You're going to need some rocket fuel to get going. Have you loaded it carefully? You don't want the elements to cross over or mix too early.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/dietcoke_and_mentos.jpg" width=500>
[[Keep packing|Launch Time]]
##Spacelane flags
Spacelane flags or markers are like those old-fashioned railroad switches. Toggle plants the markers on moons, planets, and asteroids to help guide space traffic along the fastest or safest routes.
Once Toggle has planted the markers, they can be changed from back in the home office without anyone being close to them, but Toggle needs to put them in place.
Toggle's spacelane markers look like this:
<img src="https://civilianmilitaryintelligencegroup.com/wp-content/uploads/2013/09/heliograph1.jpg" width=500>
[[Keep packing|Launch Time]]
##Tunes
No road trip is complete without a playlist. Toggle likes these:
<iframe src="http://8tracks.com/mixes/8706314/player_v3_universal" width="300" height="250" style="border: 0px none;"></iframe>
<p class="_8t_embed_p" style="font-size: 11px; line-height: 12px;"><a href="http://8tracks.com/wiredferret/toggle-s-tunes?utm_medium=referral&utm_content=mix-page&utm_campaign=embed_button">Toggle's Tunes</a> from <a href="http://8tracks.com/wiredferret?utm_medium=referral&utm_content=mix-page&utm_campaign=embed_button">wiredferret</a> on <a href="http://8tracks.com?utm_medium=referral&utm_content=mix-page&utm_campaign=embed_button">8tracks Radio</a>.</p>
[[Keep packing|Launch Time]]
##Crew
Toggle frequently travels alone, but even then, they have their support crew back home.
<img src="http://i66.tinypic.com/fk48eb.png" width=500>
[[Keep packing|Launch Time]]
[[Swag]]##White-labeling
Sometimes a client wants your product to look like they've made it. They want their branding and vocabulary to show up so the users have a consistent experience.
We can use feature flags to switch from our branding to the customer's branding without having to have an entirely different branch that may get out of sync.
Toggle remembers a time they had to go replace a bunch of flags that were working, but had the wrong branding. They were pretty annoyed.
[[Custom documentation]]
[[A/B testing]]
[[Back to Adventure Choices|Adventure choices]]##Custom documentation
Some people want only the documentation that fits with their product. Some people want to read about everything that they could buy. With feature management, the features you deliver may be more than your application - documentation, training, [[tutorials|Tutorials]], even chatops. You choose!
Toggle pretty much only likes reading bookdiscs with happy endings, so they have the entertainment computer configured to hide all the scary and sad stories.
[[Disguises|White-labeling]]
[[A/B testing]]
[[Back to Adventure Choices|Adventure choices]]Let's talk about how a hypothetical spaceline company added feature management using flags.
Which do you think they chose to start with?
[[Terraforming|Retrofit]]
[[Unexplored planets|New feature]]
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190659-1-1.jpg" width=700>##Unexplored planets
It's a brand-new, unexplored section of the multiverse. Spacelanes, Inc, can do anything they want while they build their product as fast as possible. Which way did they go?
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190727.jpg" width="500">
[[Git and branches]]
[[Flags and mainline]]It would be great if this sector could start from scratch, but they already have a bunch of spacelanes in place, so they need to develop around them without inconveniencing traffic.
Engineering holds a meeting on Hoth, so that everyone is encouraged to work together on the problem. There are three main proposals. Which do you vote for?
[[Slow and steady]]
[[Only new features]]
[[Rip off the bandaid]]
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_190738.jpg" width=700>##Git and branches
Awesome! Spacelanes, Inc. is going to go with the safe and reliable method their engineers have used for years. They know it works, and this time will be no different.
[[Planet 1|Goes fine]]
[[Planet 2|Merge conflict]]
[[Planet 3|Git trauma therapist required]]The new CTO at Spacelanes, Inc. is committed to Continuous Deployment and Integration. They want to be able to deploy dozens of times a day and turn features on and off when they're ready.
Since this part of the galaxy is starting from scratch, they have decided to use mainline and flag development. Everyone is working in exactly the same code base and can see where everyone else is putting their spacelane plans in real time.
[[Planet Up|Deploy darkly]]
[[Planet Charmed|Feature failed fast]]
[[Planet Gluon|Slow your roll....out]]Congratulations!
You've successfully used branching development to create and release the routes for Spacelanes, Inc.
Ready for your next assignment?
[[Adventure choices]]
[[Case study]]Well, that's embarassing! While one of the engineers was building a spacelane, one of their co-workers built a spacelane right across it! Something is going to have to change or get reconciled, or the spaceships will run into each other.
But at least nothing's really lost, just...conflicted. I'm sure we can cherry-pick that.
<img src="https://wiredferret.github.io/Toggle/img/galaxy.jpg">
Try again?
[[Left planet|Goes fine]]
[[Right planet|Git trauma therapist required]]Technically, we call that a *splinch*. No one is quite sure how we will get the ships pried apart when they're smooshed together like that. It looks like we're going to have to back up a long ways, and several people are going to have to abandon their work. No data was lost, but it will take longer to fix it than it would to re-do it.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/img_0830.jpg" width=500">
Try again?
[[Top planet|Goes fine]]
[[Strange planet|Merge conflict]]Each team works on their spacelane plan in the same place. Since they're doing acceptance and integration tests automatically several times a day, they never go too far down a path that conflicts with another team.
<img src="https://wiredferret.github.io/Toggle/img/Toggle_launching.jpg" width=500>
After several weeks of work, a team finishes their sprint by sending Toggle or someone like them to test that the spacelane works, before they send everyone down it. Only Toggle's ship can see the markers - they're invisible to regular traffic. When the team is satisfied that the route is safe and stable, they turn on the markers so everyone can use the route.
Congratulations, team!
Ready for your next assignment?
[[Case study]]
[[Adventure choices]]Zaphod has been working on his new spacelane route since the morning float-up meeting. He thinks it will be pretty good, so he runs the test to confirm his plan.
Oops! He can see right away that it will conflict with the spacelane Leeloo is building in the same area. Zaphod changes the parameters of his lane so that they won't run into each other. Good thing he could see where she was planning to be!
Try again?
[[Planet Muon|Deploy darkly]]
[[Planet Eta Ceta|Slow your roll....out]]Telzey's route is looking great! There are no conflicts, it's passing all the tests, and Toggle says it's faster than the current route.
Telzey switches on her markers and the traffic *surges* through. It's wonderful...except it isn't. There isn't enough provisioning along this route for the amount of traffic trying to take it. Before the route can support this level of traffic, Spacelanes needs to build some more infrastructure.
To reduce the congestion, Telzey dials back the markers so that they only appear to every other ship. The route can handle half the traffic while Spacelanes gets the support systems in place for full traffic.
Try again?
[[Planet Erehwon|Feature failed fast]]
[[Planet Ruritania|Deploy darkly]]Everyone has a quota of spacelane markers that they are supposed to convert to the new remote-switchable style. It will take time, but if everyone plugs away at their own zone, it will all get done...eventually.
However, [[training is hard|Training is hard]]. It takes a long time to get people to take the conversion training, and once they do, they get distracted by current maintenance and don't end up doing as many conversions as anyone hoped. Still, it is forward progress.
[[Works great]]We're not going to try to refactor or retrofit any of the old spacelanes. Instead, we're just going to try this new switchable marker on all of the new spacelanes we build.
It's going to be a pain to have a split codebase, but it seems better than trying to do all the old work and the new work at the same time.
[[Training is hard]]
[[Works great]]New spaceliners can't use the old and new style markers at the same time. We're going to have to convert every single marker out there if we want to retain the new and incoming traffic.
This will be an all-hands-on-deck push, but when it's over, we'll be able to switch and control any spacelane from back in the office, and that will save a bunch of time and money. If only we can get through this next part.
[[Training is hard]]
[[Works great]]It's really hard to change the way you understand the universe. Teaching people to change the way they work requires everyone to make a conscious effort, and it means that people who used to be really fast at their job are a bit slower. But new things are always worth learning. In the end, the team can be proud of what they accomplished.
<!--toggle thumbs up>
[[Works great]]
Toggle loves everyone in this space cantina! Because of the new-style markers, they only have to mark a planet once, and then multiple routes can use it, instead of having to leave multiple almost-identical markers. The automated switching means that Toggle has less manual labor to do, and can spend more time on their mycology experiments.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/20171001_192030-4.jpg" width=800>Sometimes you want to see if users like A or B better. Which makes them happier? You can use feature management to split a test group or all of your customers, into groups that see different designs.
[[Design]]
[[Custom documentation]]
[[White-labeling]]
[[Back to Adventure Choices|Adventure choices]]##Single Sign-on
When Toggle signs into a spaceship, they expect the spaceship to remember their name and preferences. The same can be true for your users. Once we have the user's identifier, why not give them all the settings that they would prefer to use right away?
[[User colors]]
[[Accessibility]]
[[Back to User fun|User fun]]
[[Back to Adventure choices|Adventure choices]]##Swag
Just like Toggle, I have a team that makes navigating deployment and release much faster and safer. We provide feature flags as a service, and if you'd like to know more about that, you can visit:
''http://go.launchdarkly.com/ddphoenix''
They'll be happy to send you a free t-shirt and some stickers of Toggle.
<img src="http://www.heidiwaterhouse.com/wp-content/uploads/2017/10/LaunchDarklyBayBridge.jpeg" width=700>
[[Adventure choices]]
[[Case study]]
(css: "font-size: 50%;")[@wiredferret | DevOpsDays Phoenix | Heidi Waterhouse | LaunchDarkly]