Different flavors of work environments for software developers— Startup vs. Corporate vs. Consulting vs. Freelancing
When I was studying, there was a lot of hate for corporate work environments. I would hear over and over again from my TA’s how soul sucking these jobs were and that I should avoid them at all costs. Startups though, were considered the right way to go and I heard multiple times that I just need to accept that I’ll be underpaid and work way more than 40 hrs. And I was told this was normal.
And while the above perspective might be true, that’s only part of the story. What I learned from working in a corporate environment, a consulting company and a successful startup is that every one of those environments has its advantages and disadvantages. Whether you’re early in your career or just looking for a change, the following comparison will help you see the bigger picture. Which of the 4 different flavors of work environments for software developers are you interested in?
I bet you’ve seen multiple memes mocking corporate environments. Here’s the flip side of the story: the size of the company and becoming what most of us perceive as a ”corporate work environment” are symbols of success, a symbol of ”making it”. All businesses start from being small. And it’s due to success in selling products or services that they grow to their current size. Corporations have money to invest in their software developers, higher salaries, and training.
When I started working at NOKIA, the first thing I had to go through was a 2 week long training program, on TDD and Clean Code, followed by a workshop with a training company on SOLID principles. They invested $$$ right after hiring me, before ever putting me to work. No startup would do that.
Moreover, since there were about 200 developers working on the codebase, it was much easier to find mentors and people willing to explain their approach towards coding. For the programming newbie that I was at the time, this was the perfect opportunity for me to learn and grow in an accelerated manner.
Watching how other programmers did their jobs was beneficial for my growth, but I also learned about Agile and a methodical approach to writing software. Instead of thinking, “oh, I need this feature, how about I implement it and then let the end user verify my assumptions,” I learned that having a process helps developers be thoughtful about implementing the actual product and in the long run, the processes help us in focusing more on writing new features rather than focus on fixing bugs and putting out wildfires.
Something I found very cool was the impact of the code I wrote. Working for a really large company, when your code gets deployed it goes out on a scale and very likely touches millions of people. With scale there’s also much more edge cases you need to take into account while creating code.
With scale comes structure — corporate environments, are very structured. Your role and career ladder are well defined, so it is very unlikely that you’ll get any responsibilities that are outside of your job description. Your role is more rigid as well as the amount of PTO days you can take in a year and there’s not much wiggle room.
So while it’s easier to get paid more at the very beginning, advancing in a corporate environment seems to take more time, since there’s more steps to take. And because things naturally take more time in a corporate environment, you might get so comfortable that it will become very hard to switch to a different work environment.
Startups are the hot trend right now. They symbolize the beginning of a business and for developers they offer many interesting challenges: one is timing — trying to build products as fast as possible in order to meet market needs. To meet those market needs really fast, as a developer you might need to cut corners or put out fires on a daily basis. The pressure of going to market is really high and gives little time and opportunity for a thoughtful process, so new code might be hacky and not well thought out.
Depending on the size of the startup — there might be not that many other developers to collaborate with — which is manageable once you’re good at programming, but is really hard if you’re starting out, since there’s no opportunity for mentorship and you’ll have to learn as you go, while solving problems.
Working in a startup, you’ll very likely get responsibilities assigned to you that are outside of your job description. You need to not only be good in writing code, you need to understand business needs and requirements of the company’s clients. And it can be fun to learn what it means to be a BA, a Product Owner, a Team Lead, UX Designer, QA and a Developer all at once! You get to work different roles and wear different hats so it might be great, if you’re interested in being able to explore different sides of the software business.
My friend perfectly summarized working in early days of a startup:
So much of start-up life is creating your own to-do lists (what will you work on today, for how long, how will you know if you succeeded, how will you test it, when do you know when you’re “done”?). It is not a job for someone that needs constant direction, because you just won’t get that at a startup. You need to be hungry and you really do need to be entrepreneurial to pull it off — your little corner of the office is like your own company: you have to make every decision and stand by it (willing even to get fired for it). That either excites you or terrifies you and if you’re in the latter group, a startup is not for you.
— Kristin G.
Startups are fantastic for massive personal growth, and it’s much easier to grow and get elevated as the company grows. Developer to Director of Product in 2 years?; definitely a possibility. However, that was for sure one heck of a developer, who rose through the ranks like that. If you ask me, I would not recommend folks that are fresh out of school to try and join a 20-person startup, if they plan to really hone their programming skills. With so few developers, it’s hard to get guidance and reaffirm the level of one’s skill — and our coding skills are only as good as other people think they are, so it is crucial to have mentorship in the early stages of a career, which is difficult to get at a small company.
Also startups are focused on “making it” first so don’t expect to be able to get financing for training or conferences. If the business is not bringing in revenue yet, don’t expect any budget for going to conferences or getting trained.
Startups are great, especially for seasoned software developers.
While startups and corporate companies own the product that developers work on, the consulting companies and freelancing developers do not own the products they create — their clients do, and so consulting is much more oriented on providing a temporary advice/fix/implementation to the current needs of a client.
The main goal of working in consulting is to understand your clients’ needs and produce quality results using technology stacks, that you might not be an expert in. It’s a more dynamic environment as you wrap up working for one client and start working for another. It can be both exciting and challenging. What I personally liked a lot when working for a consulting company was the turnover rate and being able to work with different clients and see different needs in the market as opposed to working in a more traditional dev job where you’re assigned to a team and just stick with a line of a product.
Another thing you’ll notice when being a consultant is that everybody’s codebases are messy to some extent and not well maintained.
There’s not much time for mentoring, unless you can work with your mentor on the same codebase since the objective is delivering what was promised on time. Because you are fulfilling a contract and working on someone else’s product, as a developer you’ll have to keep track of time it took you to develop code as you will likely be billing clients by the hour. Hourly billing means that there’s also no budget for just going to conferences, since your consulting clients don’t care if you keep up with the newest knowledge; they just want you to fulfill the task; ideally in a way that won’t take you a lot of hours and hence will be the least expensive way possible. If you still decide to go to conferences or to improve your skillset that will all need to happen outside of work hours because most companies won’t see that as an immediate increase in revenue, despite the fact that it will improve your quality/speed of work in the long run. Unless, you are applying to be a speaker at a conference, which might be seen as a marketing/recruiting event, which is valued by consulting companies and in that case, might be paid for.
In freelancing you just wear all the hats: marketing, managing, planning, developing, client communications. You are doing it all on your own and because you are your own boss and make your own schedules, you can definitely make a life that is 6 months working on a project and then 6 months traveling the world.
If you want to travel the world and go places my only recommendation is to either work or travel, don’t try to do both at the same time, because you’ll half ass both and stress yourself out in the process. In my 4 month travels across Asia I’ve met a couple of software developers that were trying to pull it off. One in particular that I met in a hostel in Vietnam had the following setup: He was freelancing for a startup in Berlin and worked “only” 3 days a week. Initially he was planning to work super hard for the 3 days and then travel for the remaining 4. But he told me he was not able to mentally unplug and if something at work came up on the 3rd day as he was about to take off he would stay as long as he needed making sure that the problem was resolved and, because things would come up rather often, he was not able to plan the 4 day travels as he intended. As a result he wasn’t able to really do his best work and he wasn’t enjoying the travels anymore, as he told me ashing his cigarette.
Another thing to keep in mind, if you are freelancing, because you are on your own and there’s no second pair of eyes to look at your code in a code review, you become the ceiling for your skills, because the code we write is only as good as other people think it is, and it’s hard to learn new perspective on ways of writing code if the only perspective on the table is yours.
Which one to pick?
Personally, having worked in 3 out of 4 working environments I would say, I’m glad I jumped around and got to see it with my very own eyes and experience it all first hand. My career path was corporate, through consulting, to a startup. I only stayed in the corporate environment for a short while — long enough to get the benefits of great mentorship and training, but not long enough for the comfort of the job to work towards my detriment.
At the consulting gig I worked with many different clients and was able to witness how every company’s codebase is messed up in its own small way. It’s also where I realized that being great at writing code doesn’t make a great software developer — communication skills and being able to understand clients’ needs and translate business requirements into code are necessary to make any developer a sought after professional.
As I’m writing this article, I’m still in that successful startup that grew from 50 to almost 300 employees and now has the budget to pay a decent salary and invest in continuously educating their software developers. Additionally to that the company is stabilizing, introducing more structure and benefits (that exist in more corporate environments), and with its current size I get to not only mentor other developers, but also have great developers to collaborate with and so I’m not gonna lie… I’m in my sweet spot.
When choosing a path for yourself take into account your goals, personality, and lifestyle you want to lead. And remember that it’s OK to change your mind along the way and want to do something different.
The goal of this article is to highlight the differences between different working environments, and how to get the most out of working in that particular environment, it’s good to know what’s the choice you have, but it’s also good to recognize, that as you grow, your preferences might change and it’s OK.
Work with me!
If you feel like having a hard time deciding what your NEXT adventure should be, let’s hop on a call and see how a tough-love career coach like me, could help an awesome developer like you, make the best and most strategical move for your career: www.themindfuldev.com/get-in-touch .