What I Learned Looking for a New Job

Yesterday was my last day at the company I’ve worked with for the last 4 years. On Monday I start at my new position. In the meantime, I hope to be a little more creative in my personal spaces; here on the blog, over on Twitch, etc.

Here are some things I learned while job hunting:

Don’t Give a Number

In all previous job searches, I’d decided to ask for X% more than my current salary when talking with potential employers. Invariably, I never received an offer for more than that, and often less.

This time, I simply told them my current salary, and explained that any offer I received would go through a risk-reward analysis in my mind. After all, I could have stayed at my current job, even if it wasn’t what I really wanted to be doing. While this may end up wasting some of your time (see below), it can also pay off.

Imagine my surprise when I received an offer for a substantial increase in salary! We’re talking >50% here, which blew my mind. The remnants of my shattered psyche were then completely demolished when, at my next interview, I was told that they could match that offer! By the time the third company said the same, I realized that I’d been setting myself up to be underpaid by telling prospective employers how much I would settle for.

Apply Everywhere

I applied to at least a dozen companies. One of them seemed like a real long shot, as they dealt with big data management and expected a knowledge of SQL queries I didn’t have. But I applied anyway, and even took a test quiz to create some complicated queries. I was sure that was the end of the line for me there, but instead of just giving up, I did as much as I could, and documented where I couldn’t continue, and what I thought might be the next steps. And yet I passed to the next step of the process.

The point here is that it’s not always what you already know that’s most important; sometimes it’s demonstrating your capacity to learn.

Check Glassdoor

Glassdoor is a great resource for those on the job hunt. Like any set of reviews, remember that those with a negative impression are more likely to provide feedback, so reviews are likely to skew in that direction. But the one company with consistent poor reviews lived up to their reputation with me…

Once I had an offer, I reached out to the other companies I was in talks with to let them know. I was now on a time limit, and wouldn’t give up a bird in the hand for two in the bush. It was only then, in the 3rd or so round of discussions with this company, that they told me they were willing to “increase the base pay” for the role to match my current salary. Remember, this is after setting a clear expectation in the first meeting that I wasn’t prepared to leave my position without a compelling monetary gain.

It was a complete waste of time, both mine and theirs. Maybe if they had some awesome role, with amazing benefits and great culture, I could have been convinced to make a lateral move. But Glassdoor had already told me that wasn’t the case, and we promptly ended talks there.

Consider How They Treat Your Time

In the process of interviewing for a role in technical writing, I was asked to provide writing examples, do writing exercises, and all other manner of proof that I had the skills needed. The companies that immediately turned me off were the ones that asked for me to complete writing exercises for them immediately. One even asked for a personal essay, before we ever spoke!

I get it if you’re a big company and you want to weed people out of the process as early as possible, but how is a 15 minute meeting to talk going to take more time, for both parties, than writing and then reading an essay, or reviewing a writing exercise specific to that job, which I couldn’t use elsewhere?

As far as I’m concerned, this behavior tells me how that company respects (or doesn’t) your time, and it won’t end when you’re hired.

I’ve worked on open documentation repositories for the last decade. Everything I’ve written, edited, and (for the most part) discussed is out in the open on GitHub. The company I accepted a role at happened to be the only one where I knew they looked at my actual work history, laid bare as it is. While this wasn’t the only deciding factor, it showed that they respected my time by seeing what was already out there, and not asking me to rehash or reform my body of work specifically for them to consider.

Give Honest Feedback Before You Go

As I said above, I could have stayed put. I wasn’t happy, but I was paid well enough and received positive feedback for my work. I could have kept muddling through, finding solace in the fact that I was part of a great team and we were fighting through the problems together.

But I was depressed. Not clinically, just as a description of my emotional state. And I didn’t even realize it until I put in my notice. The resignation that I couldn’t change the problems affecting my work had affected my mood in and out of work. Only after getting over the dread of having to tell my lovely and supportive manager that I was leaving did I start to feel a change.

The company I just left is full of amazing and wonderful people. As a part of the technical writing team, I had a chance to interact with most teams, trying to find, consolidate, and manage the knowledge needed for customers and staff to be successful.

But the problems were systemic, and my years there showed me they were unlikely to change. I’m not going to sit here and bad-mouth them publicly, but I made sure to be respectful but honest in my exit interview. What they do with this information is beyond my control. All I could do is document the problems as best I could, providing resources for others to use in continuing to fight for change.

Moving forward

I’d been told by coworkers in the past to always be looking at what’s out there. Take meetings and see how other companies value your worth to them. Doing so may have informed me that I could be making more money earlier, but I just don’t think I have it in me. Job hunting takes a lot of time and energy, especially when doing it in earnest. And the value I place in my time and others’ is too high to waste it by pursuing opportunities I don’t intend to consider taking.

Having said that… I don’t know. I stayed with each of my last two jobs for over 4 years, which seems long compared to the job histories I look at on LinkedIn. Tech folk seem to move around every 2 to 3 years on average, but I’m not sure why that is.

This is where I’d love to get more input and feedback. Why do tech folks move around so often?

Tips and Tricks for CircleCI

I am not a developer, but I work with developer tools all day. This can be frustrating, because a lot of tools made for developers assuming knowledge that I’m lacking.

Of course, if that wasn’t the case there would be less need for technical writers and my work would be harder to come by!

