Showing posts with label Red Flags. Show all posts
Showing posts with label Red Flags. Show all posts

Penny-wise and Pound-foolish

What a time to be a software developer! I'm always amazed that even in an industry with high salaries and intense competition for talent, companies find a way to shoot themselves in the foot with cheapness.

There's a great thread on Hacker News today where people are chiming in with their experiences of company cheapness around basic things like coffee and bathroom cleaning. The common lesson being that when you see a company attempting to cheap out on basic things, it's time to leave.

Early in my career I read Joel Spolsky's A Field Guide to Developers and it painted a picture for me of how good tech companies treat their developers. And it taught me early on to pay attention to the anti-patterns of companies that were less enlightened.

At one of my first jobs, I asked for a book about a new technology that was important for projects I would be working on. I'll never forget the development manager making me feel bad that in a time where the company was trying to save money that I would ask for a $30 book on a technology they wanted me to learn. Keep in mind this was a company that was paying me tens of thousands of dollars in salary in addition to full benefits. It's in small moments of cheapness that you learn a lot about a company.

In the early years of .NET, when Visual Studio was less packed with nice productivity features, the 3rd-party extension ReSharper was more or less ubiquitous amongst respectable developers in that space. It was always very telling to see which .NET shops assumed you would want that tool and provided a license on your first day, and which ones treated that extra cost of a few hundred dollars with suspicion.


In fact, the way that employers view licensing costs for software of the daily-use variety is always enlightening. One company I worked at had developed an impressive build system around a popular source control system you've definitely heard of. At some point someone in management decided they didn't like paying for an open source product that could be had in a free edition, so they downgraded to a "community" edition of the source control system that was free (as in beer), requiring the company to allocate developer hours to re-implementing features of the paid edition that they relied upon heavily but no longer had in the free version, not to mention training everyone to use the new bolted-on system in their daily workflow.

Training is another area that speaks volumes about an employer. Companies that believe in the importance of training will make it as easy as they can for you to get that training. How onerous is the process to get training courses approved? Companies that want to provide simple, default training options will subscribe every developer to Pluralsight, Safari Books Online, or other popular all-you-can-eat educational resources. Some companies are aware of these resources but will try to save money by buying only a certain numbers of licenses, so that employees have to keep bugging each other to release a license. Some companies will force employees to sign up using their own credit cards and then submit expense reports every month to get reimbursed. These are money saving measures that put barriers up and ensure that most people will simply stop caring about getting training because it's too much of a hassle. Employees aren't dumb—they know the company had ways they could have made these things easier, and chose to go the penny-pinching route that shifts burden to the employees.

These are just a few examples I've personally witnessed, but there are myriad ways that companies turn off developers with moments of cheapness. In a period of unprecedented mobility among developers, where employers routinely pay six-figure salaries to entice and retain their people, it's a bad time to be penny-wise and pound-foolish.

Job Ad Red Flags: “Unlimited Vacation”

Nothing makes my spidey sense tingle in a job ad quite like the phrase “unlimited vacation.”

Nedry

It’s one of those transparently ridiculous perks. Like how free sodas in the office are an amazing perk. Or how long meetings are fun if there’s “free” pizza.

Obviously, the vacation is not unlimited. So why say that it is?

There are certainly companies out there that have the best intentions for their employees. But stating that you have an unlimited vacation policy and leaving it at that is frankly irresponsible.

“I took 3 months off from my job last year because my employer has an unlimited vacation plan!” — No One

The Myth Of The Unlimited Vacation Policy

Again, I don’t believe every company that has such a policy is nefarious, but the end result is the same. As a Hacker News commenter points out:

It's a means of weaponising ambiguity into guilt. Everyone knows it's not unlimited, because you can't take 3 months off. But because there's no boundary, the real limit has to be found by stressfully, riskily probing it.

pjc50

I think a much better policy is a minimum vacation policy, with unlimited discretionary days on top.

We require a minimum of [high number] vacation days are taken by each employee, and we allow unlimited additional vacation days beyond that.

Now that is a true perk.

Job Ad Red Flags: Calling All Ninjas!

I’m not sure this really needs to be said, but these words in a job posting are an instant buzzkill:

  • Ninja
  • Rockstar
  • Jam sessions
  • etc.

Basically, if the ad sounds like it was composed out of words that immature young men would think are cool, you lost me.

These may be controversial, but I’m also wary of mentioning things like “hackathons” and “kegerators”. Hey, I love working as a software developer, and I love beer, but it seems kind of weird to think I want to hang around the office after hours. (In fact, let’s kill the office altogether—I’ll take the savings in my paycheck, please.)

Ninja

Job Ad Red Flags: Fad Obsession

This red flag may be considered a subcategory of the previous red flag I wrote about in my post highlighting technical minutiae.

Remember when everyone was talking about how jQuery was unmanageable without a framework like Backbone.js? And then three seconds later it was embarrassing to be using Backbone.js, and startups would talk sheepishly about using it and how they should really rewrite using Angular? And then three seconds after that, they were embarrassed to be using antiquated technology like Angular, and how they couldn’t wait to start their rewrite using React?

