What options are you taking into consideration when you’re making your career choices? What kind of company suits you best?
Should you go the seemingly easy way and start as a freelancer, hoping for larger profits in the short term? Or take the standard path from junior through to senior? What do these ranks even mean and what comes after them?
In my 13-year-long technical career, I've always searched for a good company. But what makes a good company good?
To answer these questions, give my next few posts a read. In them, I’ll try to cover some of the most important things to consider:
- Company focus: What type of work will your ideal company do?
- Company size: Is it a startup, a corporation or something in between? And how can you work your way up the company career ladders?
- Ownership: Will you be given the opportunity to take responsibility and initiative for your work?
- Beyond recruiting: Will HR support you all the way? What is the company culture?
For an inexperienced developer, it might seem like the most important question about the company is “what programming language or frontend library do you use?” or “are you using Scrum in your projects?”
But soon you’ll realize that in the mid to long term, these questions won't have much of an impact on your experience and career. Let's start with what really matters — first up, company focus.
What will you be working on?
There are several types of software development companies, differing in what they do on a daily basis.
For example, you can work in a product company. Product companies vary in the definition of the product they're making — this can be anything from a plug-in to a large SaaS.
When you work on a software product, you have to handle technical and process complexity. It helps that you will have the opportunity to work with other product-minded people and really dive deep into the technology that makes a product.
Diving deep will create opportunities for specialization, but introducing new technologies may be a greater challenge for a product company. Additional effort is required to introduce new technology when you’ve already invested a lot in the current one.
Also, the future of a product company is tied to the future of the product it's making, and that represents a higher degree of risk than you'd find in say, a service-based company.
It would be good to keep these things in mind when you're out hunting for your next place to work and don't hold back from asking the company what its product vision, strategy, and management is like, or how they keep up with the new technologies.
Next, there are custom development companies. These companies help other organizations with their projects, often by working with a wide range of technologies. Sometimes, these companies work with multiple clients in a specific business or technical domain or they may even work for a single client, at which point they're basically doing in-house development. For you, this means more breadth in terms of what kind of work you face every day. Each new project may represent the opportunity to try out new technology and get to know new business domains.
Project budget and deadlines may spark tradeoffs and compromises that you as an engineer won’t like. Also, the pressure to build things quickly and efficiently can sometimes result in a lot of unhandled technical debt and you may also find yourself multitasking between projects and dealing with old bug fixes and change requests.
To avoid this, look for companies with narrow specialization and strong domain expertise.
Also, ask about the frameworks currently in place because mandatory frameworks can help organizations ensure standardization and productivity across the projects. But it also brings a challenge of evolving frameworks in order to keep pace with technology trends and to keep it “appropriately lightweight”. You don’t want to work with an overengineered framework that became a burden for developers.
There are other businesses and organizational factors that can prevent mentioned tradeoffs from happening, and I’ll mention some of them in the following articles.
I've already mentioned in-house development companies which are basically in charge of supporting their business with internally-built software. Some in-house development teams became so good at what they do that they've expanded their services and commercialized them. Amazon AWS is a good example here.
Working in this type of company may be similar to product development from a technical perspective. Perhaps the biggest challenge you’ll face is achieving a shared understanding with the management on what the company's strategy is and how development fits into that strategy. If developers keep referring to the management as “them” who do not understand “us”, the developers, that's a clear sign that a lot of your energy will be spent on internal politics instead of doing the actual work.
Try asking your manager how do their projects help the organization to achieve its goals. Try to get them to talk about why their software is important and who their clients are. If they are working on an application supporting the sales process, their clients should be company clients, not sales itself. If that's the case, then you know that those teams are aligned on the strategy.
There are other types of software development companies, but I will mention one last example. Platform development, usually paired with business consulting.
I consider this to be a company working with existing software platforms and usually supporting specific business processes. For example, a company specialized in implementing and extending platforms like Salesforce, Customer Relationship Management (CRM), or SharePoint, Document Management System (DMS) or Enterprise Resource Planning (ERP) systems.
I found that in this type of company, the boundaries between roles are more blurry. You may be expected to wear a business analyst or consultant hat at times, in addition to having solid programming skills.
From a technical perspective, you need to acquire more platform-specific knowledge. You should have a deep understanding of the rich capabilities of the platform on the one side, and the customization options and limitations on the other. Development on the platform should always be considered as the last resort, and you should try to implement the business processes using configurable platform features.
When implementing features on the platform, clients’ business processes will most likely be affected and modified. This kind of situation will expose you to the consultant aspect of the job. Even if you have a dedicated platform consultant role in a team, you will still need to have a bit of a business mindset for a good collaboration with both the consultants and the clients.
I advise considering this type of company for long-term specialization if you enjoy optimizing business processes with highly evolved complex platforms.
When you consider this type of company, ask them how many roles they have in a team and how the onboarding process looks. These will give you an idea of how much support you can expect while following a steep platform learning curve.
Where do you see yourself the most?
I worked in all four types of companies mentioned above and for me, product companies have always been the most enjoyable and rewarding. Continually improving and scaling products, processes, and teams is where I feel most challenged and able to put my skills to work.
For example, here in Microblink, we have a dozen R&D teams working on only one of our products. They deal with everything from data preparation on our AI platform, machine learning development, platform-specific integration to UX design (you can check out what that looks like here).
Of course, every software development company is different and this article is only here to serve you as a starting point on your next journey.
With that said, where do you think you'd fit best? I'd love to know — feel free to shoot me a message with your thoughts.
Head of Core Solutions and Web Products