fun

Fixing a Bug

Fixing a Bug

I own a 1970 Volkswagen Beetle. Come on, wouldn’t you expect a software tester to drive a Bug? It’s been my daily driver for about four years now. To be honest, it’s given me more trouble than any software project I’ve ever had, but I still love to drive it.

There’s a lot I’ve learned from my journey with my Bug. I had to learn to drive stick. I blew up the engine not just once but twice. I’ve repaired, replaced, or renovated practically every part on this vehicle. The journey has been tough but rewarding. There are many lessons from software I applied to my repairs – and many lessons I learned from getting dirty fingernails that are just as applicable to software engineering.

Last year, I shared the story of my Bug at QA or the Highway in the closing keynote. Later, I recorded a video version of the talk for Abstracta’s Amplify event in Tulsa. I have finally now published it publicly to YouTube for everyone to enjoy.

I hope you love it:

Mercedes-Benz Sedan

Mercedes-Benz W203 Rear Subframe Rust

Do you own a Mercedes-Benz C-Class (W203) vehicle from the 2000s? If so, did your rear subframe rust from the inside out? If it did, then you’re not alone. Mine also rusted out – and almost killed me when it did. It’s unfortunately a very common problem with many Mercedes models over the past two decades. I’m writing this article to share my experiences and offer advice to anyone else who hits this problem.

What happened to my vehicle?

On May 23, 2025, I was driving my 2006 Mercedes-Benz C280 4MATIC from Maryland to North Carolina. At about 10pm, I was driving past Alberta, VA on I-85 South at about 70 mph. I was alert. The road was clear. Then suddenly, I heard and felt a loud “boom,” as if I hit a massive pothole. Immediately, the vehicle started fishtailing violently. Thinking that I must have hit something that I just didn’t see, I slowed down and attempted to regain control of the vehicle with careful steering. I had this happen other times before. However, this time, after a few seconds, the fishtailing became worse.

Thankfully, I was near an exit with a well-lit gas station. Praise God! (Bear in mind, on this stretch of I-85, exits can be several miles apart.) I slowed down sharply and pulled off the highway. As I drove into the gas station, I noticed that I had to hold the steering wheel at 90º to the left to keep the car straight. The dashboard also said that ESP (Electronic Stability Program) was no longer working.

Once parked, I discovered that the rear driver-side wheel was completely out of alignment. It was severely toe-out with negative camber. There was no way I could safely drive it home. I suspected the axle had broken, but I could not determine the true root cause in the dark. I called AAA for roadside assistance. They sent a tow truck that didn’t show up until about 2:15am – over 4 hours later.

Diagnosing the root cause

The tow truck arrived at the auto shop where my uncle worked at about 4am. We immediately put it on a lift and discovered the root cause: the rear subframe had rusted to the point of breaking. There were perforation holes the size of quarters in the subframe. We could poke through the rusted metal with our bare hands. It was crumbling into a myriad of rusty flakes. One of the suspension control arm mounts had completely separated from the frame, which explained the wheel misalignment.

It was then that I realized: I could have died. If I had lost control, the vehicle could have spun out at 70 mph and perhaps even flipped. I shudder to think if cars behind me could have hit me, too.

Discovering the product defect

After a little online sleuthing, I discovered that rear subframe rust was a common problem on several Mercedes-Benz models, particularly the W203 and W204 platforms. In fact, Mercedes-Benz USA extended the warranty on the rear subframe from 4 years / 50K miles to 20 years / unlimited miles for several models, but the C-Class was covered only for years 2008-2015. Unfortunately, my vehicle was not covered because it was a 2006, even though it was the exact same issue.

Furthermore, I discovered that there was a class-action lawsuit against Mercedes-Benz USA for this rear subframe rust issue. The lawsuit claims that the rear subframe rust is a product defect that poses a serious safety threat and that Mercedes-Benz’s extended warranty did not do enough to rectify the issue. The lawsuit covered various models from 2010-2022, which again did not cover my vehicle. At the time of writing this article, the lawsuit is still active as Case § 1:23-cv-00636 in the state of Georgia.

Requesting a goodwill repair

The repair estimates to fix the subframe were quite expensive. My uncle’s shop quoted over $3000. My local Mercedes-Benz dealership quoted close to $6000. I wasn’t going to pay that much to fix a 20-year-old car.

Since this was clearly a known product defect, I asked Mercedes-Benz USA for a goodwill repair. I called the MBUSA customer service line, and they told me to take it to the dealership for an inspection. Then, I asked the service advisor at the dealership to file a goodwill repair request on my behalf. After waiting about a week and calling the customer service line back, a case manager finally contacted me to tell me that MBUSA had rejected my goodwill repair request. I was on my own to fix the problem.

Fixing the problem myself

I chose to replace the rear subframe myself. I bought an after-market subframe as well as new suspension control arms, new spring mounts, a new sway bar, and new bolts, since all those parts also rusted. I spent about $1100 total in parts. The job was a LOT of work, and I would not recommend it for anyone not experienced with car repairs. Nevertheless, I was able to do it all in my home garage with standard tools.

Here were the steps:

  1. Jack up the car and remove the rear wheels.
  2. Remove the exhaust system. (I had to cut rusted bolts.)
  3. Disconnect the rear differential from the drive shaft.
  4. Disconnect ABS and brake pad sensor wires from the wheels and the body.
  5. Disconnect the parking brake lines at the junction box under the rear seat.
  6. Disconnect the rear shocks.
  7. Loosen the four subframe mounting bolts, and lower the whole rear wheel assembly carefully.
  8. Disconnect the suspension control arms and sway bar.
  9. Disconnect and remove the subframe from the differential.
  10. Paint the differential, axles, and other appropriate parts with rust encapsulator.
  11. Reverse the steps to rebuild the rear assembly.
    • Don’t tighten the bushings while removed or in the air. Tighten them at ride height.
  12. Take the car to a shop to do a 4 wheel alignment.