microservices

As Dan McKinley put it in his classic post, Choose Boring Technology (2015):

Let's say every company gets about three innovation tokens. You can spend these however you want, but the supply is fixed for a long while.

…

If you choose to write your website in NodeJS, you just spent one of your innovation tokens. If you choose to use MongoDB, you just spent one of your innovation tokens. If you choose to use service discovery tech that's existed for a year or less, you just spent one of your innovation tokens.

…

Adding technology to your company comes with a cost. …if we’re already using Ruby, adding Python to the mix doesn't feel sensible because the resulting complexity would outweigh Python's marginal utility. But somehow when we're talking about Python and Scala or MySQL and Redis people lose their minds, discard all constraints, and start raving about using the best tool for the job.

…

The problem with "best tool for the job" thinking is that it takes a myopic view of the words "best" and "job." Your job is keeping the company in business, god damn it. And the "best" tool is the one that occupies the "least worst" position for as many of your problems as possible.

When I read a job ad where the focus is on an intricately presented list of the most bleeding edge languages, frameworks, databases, text editors, chat tools, and the like, I have to wonder what other trivial things they’re spending an inordinate amount of cycles on instead of delivering software to their customers. 

Job Ad Red Flags: Technical Minutiae

Ever see one of those developer job postings that reads like the hiring manager sent out a mass email to every developer in the company just saying something like, “Please send me a list of every technology you’ve ever used at this company,” and then combined every list together to form the ad?

Looking for an experienced software engineer.

Qualifications:

.NET 2.0, .NET 3.5, .NET 4.0, Visual Studio 2005 Professional, Visual Studio 2008 Premium, Visual Studio 2015 Enterprise, ASP.NET 1.0, ASP.NET 2.0, jQuery 1.7, jQuery 2.2.4, PowerShell 1.0, …

And then give no details about the work environment, philosophy, or any sort of non-technical human consideration?

I completely understand if your company builds all of its software on Microsoft technologies, that you probably aren’t looking for Java developers. Or if you want to avoid hearing from Ruby on Rails developers when your project is embedded C. Mentioning the general constellation of technologies that you need someone to work with is a good idea for everyone involved.

laptop with stickers

But focusing your outreach effort to potential hires on a laundry list of technical minutiae shows a lack of understanding about what’s important. The hardest problems to solve in most software organizations are not technical problems but human problems. Talk mostly to the human being you’d be hiring and the other human beings they’d be working with.

Below is a great example of hiring for a technical role in which the writer takes a human tone first. In this case the company Stripe is hiring for a Web Developer role:

We’re looking for someone with:

  • 3+ years of experience as a web developer
  • Experience building public facing websites that work elegantly across commonly used browsers
  • An extreme attention to detail and deep empathy with design
  • An interest in helping startups
  • Advanced knowledge of modern HTML and CSS

Perks of working on this team include:

  • This is a new and very small team with lots of opportunity to help shape the future
  • Working closely with Stripe’s world class design and marketing teams
  • High impact role as we spin up our customer acquisition machine
  • An opportunity to focus on fit, finish, and polish of frontend output

The only specific technologies mentioned here are HTML and CSS, which, of course, any person developing for the Web would need to know.

The copy is mostly written to a human being who likes building high-quality websites, rather than a list of the technical details by which Stripe has implemented their website. (Check out Stripe’s careers section for more great stuff like this.)

If there’s one thing I’ve learned in my career as a software developer, it’s that technology is almost certainly the least important aspect of software development. Hire a human being, not a list of technologies.

Job Ad Red Flags: “Passion”

There’s no doubt that people who enjoy a pursuit will generally get better at it than people who don’t. And there’s no doubt that people looking to hire employees prefer to hire ones who will take the work seriously and care about the quality of their work.

Unfortunately, it’s become all too common to abuse the idea of “passion” in recruiting efforts.

Rejected. No passion.

There is a certain kind of hiring manager who screens for people (often young, inexperienced people) who are willing to burn themselves out for the benefit of a company.

As Hacker News commenter s73ver puts it:

In job adverts, "passion" is often shorthand for "willing to work unpaid overtime."

Avdi Grimm has this to say, in his classic post on the subject of passion…

If what you really mean is “we seek people who are enthusiastic about programming”, say so. But consider why you are saying so. Is it because you want people who will do a good job because they care? Or is it because you expect the long hours to be their own reward?

No product or company deserves your passion. You can choose to throw your passion into anything you want, but no project inherently deserves it. ... What you are passionate for is something deeply personal, and it should flow from your most closely-held values.

I think ultimately, it’s just important to always remember that humans are not obligated to sacrifice their personal lives and happiness for the good of a company. Any job where you’re made to feel that, as a matter of course, your obligation as a person is first to the company, and then to yourself, is probably a job you should leave (or never apply in the first place).