Josh Kodroff, Code Craftsman

Writings on software development

The Josh Test – a Sorta-Objective Way to Analyze New Opportunities

I find myself in the incredibly fortunate position of having a skill set that is greatly in demand. I get calls and emails on a near-daily basis from recruiters for all types of jobs. (If you don’t think that having recruiters contact you on a daily basis is a good problem to have, I would advise you to consider the employment circumstances of anyone else who is not a medical or IT professional, i.e. the other 99.999% of the world.) While there’s a lot to like about my current position, it would be foolish to be closed to new opportunities if the right one comes up. But how do I now what “the right opportunity” looks like? My answer: The Josh Test.

In August of 2000, software blogging Godfather Joel Spolsky posted a simple and quick 12-point checklist to see if an organization is doing good development work. The points have become a little outdated with time, but it still remains a good yardstick to measure a software organization. I wanted to iterate on this concept so that I could devise a test for potential opportunities that I might come across.

What I came up with was a list of what I consider the key dimensions software job. Each dimension can be scored on a scale of 1 to X. X is higher for more important things, lower for less important things. Figuring out whether a position you’re considering is a significant upgrade is simple: run the test for your current position, run the test for the potential position and compare the totals.

Side note: unless there’s a big positive difference, I might advise staying put. “Grass is greener” and whatnot.

In addition, I’ve compiled a list of deal-breakers so that I know what positions are automatically out of consideration. It’s good to know what your personal boundaries are and to stick to them.

If you’re doing your own Josh Test (in which case it should be called the [Your name here] Test), adjust the point scales to your values: e.g. Maybe you don’t care about an office environment at all, but you need more money because you’ve got high-interest debt. In addition, it’s important that your renew your [Your name here] Test as your priorities change.

And without further ado, I present the Josh Test v1.0:

Location: 7 point scale

I live in Philadelphia and I really like this city. My family and friends live here, I’m in a band, and so moving to another town (especially one where I don’t know anyone) would involve restarting my whole social life. That said, I’m open to positions in other locations that have the things that I value in my life outside of work: a vibrant arts and music scene, public parks, good public transit and bikeability, existing friends in town, and affordable living.

What would my commute to work be like? My current commute is perfect – a mile away, easily reached by bike, or on foot. If the weather is crappy, I can work from home or drive in and park for $7. On the other hand, I’ve worked a position where my commute was over an hour each way in traffic to a town I wanted nothing to do with once the workday was done and it was a miserable experience. Being easily reachable by public transit is another plus.

Compensation: 7 point scale

Is your pay comparable with the market rates? How about vacation? How about other perks?

Side note: I highly recommend the Kalzumeus Blog’s entry on Salary Negotiation.

Office Environment: 5 point scale

My ideal office environment is clean, beautiful, has quiet places, and is conducive to collaboration and productivity. I find myself inspired to come to work and do my best when it’s obvious that the folks in charge have put effort into making a place that’s pleasant to spend a lot of time in.

I want to work on equipment (monitors, machines, software, etc) that are top notch because they are enjoyable to use and keep me productive. Considering the cost of developers vs. the cost of equipment, it’s always been a no-brainer to me that if you value your people you should get them whatever equipment they want within reason.

I want office furniture that’s sturdy and reasonably ergonomic. Forcing your employees to work with crappy desks or buying the cheapest possible chair at Ikea shows a disregard for your employees’ health and happiness.

I find collaboration makes for more productivity and happiness. Is it easy to collaborate with my coworkers? Do you have the software (e.g. HipChat, Confluence, BaseCamp, etc.) and physical tools (shared spaces, whiteboards) that facilitate collaboration and openness?

If I need to concentrate because I need to think over some complicated technical task, is there a place for that? If I need to take a personal call during work hours (hey, it happens to us all sometimes) is there a place for that?

Confidence in the product/company: 8 point scale

If you make a product, is it one that I would choose, compared to the competition? Is its quality something I would be proud to show my friends? Does it deliver good value to the users?

As stated below, any product or client that does societal harm is out of the running, but do you do work for the common good? Do you serve public education? Non-profits committed to social good? Are you a university? A public institution? Knowing the work I do makes a key difference in someone’s well-being (and not just their bottom line) makes coming to work feel more meaningful.

The company matters too. Do I feel confident that the company will remain or become profitable? Do I feel that management knows what they’re doing in terms of the direction of the company? Is there a low attrition rate? You probably don’t want to be on a sinking ship, much less get on one voluntarily.

My team/immediate coworkers: 10 point scale

I’ve worked on teams where I could not trust my team members to do their work correctly and it sucked. I’ve also worked on teams where my trust was well-placed and it was great. If you’re up for positions of leadership, do your best to ensure that it’s the latter, but if it’s the former get an assurance from management that you can make the necessary personnel changes in due time, or get the expectations sufficiently lowered.

Are there people who are willing and able to mentor me in the technical and interpersonal skills I want to develop? Are there people who are willing and able to be mentored by me? I’ve learned as much from teaching as being taught and enjoy both.

The work: 10 point scale

Are you using technologies that I’m interested in? What are my prospects to improve and expand my skill set? In this business, if you’re not learning for an extended period of time you’re probably doing your career harm. Not irreparable harm, but you definitely don’t want to get too far behind.

Do you have career mentoring? Whatever your craft is, it’s a lot easier to master it with an experienced and trustworthy teacher. The same goes for developing interpersonal skills, which are at least as important. Likewise, I want to be supported by the organization in teaching my less experienced coworkers what I know and help them achieve their own career goals.

If my capabilities outgrow my responsibilities, are you going to be able to let me do for the organization what I’m most qualified to do? If my interests were to change, are you going to be able to give me work that is in line with those interests and the needs of the company?

Is the current quality of your code good (in the sense that it works well and has a low bug count)?

My Automatic Deal Breakers (YMMV)

These things make it easy to rule out potential positions:

  • Products or clients that cause serious environmental or societal harm. For example, I have a personal precept that I will not do business with weapons manufacturers or major polluters. If you have similar rules (whatever they may be), make sure you stick by them. No job is worth violating a value you hold dearly.
  • Any indication of unscrupulous behavior. I can’t work with you if I can’t trust you to deal with me (or your clients) in good faith.
  • Positions in areas in which I don’t want to live. There’s no amount of money that’s worth it to move to an area where I won’t have the life I want outside of work.
  • Extensive use of technologies I intensely dislike working with with no mandate to change them soon. For example, I’m not willing to go back to editing stored procedures or dealing with WebForms markup all day if I’ve got better options. It also makes it hard to recruit good developers to be on your team.
  • Commute time longer than 45 minutes from someplace I would like to live. I’ve done it before and it wasn’t fun.

Conclusion

The point values may change every few months. Maybe I visited Topeka, Kansas on vacation and I’m not so attached to the The City of Brotherly Love, so location doesn’t matter so much. (Hey, it could happen…) The Josh Test is just a rule of thumb (never let it overrule your intuition), but hopefully you can adapt it to your own situation and just maybe it’ll help you discover a great opportunity!