VW ID.4: First Impressions

I hate stopping for gas.

That’s not the only reason that I’ve long wanted an electric vehicle, but it’s certainly one of the bigger ones. Yeah, the fact that they’re a lot cheaper to run is nice. Avoiding polluting is nice. One pedal driving is fun. But mostly…I hate stopping for gas.

In 2016 I drove a Tesla Model S and I loved it. A few years later I drove the Model X (I didn’t love it as much). In 2022 I drove an Ioniq 5 and tried to buy one, but you just couldn’t get them anywhere.

Choosing a vehicle

When we needed a new vehicle this year, I was set on an EV. I test drove a Volkswagon ID.4, a Chevy Bolt EUV, and a Kia Niro, in addition to pricing the Hyundai Ioniq 5 and Toyota BZ4x.

People always mention the tight turning radius of the ID.4, and I liked that. I liked the handling on both it and the Niro. I spoke with another employee where I work who has the ID.4 and he said it was the best car he’s driven (although he hates the software). Due to a need to keep payments down and in the hopes that battery technology will improve over the next few years (I’d really like to have a 350 mile range to make road trips easier), I decided on a two-year lease of the base model.

Running the numbers

VW was advertising $299/month leases with nothing down, although once you add in taxes, fees, and the fact that the car will have some options, it ends up being closer to $400/month. With incentives, the purchase price would have been around $30k.

The ID.4 is almost identical in size and weight to what I was previously driving (a 2012 Toyota Highlander), but since those have gotten a foot larger in the last decade, I’ll instead compare it to a Toyota Rav4, which costs slightly more to lease than the ID.4, costs slightly less for the base model (around $29k), and has almost the same length and width (to within half an inch).

In the three weeks I’ve had the ID.4, I’ve driven about 900 miles. Depending on which (non-hybrid) version of the Rav4 you get, it gets 28-30 miles to the gallon, so we’ll call it 30, which means that would be 30 gallons of gas. Gas in my area goes for $3.39, so that’s just over a hundred dollars’ worth of gas.

I’ve averaged 3.9 miles to the kWh over that 900 miles, so that’s 231 kWh of electricity. Electricity here is just over 17 cents per kWh, so the charging would have cost $39.84 – 60% off the price of gas! I say would have, because the power company pays me less than 4.4 cents per kWh for the excess power generated by my solar panels, so my actual cost for that electricity was about $10 and I saved about $30/week compared to gas.

Charging and range

The base trim on the ID.4 has a range of about 200 miles, but normally I’m driving around 30 miles/day during the week. Plugging into a 120v outlet recharges the vehicle at a rate of about 4 miles per hour, so I can just plug in when I get home and the battery is recharged before I leave in the morning.

If we had a 240v outlet in the garage, I could charge a lot faster, but it hasn’t been enough of a priority to bother with yet. I did have one Sunday when I drove over a hundred miles in the car and didn’t want to wait a few days for the battery to be back to its usual level of charge, so I plugged in to a public level 2 charger while my kid and I were at the library and paid $1.27 to get 9.5 kWh (or 35+ miles of range).

Ideally, when I purchase an EV I would prefer 350 miles of range just because that would be convenient for road trips; you generally like to keep it at between 20% and 80% battery, which would mean driving about 210 miles between charges, or about three hours on the freeway. Right now most offerings are in the 200-300 mile range, but I’m expecting several 400-mile-plus options to become available in the next few years.

But since this is intended to be my daily driver, not our road trip car – we’ll still want to use the larger Sienna for that – the smaller range has been fine.

And plugging it in when I get home is so much less annoying than having to stop for gas.

Driving experience

When it comes to actually driving the car, I have few complaints. The ID.4 doesn’t have full one pedal driving and requires an extra step to even activate the regenerative breaking, so most of the time I end up not using that and just driving it the same way I would an ICE vehicle.

The voice controls have been hit or miss (mostly miss) for me, so I largely just control everything with the buttons. The extra large display is really nice for the backup camera. I have lane assist turned on, and it’ll nudge the steering wheel slightly if it thinks I’m too close to the edge of the lane.

I had one incident recently when I was pulling into a parking spot and the car just stopped. I knew I hadn’t hit anything, so I figured something must have triggered the automated brake; getting out, I realized the car had decided I was too close to a hitch that was sticking out from the truck in front of me. So that’s a nice safety feature.

