Within the software development industry, there are a wide range of technical career possibilities — frontend, backend, full-stack, user experience, security, performance, cloud infrastructure, networking, data, and so on (not to mention the array of different technical stacks within each of those). As software creators, we commonly consider the ability to use and develop skills in whichever of these areas are of interest to us, within our careers.
However, something that is potentially much more important, in terms of career but also for our own well-being, are the organisations that we work for. Especially early in our careers, we tend to go for the interesting technical opportunity and let the rest figure itself out. That's okay to a point, and a negative experience can also be a learning experience, but surely it's better to enjoy your work than to struggle through it despite despising it!
Considering the following aspects of past, current and potential employers can be very enlightening. I mostly wrote this as a mnemonic for myself, but hopefully it will also help you make good career choices.
This could also be described as "culture", but the culture comes from the people, so I prefer to focus there.
If I can go to work knowing I generally get on well with the other people, and everyone is happy and productive, then I am much more likely to enjoy my day than if I am trying to avoid certain people or situations, or just know that everyone is distressed or depressed. This might seem obvious, but the people you work with have a bigger impact on your experience at work than anything else:
If the work is difficult, good people will help you through it; if the people are difficult, the work isn't going to help
Different people will, of course, have a different degree of impact on you. Your direct manager is potentially the most important person, followed by your fellow team members and those who report to you. When you apply for a role, you will typically be interviewed by at least the immediate manager and possibly others in leadership and/or senior members of the team. This should give you a good gauge on things, but also try to meet the rest of the team, if you can, before accepting an offer.
# Organisational structures
Take a look at the company's org chart, and find where in that chart your role (or the role you are interested in) fits. How many levels are between that position and a C-level or similar position? This will tell you how "flat" the structure is, and flat structures are better for Getting Stuff Done™.
The actual size of the organisation will have an impact as well, because working for small businesses is very different from working for enterprise corporations. For example, small businesses will generally have fewer formal processes and less red tape than larger ones, but there are also fewer support structures in place.
A related consideration is flexibility. There might be a lot of rules and processes, but if these can be improved over time instead of being fixed and rigid, then maybe it's something you can work with.
It is important to balance these considerations. If your organisation is all Change Review Boards and Advisory Committees, it can be very frustrating; on the other hand, some structure and stability can be important, too. Know what your requirements are here and find something that fits.
# Advancement opportunities
Related to the organisational structure is the opportunity for advancement in the organisation. If the structure is very flat, then there is less ladder to climb; and obviously small companies afford less opportunity for advancement than large companies (but have other advantages due to a smaller and necessarily flatter structure).
The important question here is, are there future potential opportunities within the organisation, that suit the type of career path you want to create? Is it a company where the only advancement is through management (which might be what you want, and that is fine), or are there higher-level technical roles as well? If you don't want to be a manager, a Google search reveals plenty of prior discussion on this topic.
Of course, nobody stays with an organisation forever, so this might not be a make-or-break consideration. You might be happy with the type of role you are doing, in which case this might not be relevant.
# Organisational ethics
This is a big one for me. There are obviously extreme cases, but even within an organisation that isn't saving the whales or manufacturing chemical weapons, you should consider the types of decisions made and the types of things that are important to the company, through its policies, initiatives, announcements, etc.
The COVID-19 pandemic is a nice highlighter for this consideration. How has the company handled the situation? Are the employees well looked after, and informed, or is there general uncertainty or worse? It has been interesting to see how the situation has been handled by different companies, especially with respect to their people.
More generally, take a look at the company's leadership, whatever form that takes. Without generalising too much, looking at their backgrounds will tell you something about their priorities; do they align to your own? Obviously the more you know about them, the better you can judge this. If the company's leadership is a group, is it balanced, or are there clear tendencies (e.g. no women, or a lot with sales backgrounds)? Those that are balanced will tend to have a more balanced and neutral approach to potentially political or ethical issues.
# Work flexibility
This is another important one for me personally. Can you decide your own hours where possible, and work from home when you need to?
Obviously everyone has meetings to attend and certain activities that work so much better with face-to-face communication, or at least remote synchronous (video call), but does the organisation understand that you don't need to be sitting at the office to write code? This is something that we in the software industry do well, for obvious and ineherent reasons, but still, some organisations do it better than others.
This is definitely a two-way street, though. If you want to demand flexibility from your employer, I think it makes sense to be flexible the other way when you can.
If you are going to work from home, how is that facilitated? Do you have decent remote communication tools? It's all well and good claiming to support remote work, but this has to be backed up with the right technology for it to work.
Does the organisation cater for your technology preferences, e.g. Linux vs Mac vs Windows, or are you forced onto a specific platform? Do you have flexibility in choosing your own primary device, or are they company-issued? This is worth considering because you use that device all day, so any friction it creates will affect you a lot.
These things will be more important to some than to others, and sometimes the organisation will be less flexible, but their preferences will align with yours, which is okay, but flexibility is better.
# Office space
Finally, where will you be working (when you're not working from home)? Is the office easy to get to? Is there public transport or parking for your vehicle (I ride a motorbike and surprisingly it can be hard to find parking in my city because bikes must park in dedicated bays).
Does the office have a layout that is conducive to both productive work and communication of ideas? Is it cubicles, or a big ol' open-plan, or is it more of an activity-based arrangement? Do you like the interior design, or is it like something out of a 1960s cop show?
Is the office a space that you could actually see yourself working in? A lot of this will come back to the first point, because great people will override the drabbest of offices, but on the other hand, it's hard to work because the open-plan office is shared with a call centre... Or a jockey training facility (true story — although, to be fair, it was a short term solution).
When you look back on past roles and employment scenarios, I am sure you have an idea about how you rate those employers in all of the above areas. You will know when you worked with people that you really clicked with, or the times when the company really looked after (or failed to look after) its people, whether or not you can even remember if you were writing Java or PHP at the time.
Obviously, no employer will be perfect, but the good ones will be making efforts to improve in all of the above areas, just as I'm sure they seek to increase their bottom line.
Best of luck with your career, wherever it takes you!