In any case, After spending the last few days migrating my job’s documentation to use the CircleCI 2.0 configuration, here are some tips I picked up:

Non-interactive shells

This can be tricky if you don’t keep it in mind. Because CircleCI tests are run in a non-interactive environment, your output can get …funky. For example, here’s the output of sculpin generate, which we use to turn our markdown files into html, running locally through CircleCI CLI:

Here’s the output from the build on CircleCI’s platform:

Sculpin assumes an interactive shell in which it can rewrite its output as it goes. CircleCI’s environment is set for better logging, not better human readbility (as it should be).

This is of course a trivial example, as I could add --quiet to my generate command to make my CI output nicer. But that’s not always the case…

Rsync output on CircleCI

Part of my build process involves copying my compiled docs to a staging environment. Our scripts use rsync, the most common choice for transferring files from A to B.

The Problem

No matter what permutation of logging flags I gave rsync, the only output I could get from my CI builds was empty, or a list of every single file it was checking for changes:

Not a critical problem, but it certainly reduces the usefulness of the output.

The Solution

While I could pipe the rsync command directly through grep, that would interfere with the while loop I put rsync in, which checks for exit codes to determine success. Instead, I constructed my rsync command as follows:

rsync --checksum --delete-after -rtlzq --ipv4 --info=BACKUP,DEL --log-file=multidev-log.txt -e 'ssh -p 2222 -oStrictHostKeyChecking=no' output_prod/docs/ --temp-dir=../../tmp/ $normalize_branch.$STATIC_DOCS_UUID@appserver.$normalize_branch.$STATIC_DOCS_UUID.drush.in:files/docs/

That’s a lot to unpack, I know. The key flags are -q, which keeps the output quiet, and --log-file=./multidev-log.txt, to redirect output into a log file. Then, once my loop has exited, I can run:

cat ./multidev-log.txt | egrep '<|>|deleting' || true

My pipe to egrep searches for the characters < or >, or the word deleting. Using the OR operator || true means that even if the grep returns no results the line will still exit with code 0, keeping my script from failing.

Now my output is concise and useful!

(By the way, I learned a lot of useful information about rsync output from this blog post, run through Google Translate.)

Dockerize for background processes

IMHO, this tool is poorly named. While it’s purpose was originally for CI builds involving multiple docker containers (I assume), it’s helpful even in a single container environment.

The Problem

I was seeing intermittent build failures coming from my Behat tests:

Behat is configured to look at port 8000 for my Sculpin server to serve the files it tests. The Sculpin step wasn’t failing, but rather it wasn’t starting up fast enough.

The Solution

My initial response to this problem was to add sleep 5 to my Behat step, giving Sculpin more time to initialize. But then my friend Ricardo told me about Dockerize. Because my Docker image is built from a CircleCI image, it was already installed. So I added a new step in .circleci/config.yml:

- run:
    name: Start Sculpin
    command: /documentation/bin/sculpin server
    background: true
- run:
    name: Wait for Sculpin
    command: dockerize -wait tcp://localhost:8000 -timeout 1m
- run:
    name: Behat
    command: |
    /documentation/bin/behat

Dockerize checks for a service listening on the port, and retries if one isn’t found:

Now I have one less reason for my builds to fail…

 

Do you have any tips, tricks, or answers to common “Gotchas” for continuous integration testing? If so, please share them!

Make a site, NOW!

A month or two ago I registered eastcoastamphicar.com and set up a WordPress site on Pantheon. The eventual goal was to make a web presence for my friend Billy, who restores the historic amphibious cars, and gives rides to folks whenever he can.

Today he called me to let me know that he’d be filming tomorrow for CBS new out of New York. He said he’s doing it for the exposure, that they’d plug his email and phone number at the end of the segment.

Wait, what? His email is at yahoo.com, and his phone is a land line, no texts. Sounds like he needs that website, and he needs it now!

So I took some drone footage a friend captured, some photos I’d scanned from Billy, and made an MVP for eastcoastamphicar.com. And hopefully in another hour, once Namecheap renews their DNS records, I’ll have a nice professional email address for Billy to give CBS.

Oh, look at that. It’s past midnight. Off to bed!

Idle Hands are The Hipster’s Plaything

I’m a pretty modern person. I work remotely for a tech company, I’ve lost count of the number of computers in my home (laptops, old towers, Raspberry Pi’s, etc), I even have Tux tattooed on my arm.

And yet I find myself falling into the hipster trappings of my generation; I have a turntable, I vape, and I just bought a french press. And I wonder to myself, why am I doing this? I’m a scarf and v-neck shirt away from hipster bingo!
Continue reading “Idle Hands are The Hipster’s Plaything”

Organizing Photos

This post is on quickly sorting photo libraries. If you want to skip the backstory and jump right to the commands, click here.

I recently switched my personal file hosting/sharing to NextCloud,  from OwnCloud. Among other features and improvements, it will automatically sort uploaded photos from my phone into folders by date. 

This great new feature created a glaring contrast with the many years’ worth of previous photos, mostly all in a single directory, some sorted manually by event.  The process of grammatically identifying, sorting, and deduplicating was simple enough once all the tools were lined up, but finding them was not. What follows are the tools I used to get my photos in order.

Continue reading “Organizing Photos”