You can use either the built in navigation or your phone with carplay/android auto. If you’re using the built in navigation, there’s a subtle LED light strip under the windshield that indicates when it’s time to turn. The software isn’t perfect – for example, I’d like the option to just save the location I’m currently at rather than searching the address first – but based on what I’ve heard about older versions of the car, it must have improved a lot for the 2024 models.

Overall – with the exception of when I’ve needed the extra space in the Sienna (sometimes you really do want a van) to haul things that wouldn’t fit in the ID.4, I haven’t chosen to drive our other vehicles since I got this one.

From a passenger perspective, when we drove the Ioniq 5 the front passenger seat felt a little cramped to me and I don’t notice that here. My daughter tells me that the backseat is roomier than the Highlander’s. It doesn’t have as many cupholders as I’d like, but you can get a third party attachment that fits into an open slot to add more.

Overall impressions

Overall, I’m pretty happy with the vehicle so far. Obviously, when the lease is up I’ll be looking at all the options for what’s available, but at this point I could very well see purchasing a 2026 ID.4 in two years.

Hopefully the Pro version with the massaging seats.

Instant Family

Last week I finally got around to seeing Instant Family.

If you’re not familiar with the movie, it follows a childless couple who decide to adopt out of foster care. As expected, crazy hijinks ensue.

I have to say that I enjoyed the movie quite a bit. It has a lot of humor, while still (pretty) accurately representing what it’s like to be a foster parent.

One thing to be aware of is that this movie is definitely from the foster parent perspective; it’s about how the foster parents fight through the process and (of course) come to learn that their kids are what was missing from their lives. If it was written from the foster child perspective it would be a very different (and probably much less funny) movie. From the perspective of the parents, their lives are being turned upside down because they now have three kids with behaviors that they aren’t prepared for and can’t control. From the perspective of the kids, their lives are turned upside down because they’ve been moved to a new home and don’t know what’s going to happen to them; almost everything in their lives is outside of their control.

I don’t know if I would show this movie to (especially younger) foster kids – as I said, it’s not aimed at them and could be upsetting – but for people considering adoption from the foster care system, or just enjoy a good movie, I highly recommend it.

On Writing

I’ve been working on a technical book for several years now.

Partially, this is because I have a million things to do (coincidentally, my son just turned two). Partially this is because I’m a slow writer. And partially…it’s because writing is hard! Here are a few things to improve the process:

  • Don’t write technical material in Word. Seriously, just don’t. Fortunately I learned this one many years ago – I used to type up my homework for my Algorithms class (due to my lousy handwriting) and it didn’t want long to determine that the effort to figure out LaTeX was less than the effort to get mathy things to work correctly in Word.
  • Once you’ve written something, leave it along for a while and then print it out to proofread it. It’s amazing how many typos you can find once you’re looking at something in a different format and state of mind and can read what you wrote rather than what you meant to write.
  • If at all possible, have somebody else read your work. Sentences that make complete sense to you might not work for someone else. If possible, get a reader who belongs to your target audience and can confirm that you’re not assuming background knowledge or ability that your readers won’t have.
  • Don’t assume you know what your readers want. In my case, I was expecting to write a 400-page book; I was told by multiple people that I should break it up into multiple shorter volumes. Bonus: the first one will be ready a lot sooner!
  • Don’t assume you have to make every change your beta reader suggests. Take their suggestions seriously, but remember, it’s your book – you’re in charge!

You don’t have to be the world’s top expert on something to write a book about it; you just need to have something to say or a way to say it that’s different from what’s been done before. In my case, I have a PhD in computer science and experience as a teacher, a textbook editor, a writer, and a software developer – so writing a book about computer science for software developers seemed like a good way to combine all of those elements. What does your background make you uniquely suited to do?

Thoughts on foster care

I recently gave an “intro to foster care” presentation. What was interesting is that I was trying to both encourage people to consider becoming foster parents, and discourage them from doing so.

Why both? There’s always a shortage of good foster parents – people who really care about the kids and are willing to do whatever it takes to make sure the kids feel safe and have their needs met. At the same time, there are too many foster parents who don’t treat foster kids right. It’s not that they’re necessarily abusing kids, but they’re not willing to put in the effort to become trauma-informed or don’t treat the kids like they’re really members of the family. So I’m trying to increase the number of available foster parents, but only those who are reasonably confident that they can treat foster kids as their own. I emphasize this a lot in my talk – while you have the kids, they’re your kids and deserve to be treated like your kids. If you wouldn’t leave your biological kids out of something, you shouldn’t leave your foster kids out either.