Below is a comparison of the old assembly to the new subframe. I shared additional pictures in an Instagram post.

The following YouTube video helped me greatly:

Pursuing other avenues

I filed a safety complaint with the National Highway Traffic Safety Administration (NHTSA) regarding the rear subframe rust. It is complaint #11669316.

I also contacted the attorneys representing the plaintiffs in the class-action lawsuit against Mercedes-Benz USA. One of them actually called me to discuss the case. He told me that he knew of many instances similar to mine. Unfortunately, my vehicle could not be included in the case because it was outside the model year range. He also told me that it would be difficult (but not impossible) to win a case against Mercedes-Benz USA due to the age of my vehicle, despite an impeccable service record and the fact that the car was garage-kept for the majority of its life.

I considered filing a complaint with the Better Business Bureau, but I have not yet done so, and I’m doubtful if I will.

My reasons for sharing

I wrote this article to help others who, like me, discover that the rear subframe in their Mercedes has rusted to the point of failure. I hope it can clarify that this is a common issue and offer advice for what to do about it. I’m not angry about the situation, but I am disappointed in Mercedes-Benz for not covering the W203 models in its extended warranty or as a goodwill repair. In the end, I’m just glad to have my C280 back on the road.

1974 VW Karmann Ghia Convertible For Sale

THIS CAR HAS BEEN SOLD!

Year, Make, & Model1974 VW Karmann Ghia Convertible
PriceAsking $7474 but make me an offer SOLD!
LocationCary, NC
Runs & DrivesYes
MileageAt least 62K (odometer was broken)
TitleYes (good NC title in hand)
ContactPlease use the Contact form or call/text the phone number at the bottom of this page

Pictures

  • Karmann Ghia with Bra

What’s Good

This car is great:

  1. It runs and drives!
  2. The convertible top works and has the rear glass windshield.
  3. The car has its spare tire.
  4. The car has its emblems.
  5. It comes with a car cover.

Karmann Ghia convertibles are rare. Only 18% of all Karmann Ghias ever produced were convertibles. VW produced only 1558 Karmann Ghia convertibles for the 1974 model year – lower than all model years except 1955-57. Although it may look rough, this car is a survivor.

What’s New

I put a lot of work into restoring this car. Mechanically, the car is sound.

  • Interior:
    • New interior carpet with padding
    • New back bench (in lieu of the backseat that VW removed for the 1974 model)
    • New seatbelts
    • New rear side panels
    • New EMPI trigger-style shifter
    • Refurbished steering wheel with new leather grip
  • Exterior:
    • New tires
    • New side mirrors
    • New rear emblems (“Volkswagen”, “Karmann Ghia” script)
    • Refurbished hubcaps
    • Refurbished rear bumper (original)
    • New tail light mounts and rubber
  • Engine:
    • Volkzbitz-restored 34 PICT-3 carburetor
    • New timing belt
    • New battery
    • Oil changes and valve adjustments
  • All new brake system:
    • New master cylinder
    • All new brake lines (hard and soft)
    • New front discs and calipers
    • Rebuilt rear drum brakes
    • Fresh brake fluid with cleaned reservoir
    • Refurbished parking brake with new boot and levers
  • Clutch system:
    • New clutch plate
    • New throw-out bearing
    • New shaft and arm
    • New Bowden tube and cable
  • Front-end:
    • New tie rods
    • New steering knuckles
    • New steering shaft
    • Adjusted steering box
    • De-rusted and refurbished gas tank with a new sending unit
    • Cleaned and painted the trunk
    • New trunk carpet
    • New speedometer cable (which fixed the speedometer and odometer)
    • New horns

What Needs Work

The biggest need is body work. This car is a survivor. On the front-end, the nose has been smashed more than once, and the passenger-side fender is dented. The whole front-end is caked in body filler up to 1/4″ thick. The driver-side door post has rusted and weakened to the point where the door falls about an inch when it opens. The rear driver-side bumper mount has rusted off. I de-rusted and paint-sealed vulnerable spots while uncovering them during my restoration work.

For a full restoration:

  • The convertible top should be restored.
  • The door panels should be replaced.
  • The dashboard should be refreshed.
  • The sound system is not connected.
  • The fuel gauge sending unit needs to be calibrated.
  • The front bumper is missing. (The original rear bumper is restored.)
  • The heating system is not connected. (But, c’mon, it’s a convertible!)

What’s Odd

The floor pans are not stock. A previous owner welded them in. Thankfully, they are very sturdy. The seats and their tracks are also not stock.

The speedometer cable was broken when I bought the vehicle. The speedometer did not show velocity, and the odometer was frozen at 62202. When I replaced the cable, the speedometer and odometer started working again. I do not know the true mileage of the car, but all the mileage after 62202 is what I have driven.

The Backstory

The earliest I can trace its story is back to a title in Virginia in the 1990s. Somehow, it ended up in the hands of a VW enthusiast in Tennessee who purportedly planned to chop its top and part out the rest. It was saved in early 2022 by a lady named Ms. Anna. She was friends with the VW enthusiast, and she wanted to buy an old VW Beetle from him as her dream car. When she saw this Karmann Ghia, she changed her mind on the spot and bought it instead. Ms. Anna drove it through the backwoods for a few months as her “fun car” until she decided to sell it due to a change in life circumstances. She did not make any significant changes to the vehicle.

