Down the Rabbit Hole: How Adding One Change to an Inactive App Led to a Whole Lot of Refactoring
You take the blue pill, the story ends. You wake up in your bed and believe whatever you want to believe. You take the red pill, you stay in Wonderland, and I show you how deep the rabbit hole goes.
Journey Map!
:)
:(
time
Time for the tech talk.
AppD! Tell me more!

:)
:(
time
3 easy steps

:)
:(
time
Let me try this out with a node app

:)
:(
time
Hmm, this isn't 3 easy steps in node

:)
:(
time
Try this...
[sends link]

This has to work. Jermaine knows everything!

:)
:(
time

:)
:(
time


- Already have it working in an app
- Have a working hello-world app
- Not working with CUPS
:)
:(
time

Works on sample app (even with CUPS), but not my app!
:)
:(
time


:)
:(
time

Time to give up
:)
:(
time
Nope, you should go to prod to make sure it's not non-prod



:)
:(
time

Let's take a small detour

Meanwhile, these tech talk "experts" thought they could get things working in 2 days for their tech talk.
Do you remember their tech talk on AppD for nodejs?
:)
:(
time

OK, I'll go to prod...gosh darn it, now I need blue/green & multi-zone



:)
:(
time

3 passing (25s)
2 failing
1) Navbar works login redirects to setNewBaseURL after correct user provided:
Error: Waiting for element to be located By(css selector, *[id="urlSelect"])
Wait timed out after 10133ms
at node_modules/selenium-webdriver/lib/promise.js:2364:22
at ManagedPromise.invokeCallback_ (node_modules/selenium-webdriver/lib/promise.js:1379:14)
at TaskQueue.execute_ (node_modules/selenium-webdriver/lib/promise.js:2913:14)
at TaskQueue.executeNext_ (node_modules/selenium-webdriver/lib/promise.js:2896:21)
at node_modules/selenium-webdriver/lib/promise.js:2775:27
at node_modules/selenium-webdriver/lib/promise.js:639:7
From: Task: Waiting for element to be located By(css selector, *[id="urlSelect"])
at ControlFlow.wait (node_modules/selenium-webdriver/lib/promise.js:2352:17)
at Driver.wait (node_modules/selenium-webdriver/lib/webdriver.js:712:29)
at Context.<anonymous> (test-e2e/e2e.spec.js:94:16)
at node_modules/selenium-webdriver/testing/index.js:144:19
at new ManagedPromise (node_modules/selenium-webdriver/lib/promise.js:1082:7)
at controlFlowExecute (node_modules/selenium-webdriver/testing/index.js:129:14)
at TaskQueue.execute_ (node_modules/selenium-webdriver/lib/promise.js:2913:14)
at TaskQueue.executeNext_ (node_modules/selenium-webdriver/lib/promise.js:2896:21)
at node_modules/selenium-webdriver/lib/promise.js:2820:25
at node_modules/selenium-webdriver/lib/promise.js:639:7
From: Task: Navbar works login redirects to setNewBaseURL after correct user provided
at Context.ret (node_modules/selenium-webdriver/testing/index.js:128:10)
Protractor failed some tests on concourse...but not every time. Then started failing locally!
:)
:(
time

Bryan is in a bad place

:)
:(
time


:)
:(
time


Lessons Learned
- Phantomjs is awful
- Documentation isn't always right
- If you work on a framework/tool, make sure it's easy for developers to troubleshoot issues
- Do the right thing (even if it's painful)
- Don't give up

refactoring-rabbit-hole
By bryanrosenbaum
refactoring-rabbit-hole
Down the Rabbit Hole: How Adding One Change to an Inactive App Led to a Whole Lot of Refactoring
- 425