We recently re-opened our home for new placements (we closed after our daughter went home to ensure that we’d be available to support her and her mom as needed), but we’re being pretty selective in who we take because we need to find a kid that we’re the right family for – someone whose needs we can do a good job meeting. It’s not enough to find homes for these kids; they need to be homes where they can be comfortable, where they can feel supported, where they can belong.

Everybody needs a family – whether that be biological relatives, close friends, or otherwise. Are you in a position to be family for someone who needs it?

Being Matt

When I first started working as a developer over seven years ago, it was a bit overwhelming. Not only had I never worked as a programmer or used any of the languages I’d now need, I also had to get used to a lot of internal tools and processes that often had minimal documentation. It was, in a word, exhausting.

Matt was another developer on the team who had already been with the company for half a year, and he was really good at his job. He wasn’t officially my mentor, but he encouraged me to ask questions. I had him as my code reviewer for my first major piece of development, and let’s just say he had a LOT of comments – everything from functional improvements to changes in variable names. It was frustrating, to say the least – but also educational. Having Matt review my code was a great way to learn what good code should look like, and as time went on I would actively seek to have him as my code reviewer whenever I was working on something particularly complicated; having Matt look at my code gave me more confidence that everything was correct.

Matt recently passed away from cancer; one of my regrets is that I never got to know him socially. We had several shared interests, but I just haven’t made a practice of socializing with my coworkers outside of work. However, his passing leaves me as the senior developer on my team; out of thirteen people I’ve been on the team longest (although one person has been at the company longer) and I’ve been on the team at least 2 1/2 years longer than anyone else who is focused entirely on development (rather than being a team lead). This puts me in the position of often being the person that other developers come to with questions.

I’ve never forgotten how Matt encouraged me to ask questions and assured me that the feeling of being overwhelmed was normal (if I recall correctly, he said it took him about a year to really get settled in). I’m trying to do the same for the newer developers (although, since I’m hard of hearing, I encourage people to email me as it’s more of a challenge when they drop by my office).

No matter how good of a developer you are, there’s a limit to how much code you can produce (although Matt produced quite a lot). By helping your team to work better, though, you can have an effect on far more code than you can personally touch. I like to think that my efforts lead to improved code quality even on parts of the codebase that I never touch myself.

Thanks, Matt. Wish you were (still) here.

Introduction to Foster Care

I’m going to go a little off-topic for this blog today and talk about something that’s not technology related but is important to me: foster care. My wife and I have been certified foster parents for several years now, and I find that there are a number of common misconceptions about what foster care is and how it works.

What is foster care?
Foster care is a way to provide homes and families for children who, for whatever reason, do not have parents who are able to care for them. Sometimes that means no living parents or parents who are currently unable to care for children; other times, this is children who have been removed from their homes due to abuse or neglect.

Generally foster care is intended to be a short term solution until the children can be reunited with family members – if not their parents, then other relatives who would be willing to adopt. The actual length of “short term” may vary – children may be in the foster care system for days or years.

There are approximately 400,000 children in foster care in the United States, including nearly 7,000 in Wisconsin.

Who can be a foster parent?
To be a foster parent, you must be at least 21 years old, have sufficient income to cover your own needs, have sufficient room in your home for a child, complete the training requirements, and pass a criminal background check. Most importantly, you should be prepared to love a foster child as your own!

Many people believe they couldn’t do foster care because they wouldn’t be able to love a child and then give them up again, and in fact the primary goal of foster care is reunification – returning a child to their family. I won’t lie – giving up your child is one of the hardest things you’ll ever do, if not the hardest. But by loving them anyway, you can make their lives so much better.

What does it cost to foster / Do foster parents get paid?
Being a foster parent is a volunteer job; like having biological kids, it’s one of the most frustrating and most rewarding things you’ll ever do. The government does provide a (nontaxable) stipend to help cover the costs of caring for the child; in Wisconsin, this rate is $238/month for level 1 care (generally, caring for a relative) and ranges from $394-$511/month depending on the age of the child otherwise. There is an additional rate for children with special needs; at the higher end, a child who needs around-the-clock care may qualify for a total stipend of up to $2000.