I purchased the Karmann Ghia from Ms. Anna in June 2022. The car was in rougher shape than I expected, but it was still a good car. On my first test drive, the transmission shifted as smoothly as butter. The speedometer was broken at the time, but I could shift by listening to the revs of the engine. I drove it through the mountains of Tennessee from Dunlap down to Chattanooga and then hauled it home to North Carolina from there.

Why I’m Selling

I love the Karmann Ghia, but I’ve decided to sell this one for one main reason: I want an earlier year model. I like the earlier design elements. My grandfather drove a ’67 convertible, and I also own a ’70 Beetle. I’d like to sell my current Karmann Ghia convertible to buy another one within that year range.

I’m ready to sell this car immediately. I don’t have anything to hide. If you’re interested, please message me through the Contact form.

Chattanooga Choo Choo

I Want To Be An Engineer When I Grow Up!

When I was a little boy, I wanted to be an engineer when I grew up.

That’s right, I wanted to be a locomotive engineer! Like all little boys, I absolutely loved trains. I watched all the episodes of Thomas the Tank Engine. I wore a striped blue-and-white railroad cap everywhere. And I wanted to grow up to be the guy in charge of the trains.

More than once, my parents took me to see the Chattanooga Choo Choo in Chattanooga, Tennessee. To me, the vibrantly-painted steam engine was just the coolest thing ever. I’d climb into the engine bay (which was allowed) and imagine how much fun it would be to drive it. I don’t remember much of anything from that young age, but I vividly remember pictures in my mind of the Choo Choo.

I actually did grow up to become an “engineer” – just not the kind of engineer my four-year-old self would have expected. This week, my software engineering journey brought me back to Chattanooga on a customer visit. My hotel was located right next to the old train station housing the famous Choo Choo, so, of course, I paid it a visit. It was just as I had remembered it: charming, nostalgic, and iconic. Oh, how I yearn to build things that become as cherished and enduring as the Chattanooga Choo Choo.

Our dreams may not always manifest as we expect, but I am grateful for all the opportunities I have been given and for all the incredible experiences they have brought. Even though my current job title is “Product Management,” I still identify as an engineer at heart: building solutions to tough problems. Never let go of the things that inspire you.

Boba Fest 2023

The 12 Best Bubble Tea Shops in Seattle

It’s no secret that 🐼❤️🧋! Seattle has several excellent tea establishments, and each one is special. In this post, I list my top twelve favorite bubble tea shops that I enjoy whenever I visit. This is my personal list of favorites in no particular order – it’s not a comprehensive ranking because, quite frankly, there are so many tea shops I haven’t yet tried!

#1. Xing Fu Tang

Xing Fu Tang is one of the best boba brands to come out of Taiwan. They pride themselves on their handmade brown sugar boba. At their locations in Taiwan, you can actually see them knead the tapioca dough and feed it through the machine to separate it into the pearl! At their Westlake Center location on 4th and Steward, they don’t have that machine on display, but you can see them cook all the boba in a big copper wok.

Pandy’s recommendation: Get the classic brown sugar boba with milk or milk tea – it’s the drink that made them famous!

#2. Rabbit Rabbit Tea Seattle