Online, I’ve seen comments both from people who think foster parents shouldn’t be paid at all (in which case there would be even more of a shortage, as many of us couldn’t afford it) to those who think foster parents are just in it for the money (that extravagant $13/day to cover the cost of caring for a baby!) It probably comes through here that I think both views are ridiculous; as a friend of mine put it, sometimes the foster care stipend only covers your gas for driving your kid around – but it helps!

Foster kids are covered by Medicaid, and those under 5 are also eligible for WIC benefits. The income of the foster parent does not matter for Medicaid/WIC eligibility.

Who are the kids?
There is a wide variety of children in foster care – from newborns to high school graduates, from kids with no health problems to those who are extremely medically fragile, from single kids to large sibling groups, from those with a plan for reunification to those who will need an adoptive home. Generally speaking, you can assume that the kids have suffered through some level of trauma – if nothing else, that of being removed from their parents. They all need parents who can be patient with them as they deal with change and uncertainty.

How can you get involved?
Not everyone is suited to be a foster parent – it can be physically and mentally exhausting and you do have to have a suitable home. For those who can’t take on a child full-time, other options to help include providing respite care (where you care for a child for a few days or even just a few hours) or even just helping new foster parents with meals when they’re feeling a bit overwhelmed. Most importantly, realize that foster kids aren’t any “less” or “real” than biological children; I love both my biological child and my foster child, and they’re both my kids.

That Conference Follow-Up

We’ve finished anotherĀ That Conference! This was my third year attending, but my first time as a speaker.

As much as I love the name (I’m going to That Conference next week. Which conference? That conference!) and the location (who doesn’t want to spend the better part of a week at a water park?), as much as I love the opportunity to spend three days focused on learning…I think what I get most out of That Conference is an opportunity to recharge. To recover from burnout. To get excited about programming again.

One thing I’ve struggled with is the “hallway track”; I know that many people go to conferences specifically to talk to other developers (often at the cost of even going to the talks!) – That Conference even schedules a half hour break after each session to allow for this – but as someone with a severe hearing loss (and an introvert) I have a very difficult time inserting myself into conversations. This year was easier for two reasons: I met an online friend in person for the first time, and giving a talk provided a ready conversation topic, so I was able to have much more in the way of meaningful interactions than I have in years past.

I’ve uploaded the slides for my accessibility talk; there are a lot of extra details in the presenter notes that I included for reference but didn’t have time to actually work into an hour-long talk. Accessibility is an issue that a lot of people are talking about these days, but that many companies still aren’t taking as seriously as they should; often it’s still an afterthought (or a no-thought). That Conference has been trying to encourage the voices of underrepresented groups (their current goal is to have half of the speakers be women), so I’m hopeful that we’ll also continue to see more work on reaching out to people with disabilities. Last year a number of speakers (including at least one of the keynotes) showed videos without captions, and I wasn’t seeing that this year – I don’t know if that’s just coincidence or if people are keeping accessibility in mind.

I’ll be speaking at MKE.NET in a few weeks, on sorting algorithms, and I definitely plan to be back at That Conference next year.

When to say “I don’t know”

Many years ago, I taught middle school math. One day a student asked me a (non-math related) question that I didn’t know the answer to, so I told her that I didn’t know. She then got annoyed with me because apparently, teachers are supposed to know everything.

I was reminded of this recently when seeing comments about hiring people because they weren’t afraid to admit in an interview that they didn’t know something. Apparently this is somewhat uncommon, which suggests that an awful lot of people are trying to BS their way through interviews.

Of course, nobody wants to hear “I don’t know” to every question, but assuming that you’re qualified for the job you presumably can answer most of them. This applies to working as well; I’d much rather you tell me that you don’t know how to do the task you’re assigned than pretend you already know and get in over your head.

So, here are some acceptable ways to say “I don’t know”:

  • I’m about 80% confident that this is the answer, but I’d have to double check to be sure.
  • I haven’t worked on that functionality, but Jim would know. Let me conference him in.
  • I can’t give a firm deadline for when the project will be completed because we’re waiting on feedback from QA. I’ll follow up with them and see when they expect to be done testing.

Here are some less acceptable ways to do it:

  • I don’t remember. [And I’m too lazy to look it up]
  • I don’t know. [And I can’t be bothered to find out]
  • It was exactly 1,429.3. [Or some other BS answer]

Simply put, if you don’t know something but can find out the answer or direct me to the person better suited to answer the question, that’s just fine. If you are the person who should know the answer, but for some reason you don’t, then you should be finding out; don’t just shrug it off or (worse) make something up. Nobody (well, except apparently some 7th graders) expects you to know everything, but if you’re being lazy or BSing the answer, people won’t be particularly eager to work with you.

tldr: You don’t have to know or remember everything; just be honest.

Computer science in web development?

One of the disadvantages of doing web development (to me, anyway) is that I don’t often get to use my background in theoretical computer science, especially with the front end stuff. It’s much more likely that I’ll be fighting with javascript than calculating asymptotic runtimes!

A few weeks ago was an exception. We had a number of jobs what could be scheduled and needed the software to determine, when a user made a scheduling request, whether that request could cause either the job being scheduled or any job that depended on it to exceed the time allowed. This was a fun little problem that I solved by using a modified depth-first-search to find the longest dependency chain for each job, then using the depths obtained in this preprocessing step to efficiently [O(n+m)] determine which jobs, if any, would end up running past the allotted time so that we could warn the user before allowing the scheduling.

Seven assorted tools and a tape measure.
Tools. Image is in the public domain.

In this case, the problem instance is generally small enough that we could have just brute forced a solutionĀ and it would likely still have had a reasonable runtime, but going with an efficient solution straight off means we don’t have to worry about scaling this up in the future, and the code is just nicer to work with.

You often see knowing the standard algorithms being compared to having more tools in your toolbox, and I think that’s a good comparison. I’m not the super-handyman type, but I still keep a good set of power tools around, and when something around the house needs to be fixed I often have the tools I need to just go ahead and take care of it, and I don’t have to force a tool into a situation it’s not meant for because I don’t have the correct tool available. Similarly, some types of development may not require you to pull out the graph algorithms all that often, but when those situations arrive they’re helpful to have around.

On Writing, Learning, and More

The problem with having a blog is that you have to post new content pretty consistently, or else it becomes just one of the 70 zillion sites on the internet that never gets updated and nobody reads. The question is, how do you always manage to have something to say on a (weekly or better) basis?

This becomes more difficult when it’s a professional blog rather than a personal one. I could certainly write a few posts about my amazing sabbatical in Europe (if you have any interest at all in history and/or castles and have the opportunity to see the Tower of London, DO IT!), my experience as a foster parent, and so on – but on a blog that’s focused on technical issues (specifically, programming and computer science) how many people who aren’t personal friends of mine will care?

Tower of London by Christine Matthews. Used under Creative Commons license.

On the other hand, if I can produce enough content that will be generally relevant to the main topics of the blog, then people can always skip the occasional diversion and come back for the next post. Which brings me back to the original question: how do I manage to consistently deliver content that the majority of readers will find useful? It’s not like I run across and solve an interesting problem every single day.

So I’m going to try a different approach. I’ll continue to do what I’ve been doing – when I have an opinion about a programming topic or just learn something I find interesting, I’ll write it up – but I’m also going to start chronicling things from my personal life that might be of general interest – like, again, what not to miss on a European vacation – even if they’re not strictly technology-related.

Additionally, I’m going to try to formalize my self-improvement program and use the blog to keep it moving. I’ve been in my current developer position for nearly six years now and am at the point where I’m comfortable with it, but even with my current responsibilities I still don’t feel like I’m really an expert developer. I’m always working to improve, but the hassles of day to day life mean that that books pile up unread and that Pluralsight subscription doesn’t get used nearly enough to justify the cost.

So I’m going to set a fairly straightforward goal: at the end of each workday, I’ll try to think of something that I learned or that became more clear to me that day. If I can’t think of anything, then I’ll pull out some type of educational material and go through it until I find something. That something can go on a list, and that list can be topics for blog posts to help me solidify things in my mind.

Maybe that won’t be anything groundbreaking. Maybe it’ll just be a better understanding of how to do something simple in TypeScript. But it seems that by doing this, I can’t help but become just a little bit better every day, and just like compound interest, all those small gains are going to build up over time.

Pretty soon I’m expecting a promotion to senior developer. My goal is to raise my skills to the point where I feel like I deserve it.