Rabbit Rabbit Tea Seattle is another bubble tea brand from Taiwan. They set themselves apart with their selection of premium teas: two black (Assam and Earl Grey), two green (Jade Green and Mountain), two oolong (Golden Jinxuan and Iron Buddha, and two kinds of Japanese buckwheat tea. They also give you little rabbit face wrappers for your straws!

Pandy’s recommendation: Get the Japanese buckwheat tea with less sugar and honey boba. I’ve never seen another boba shop sell buckwheat tea, and it’s so good!

#3. Tiger Sugar

Tiger Sugar is another famous bubble tea chain with many locations throughout the United States. Their Seattle location is at 2nd and Pike, a stone’s throw from Pike Place Market. Although this spot is little more than a pickup counter, its location makes it a convenient stop when passing through downtown. Tiger Sugar is known for bold flavors, both in sweetness and in the tea.

Pandy’s recommendation: If you want something sweet, order a drink from the Black Sugar Milk series. If you want something refreshing, order any of the teas with the mousse on top. As always, add boba!

#4. Tea King

Tea King is low-key one of my favorite boba shops ever. While well-known tea franchises are great, there’s something special about independent tea shops making their own drinks their own way. Tea King nails it. Their drinks are consistently the most excellent bubble teas I’ve tasted anywhere. Their teas are premium. Their selection is wide: milk, fruit, slush, and dessert. Their branding is on point – I put their sticker on my laptop! Their location is squeezed between Queen Anne and and Lake Union, but the trek is worth it.

Pandy’s recommendation: The TK Milk Tea with boba is an excellent rendition of the classic bubble tea. The Hojicha Latte and the Taro Coco Sago are delightful specialties you won’t readily find elsewhere.

#5. Yifang Taiwan Fruit Tea

Yifang Taiwan Fruit Tea is probably my favorite bubble tea brand. I first discovered them in San Francisco, and every time I go to a city that has a location, I try to stop by. As the name suggests, Yifang is known for their fruit teas. In fact, I didn’t really care much for fruit teas until I tried Yifang’s pineapple green tea! They also make delicious little bubble tea shaped pancakes with boba inside. Try to visit the locations in the University District or in Bellevue.

Pandy’s recommendation: Try the pineapple fruit tea with half (or less) sugar and sago. Bonus points for the Yakult version.

#6. TP Tea

TP Tea is my favorite tea shop in the International District. As yet another Taiwanese brand, they focus on classic milk teas with high-quality ingredients. Their location in the ID is always popular, and I dig the interior design. I’ve never been disappointed by their drinks, either. Look for the drinks with multiple toppings, like boba plus QQ noodles.

Pandy’s recommendation: Get the Taiwan Classic Milk Tea or the 3Q TP Milk Tea – they have multiple toppings with a variety of textures.

#7. OH! Bear Cafe & TeaHouse

OH! Bear Cafe & TeaHouse is a cute little dessert cafe in the University District. It’s an excellent place to come for a date with your significant other – and to get diabetes from all the sugar! They have pastries, ice cream, taiyaki, coffee, and bubble tea. Their most notable drink is their White Rabbit Milk Tea, which uses flavoring from China’s famous White Rabbit candy.

Pandy’s recommendation: Try the White Rabbit Milk Tea along with any of their desserts.

#8. Mochinut

Mochinut is located in South Lake Union amongst all the Google and Amazon buildings. While Mochinut is known primarily for their mochi donuts, they also serve bubble tea in distinctive clear plastic cans. All their drinks are very sweet, so be prepared. You can also order Korean-style corndogs!

Pandy’s recommendation: Come here for the mochi donuts and get a drink to pair.

#9. Happy Lemon

Happy Lemon is another well-known brand with a location in South Lake Union. Their drinks have striking presentation, and most of them are very sweet. Happy Lemon also sells bubble waffles at this location. It’s a nice stop if you’re in the neighborhood and want a sweet treat.

Pandy’s recommendation: Come here if you want something sweet.

#10. ChiCha San Chen

ChiCha San Chen is one of the most excellent tea establishments I’ve ever visited. Although their location is in Bellevue, it is so highly regarded that folks from all over the Seattle greater area go to visit. Although ChiCha San Chen did not earn any Michelin stars as widely rumored, they did earn the highest award from ITQI in 2017, which is just as good. When you walk into their shop, you smell the tea, not the sugar. They use a special “teapresso” machine named LION for brewing their tea. They offer free samples. When they serve the drinks, they put them in carriers with twine handles. My wife and I have visited only once, but we are looking forward to going back!

Pandy’s recommendation: Get anything with the green tea. I also want to try the Ding Dong Oolong Tea because I heard that it is very good.

#11. Milkvue + DIY Tea Lab

Milkvue + DIY Tea Lab is a new place that just opened next to the Space Needle. They serve coffee, boba, mochi donuts, and ice cream. The owners are super friendly, too. The bubble tea is a collab with DIY Tea Lab, which also has locations in Fremont and Ballard. Their drink sizes are all large and visually appealing. You can also order boba here before lunchtime! Don’t sleep on their ice cream, either – they have flavors like Ube + Oreo and White Rabbit!

Pandy’s recommendation: My wife and I enjoyed the Sea Salt Ube Milk Tea with a matcha mochinut. We also took a pint of the White Rabbit ice cream home!

#12. Nana’s Green Tea

Nana’s Green Tea is essentially a matcha cafe. They serve standard Japanese lunch fair like curry plates, rice bowls, and tonkatsu, but the star of the menu is the matcha. You can order matcha in pretty much any form you can imagine: lattes, frappes, ice cream, parfaits, floats, sodas, pastries, and just straight tea. They also have lattes for hojicha and red bean. It’s awesome. It’s decadent. And even though they don’t serve boba, the little mochi toppings are close enough, right?

Pandy’s recommendation: Come here for the matcha. I like the lattes and the frappes with mochi on top.

Bonus: Miro Tea

Miro Tea is the ultimate tea house. This is not a place for boba but rather for high-quality loose leaf teas from around the world. It’s like a high-end coffee shop with expert baristas, but for tea instead of coffee. You can order tea by the pot and even as a Gongfu tea ceremony. They have plenty of seating for you to work, read, or simply space out while enjoying your tea. I enjoy hopping over to Ballard just to enjoy their fine selection.

Pandy’s recommendation: Try the samples they have to decide what kind of tea you want. Plan to spend at least an hour there instead of taking your tea away in a cup.

PyOhio 2019 Reflections

PyOhio 2019 was one of my favorite conferences, ever. It was my ninth Python conference and my second PyOhio conference. There were so many good things that happened in such short time that, even three weeks later, I’m still processing everything. Here are my reflections on this outstanding conference.

Roadtrip

PyOhio 2019 was held in Columbus, Ohio at the Ohio State Union. I really wanted to go because PyOhio 2018 was such a good time, and I started asking my friends in North Carolina if anyone wanted to join me. My friends Rick and Justin all emphatically replied YES! To make traveling more fun, we decided to turn it into a road trip! We dubbed ourselves the “PyCarolinas delegation”, piled into my Chrysler 300, and made the 8-hour drive in good time. Our friend Greg also joined us at PyOhio, though he traveled separately with his wife.

This was the first time I ever did a road trip to a conference. I’m so glad we did it. I felt like I got to spend great quality time with my friends. Many parts of the drive were quite scenic. We also discovered a Beef Jerky Outlet!

My Talks

At PyOhio 2019, I delivered the holy trifecta of speaking opportunities: a talk, a tutorial, and a lightning talk. I felt both honored and humbled to be chosen for all three.

My talk was entitled Surviving Without Python. I talked about how we can use Python’s principles, projects, and people to inspire us even when we don’t use Python to solve our problems:

My tutorial was entitled Hands-On Web UI Testing. Python’s popularity continues to rise, and many people use it for testing. In my tutorial, I showed how you can develop a simple yet powerful solution with Python, pytest, and Selenium WebDriver to automate Web UI tests. The tutorial project in GitHub contains the code, instructions, and slides.

My lightning talk was announcing PyCarolinas 2020. My friend Calvin and I are teaming up to bring PyCarolinas back! We are targeting June 2020 in Raleigh, NC. Please help us make it happen!

Other Talks

There were so many great talks at PyOhio. Here were a few highlights.

This was my favorite talk of the conference. Although a history lesson may seem out of place at a Python conference, Jon used it as a convicting call to action. Be sure to watch it to the end!
Dane showed how easy it is to use pytest. You don’t need to be an expert tester to write good tests!
Travis blew my mind with some of Python’s latest features. This talk was a great way to catch up on new things!
Dustin explained why it’s important to keep alive the passion we have for computing. I also loved the TI-83 Plus reference – that was in my talk, too!
Controversial? Yes. True? Yes. Aly? Preach!
Docs are vital for understanding code and features. Mason shows how to make docs just a regular part of the development process.

Sprints

Sprints are a Python conference event in which people work together on open-source projects. Conferences are the perfect time to have sprints because people are both co-located and excited. PyOhio 2019 was actually the first time I attended sprints. There were sprints on both Friday and Saturday nights. Accenture graciously hosted both sprints in their swanky office and provided refreshments.

I went to the sprints both nights with the honest intention to work on stuff. However, I spent the whole time socializing with friends. It was nevertheless time well spent! Many of us went to Jeni’s Splendid Ice Creams after the final sprint, too.

Swag

The PyOhio 2019 logo was lit! I joked that I was going to the conference just to get that logo sticker and t-shirt. Some other cool takeaways were the Numerator puzzles and the JP Morgan Chase puzzle blocks.

My sticker game is strong:

My backpack was also a hit!

Food and Drink

I had some good eats while in Columbus. My friend Mason recommended Raising Cane’s, which turned out to be awesome! So many people followed us there, too.

I also hopped an electric scooter to get bubble tea. Those scooters are so much fun. I hadn’t ridden one since PyTexas 2019! (Or maybe PyCon 2019; I don’t remember precisely.)

To relive PyOhio 2018 memories, I went to Eden Burger for a Vegan brunch on Sunday morning with friends! It was delicious and nutritious.

Our friend Greg recommended we visit Brewdog, a renowned Scottish craft brewery with a huge site on the outskirts of Columbus. We took the tour with the “beer school” course, and we stayed for a delicious dinner afterwards. So good, so very good. It was the best way to end the conference!

Friends

The best part about PyOhio 2019 was the time I spent with all my friends. I wish I could name everyone here, but there are just too many names. The Python community is the best. Conference friends are real friends. Also, for what it’s worth, they’ve given me the nickname “Pandy.”

Hope

My PyOhio 2019 experience can be summarized in one line:

Truth – I went all-in from leaving my house on Friday morning until returning Monday evening. The conference high is very real. My hope is that I’ll get to attend more great conferences like this, and also that I’ll be able to help make PyCarolinas as good as PyOhio!

Surviving Without Python


Python is such a popular language for good reason: Its principles are strong. However, if Python is “the second-best language for everything”… that means the first-best is often chosen instead. Oh no! How can Pythonistas survive a project or workplace without our favorite language?

Personally, even though I love Python, I don’t use it daily at my full time job. Nevertheless, Pythonic thinking guides my whole approach to software. I will talk about how the things that make Python great can be applied to non-Python places in three primary ways:

  1. Principles from the Zen of Python
  2. Projects that partially use Python
  3. People who build strong, healthy community

Check out my talk, Surviving Without Python, from PyOhio 2019! It was one of the most meaningful talks I’ve ever given.

How To Be A Great Airbnb Guest In 12 Steps

My wife and I have been proud Airbnb hosts since 2018. We currently host three guest suites between two properties in North Carolina, and we love doing it. Airbnb enables us to take care of my wife’s mom and afford critical house renovations. Overall, hosting has been a worthwhile, albeit sometimes tiring, experience.

Between our three listings, we see many guests. We try to be “super” hosts to every guest who stays with us, and most of our guests likewise try to be super guests. However, nobody is perfect. While we believe that the vast majority of Airbnb users want to be good, not everyone may be cognizant of irksome or even damaging missteps. From our perspective as hosts, we’d like to share 12 ways for good guests to be truly great guests.

#1. Share information about yourself and your travel plans.

As hosts, we don’t know who you are. You are strangers who we meet online, and you want to stay at our house. We want to trust you, but help us! Don’t be shy. Update your Airbnb profile with your email, phone number, and information about yourself. Share your actual profile picture – not a picture of your kids or some dumb cartoon sketch. Upload a copy of your government ID. When you request to stay at our place, share why you are traveling. Tell us when you plan to arrive and leave, and tell us exactly who all the guests will be. Ask us for local recommendations.

The more you share about yourselves, the more likely we will be as hosts to accept your request to stay. Conversely, we have also rejected requests when guests don’t upload their IDs or when they aren’t forthright with information.

#2. Read (and follow) all house rules and guides.

When guests request to stay at a listing, they must agree to follow all house rules (in addition to Airbnb’s policies). House rules are attached to the listing and accessible before booking. Our house rules are pretty basic, but we frequently see the following violated:

  • No shoes inside.
  • Park on the street, not in the driveway.
  • Quiet hours after 10pm.

Breaking these rules is not a huge problem but unfortunately reveals guests to be careless and disrespectful. Read the rules before you book.

Similarly, read the guides before you check in. We provide a full step-by-step guide with pictures for each listing, including the entry codes. We also provide WiFi and Netflix information. Asking us for the combo code or trying to enter the wrong door reveals that guests did not prepare.

#3. No means no.

Hosts set rules for reasons. Guests should not expect exceptions. For example, we do not allow children under age 12 in any of our listings because they are not baby-proof or child-proof. We have fragile decorations, furniture with sharp edges, and outlets without safety covers. We also do not allow pets because I am allergic to animal dander. These rules are published clearly on our listings. Please do not request to stay with us if you intend to bring a child or a dog. Please do not ask for an exception because “he’s a good boy.” Or worse, don’t show up with a rule violation and put your host in an awkward situation. It’s okay to ask for things that are unclear or unspecified, but please be reasonable with requests, and do not be offended if the host says no.

#4. Include all guests in the booking.

Each listing has a maximum number of allowed guests. When guests book a listing, they must include how many people will come. Guests should list all people, but unfortunately that doesn’t always happen. It’s common for a guest to book for one person and then have more show up. This may or may not be a serious problem. For example, one of our suites can accommodate 3 people, but we charge extra per night because we need to turn a futon into a bed. We’ve had guests book it for one person and then have three show up – creating an awkward situation. We also had one problematic guest invite five or six others over without even asking. As a guest, just make sure to include all members of your party in the booking, and ask for permission before bringing over someone not in the booking.

#5. Cancel early (when necessary).

Cancellations are always disappointing for hosts, but we understand that plans change. If you as a guest need to cancel your reservation, then please cancel as soon as possible. Every day you hold a reservation is an opportunity cost for someone else to book. When a guest cancels late, the host loses the income and has little chance to find a replacement.

Furthermore, respect the host’s cancellation policy. Hosts choose one of Airbnb’s standard policies, so make sure to check the listing when you book. If you cancel too late and don’t get a full refund from Airbnb, then please don’t feel entitled to get a full refund directly from the host.

#6. Treat the space well.

As hosts, we put a lot of work into making our guest suites nice. We carefully choose the furniture and decor. We clean the suites thoroughly between stays and inspect them for any problems. And we tend to cycle through many guests in short time. Our guest suites need to “survive” day to day.

As guests, please take care of the spaces you rent. Be careful not to cause any damages. Clean up your messes. Wash your dishes. Hang up your towels. Don’t leave food out for bugs. Overall, just think about how you’d want a guest to treat your home.

#7. When in doubt, ask for permission.

Grace Hopper once said, “It is easier to ask forgiveness than it is to get permission.” However, this is terrible advice for Airbnb rentals! Guests should always ask their hosts whenever the rules or guides are unclear. My wife and I are fairly accommodating with most requests, such as late checkin or storing food in our fridge. We just don’t like surprises – like someone unexpectedly cooking during our family mealtimes.

#8. Don’t do sketchy things.

Airbnb stays are meant to be a fun, safe experience for both guests and hosts. There should be an implicit sense of trust between guest and host. Neither party should participate in illegal or discomforting activities. Drugs, sex work, and pornography are unwelcome – and not to mention a violation of Airbnb’s policies. If you are a guest, don’t do these things. My wife and I have kicked out guests for doing sketchy things.

Also, be clear and open about your intentions, especially if they are atypical. If you need to stay up late to work on a project, let your host know so they don’t wonder why your lights are on all night. If you need to bring large medical hardware, let your host know so they don’t think you’re “Breaking Bad.” If you want to use the listing for a family photo shoot, let your host know so they don’t suspect you of filming porn. Remember, you are staying in another person’s space. Please don’t make them worry.

#9. Be patient when problems happen.

Problems happen. Even though hosts work really hard to make things perfect, sometimes they overlook details, and other times things are out of their control. Our guest suites have had problems with temperature, hot water, burned-out light bulbs, and even bugs.

As guests, please be gracious with problems. Tell your host right away. Good hosts will want to fix the problems ASAP. Share pictures so your host can see exactly what is wrong. Be polite, not belligerent or whiny. Please be patient while the host works to fix the problems. And don’t wait until the final review to share a problem. By then, it’s too late. Guest shouldn’t suffer and hosts shouldn’t get bad reviews when problems can be fixed.

#10. Be honest when you cause problems.

Again, problems happen. Here’s a few we’ve seen:

  • Guests parked in the driveway and blocked our cars.
  • Guests tracked mud into the house.
  • Guests spilled coffee on the bedroom carpet.

Good hosts will focus on solutions rather than blame. As guests, please take responsibility for any problems you cause and help work toward solutions. Be quick to respond to your host, and be willing to pay the host for any damages. For example, the guest who spilled the coffee reimbursed us about $10 for carpet cleaner.

#11. Check out on time.

Good listings have high occupancy rates. All three of our suites are typically 75-100% occupied every month. Whenever a guest checks out, a new guest will probably check in later that same day. As hosts, we need to flip the space in that short window between checkout and checkin. That includes inspecting, vacuuming, cleaning, laundry, remaking the bed, and handling any surprises.

Please make sure to check out punctually. Tell your host ahead of time when you plan to check out, and send the host a message to let them know when you leave.

On a related note: the most common request from our guests is for an early checkin time. We try to accommodate early checkin for guests who ask, but we cannot make guarantees. An early checkin time depends directly upon the previous guests’ checkout time.

#12. Don’t leave poor reviews for poor reasons.

At the end of a stay, the host and the guest review each other. Reviews are kept private until either both parties submit them or 14 days pass. The bidirectional nature of reviews holds guests and hosts equally accountable to each other, which encourages better behavior from both sides.

I encourage everyone – guests and hosts alike – to give truthful, transparent reviews. A robust review system keeps the Airbnb platform trustworthy. At the same time, be mindful about what you write in your reviews. Hosts rely upon good reviews for income, and bad reviews – even 4 stars instead of 5 – can be especially damaging. If you leave a bad review, make sure it is for a good reason. Nothing is more frustrating than to see reviews like these:

  • A guest said everything during their weekend stay was absolutely perfect. They adored the location, the decor, and the coffee machine. They said they’d definitely come back. No negative comments. 4 stars instead of 5.
  • A guest gave 3 stars for accuracy because the guest suite didn’t have a private entry, even though the listing explicitly stated that there was no private entry.
  • A guest complained that one of the bedsheets was upside down and not tucked in perfectly.

Thankfully, off-the-mark reviews like these happen rarely. I’m sure some hosts are guilty as well. Please don’t give poor reviews for poor reasons.

Final advice

There are many more things we could share, but the “golden rule” comes down to this: Be a good guest to every host, just as much as you want your host to be good to every guest. Even if your host is lousy, still strive to be a good guest for your integrity and the integrity of other Airbnb users.

PyOhio 2018 Reflections

PyOhio 2018 was a free Python conference hosted at Ohio State University in Columbus, OH from July 28-29. I had the pleasure of not only attending but also speaking at PyOhio, and my company, PrecisionLender, graciously covered my travel expenses. I had a great time. Here’s my retrospective on the conference.

My Talk

The main reason I went to PyOhio was because I was honored to be a speaker. When I was at an Instagram dinner at PyCon 2018, I met a few conference organizers who encouraged me to propose talks at other Python conferences. On a whim the next morning, I spitballed an idea for a talk about building a test automation solution from the ground up in Python. After talking with a number of people, I realized how test automation is such a struggle everywhere. I took inspiration from Ying Li’s keynote and crafted a story about how Amanda the Panda, a Bamboozle employee, becomes a test automation champion. And, BOOM! My talk proposal was accepted for PyOhio and PyGotham! The video recording for my talk, “Egad! How Do We Start Writing (Better) Tests?”, is below:

Arrival

Good news: Raleigh and Columbus have direct flights. Bad news: they are either early-morning or late-night direct flights. So, I left Raleigh on Friday morning before the conference and spent the day in Columbus. Surprisingly, the security line at RDU wrapped around 2/3 of the Terminal 2 perimeter, but I still boarded the flight on time. Once I landed in Columbus, I took the COTA AirConnect bus downtown for the low price of $2.75.

My goal for Friday was personal development. I rarely get a chance to escape the rigors of everyday life to focus on myself. Personal retreats let me clear my mind, dream big, and begin taking action. And on this day, I started writing my first test automation book – a dream I’ve held for over a year now. I spent a few hours at Wolf’s Ridge Brewery, sampling beers with lunch as I developed a rough outline for my project.

My evening was low-key. I took a nap at my hotel, the Blackwell Inn and Pfahl Conference Center. For dinner, I ate at White Castle for the first time – and it was pretty darn good. After practicing my talk, I got a tiramisu bubble tea from Vivi as a night cap.

The Conference

PyOhio was a much smaller conference than PyCon. There were fewer vendor tables but nevertheless a wide selection of stellar talks. As a result, the conference felt more intimate and more focused. Perhaps that feeling was due also to the venue: the third floor of the Ohio Union had full rooms with “cozy” hallways. Hats off to the organizers, too – everything ran smoothly and professionally.

As soon as I arrived, I scored my name badge, my swag bag, and my official PyOhio 2018 t-shirt. The opening keynote from Adrienne Lowe, “From Support to Engineering and Beyond: What to Take with You, and What to Leave Behind,” about the highs and lows of trying to make it as a developer was exceptionally inspiring. Engineers often don’t talk about how hard the job is, especially for newcomers to the industry. Everybody suffers from imposter syndrome. Everybody feels inadequate. Everybody is tempted to quit, even to the point of tears. The vulnerability in hearing others say, “Me, too,” is so relatable and so relieving.

The first talk-talk I attended was Trey Hunner’s “Easier Classes: Python Classes Without All the Cruft.” Trey gave an excellent overview of writing more sophisticated Python classes. TL;DR: upgrade to 3.7 and use dataclasses.

The next talk I attended was Leo Guinan’s “Go with the Flow: Automating Your Workflows with Airflow.” Apache Airflow is a platform for automating workflows. As an automationeer, it struck me as being like a continuous integration system generalized for non-build purposes. The Q&A portion of the talk was lit.

After finding an authentic Chinese restaurant for lunch, my friend Matt arrived! I worked with Matt in the testing space at LexisNexis. He drove all the way from Dayton to see my talk and hang out. We spent the early afternoon catching up, and we went to Hook Hearted Brewing for dinner after the conference because we’re beer buddies. I was so thankful he came to support me – it meant a lot!

My talk was at 3:45pm. Other than discovering my Thunderbolt-to-HDMI adapter was a dud, the talk went very well. I decided to stick to a script for this talk because most of it followed a story, and I’m glad I did. (For my PyCon talk, I chose instead to speak without a script and rely instead on the slides alone.) There were about 30 people in the audience. Many expressed appreciation for my presentation!

The last talk of the day for me was Jace Browning’s “Automated Regression Testing with Splinter and Jupyter.” It was the perfect follow-up to my talk. Whereas mine was mostly high-level, Jace showed implementation and execution. I loved how he compared raw Selenium WebDriver calls to splinter calls, and I was thrilled to see hands-on test execution using Jupyter. One of the things that makes Python so great for automation is that modules can be called from the interpreter – and Jupyter notebooks make that so easy.

The Second Day

Sunday was a shorter conference day. The opening keynote, Lorena Mesa’s “Now is better than Never: What the Zen of Python can teach us about Data Ethics,” didn’t start until 11:40am. Lorena showed us what the Zen of Python can teach us about data ethics in a scary, modern world.

I got lunch at Chatime: dan dan noodles (or rather, an imitation thereof) and a matcha latte with grass jelly. Yum! After lunch, I attended Daniel Lindeman’s “Python in Serverless Architectures.” Now I know what the buzzword “serverless” means! I even found out that I had already developed a serverless app using Django and Heroku. There are some really cool ways test automation could take advantage of serverless architectures.

Another one of my favorite talks of the afternoon was Vince Salvino’s “Containers Without the Magic.” Vince broke down how easy containers are to use. It was a great refresher for me.

Open Spaces

At 3:15 on Sunday, I tried something new: I hosted an open space for test automation. “Open spaces” are rooms that can be reserved for a time slot to meet up informally about a common interest. (For example, PyCon had a juggling open space!) At first, nobody showed up to my open space, but after a few minutes, one lady walked in. She had been a software tester for years and wanted to start doing automation. I walked her through as much info as I could before time was up. She was very grateful for the guidance I offered. It worked out nicely that she was the only person to come to my open space so that she could really get value out of it. (My friend Jason also popped in and helped out; more on him below.)

The After-Party

At conferences, my biggest fear is being awkwardly alone. I want to spend time with good people, both new and familiar. Thankfully, PyOhio didn’t disappoint.

Backstory: At PyCon 2018, I met a guy named Julian who runs PyBites (together with his buddy Bob). We really hit it off, and he invited me to join the PyBites community. They offer great code challenges and a “100 Days of Code” challenge course, as well as a blog about all things Python. Through the PyBites community, I met another guy named Jason who would be at PyOhio 2018 with me. We agreed to meet up for dinner and drinks after the Sunday talks.

(On a side note, I recommend PyBites as a great place to learn new things, hone skills, and meet great people!)

That Sunday night, it just so happened that Adrienne and Trey, two of the other speakers, intersected Jason and me as we were deciding where to go for dinner. The next thing we know (after a hotel pitstop), we’re all walking off together to Eden Burger, a local vegan burger joint. I had a vegan “cheeseburger” with fries and a “milkshake” – and they were genuinely delicious! More than the food, I enjoyed my time with new friends. I was really inspired by the cool things each of them is doing. I guess that’s Python conference magic!

Jason and I hit World of Beer after dinner. After Slack-ing for weeks, it was so good to spend time with this fine gent. We discussed Python, software, our careers, our families, and our dreams. What a perfect way to conclude PyOhio 2018!

Takeaways

There were so many takeaways from PyOhio 2018 for me:

  1. Conferences are phenomenal for professional development. The pulse I get from conferences is electrifying. I walked away from PyOhio galvanized to be an even better software engineer. The talks opened up exciting new ideas. Inspiration for several blog posts sprang forward. The people I met motivated me to try new things. I got so much vigor out of such a short time.
  2. My friends around the globe are awesome. Matt, Jason, Adrienne, Trey, Julian (vicariously), and all the other great people I met at PyOhio made my conference experience so rewarding.
  3. Good values foster wonderful communities. My company, PrecisionLender, has four major values: Be helpful, humble, honest, and human. Those values make my company such a great place to work. I see those same values in the Python community, too. People at PyOhio even asked about these values when they saw them on my PL shirt and my business card. I think that’s partially why Python conferences are always so welcoming and inspiring.
  4. Bigger conferences have more pizzazz, while smaller conferences are more intimate. PyCon 2018 was big, flashy, and awesome. I scored so much swag that I nearly couldn’t fit it all in my suitcase to carry home. PyOhio 2018, on the other hand, focused much more intently on the talks and the people. A perfect example of this was Leo Guinan’s monologue-turned-dialogue on Airflow: it was natural for people to just ask questions. Both types of conferences are good in their own ways.
  5. PyCon 2018 was likely a watershed moment for my career. I cannot reflect on PyOhio 2018 without seeing it as an extension of my PyCon 2018 experience. The only reason I attended PyOhio was because someone at PyCon encouraged me to propose a talk. The reason I met Jason is because I first met Julian. The reason I want to keep speaking is because PyCon went so well for me. The fact that both conferences were hosted in Ohio only two months apart is also rather serendipitous. Like my first trip to China, I think PyCon 2018 will have a lasting impact on my career.

A Cucumber Kimchi Recipe

My wife and I love to eat kimchi. Recently, I started making it at home instead of buying the big (expensive) jars at our local Asian market. I just made oi-sobagi (오이소박이), a cucumber kimchi, for the first time. Given that “Cucumber” is a test automation buzzword, I figured I’d share the recipe here. I hope you enjoy it as much as my Chinese cucumber recipe!

The recipe I used came from Maangchi, “YouTube’s Korean Julia Child.” She has many other delicious Korean recipes, too. Her oi-sobagi recipe is here: