I'd recommend anyone looking for their first job out of university to consider strongly a job at a startup. Consider it a 'finishing school', where you'll have the highest chance to touch as many different technologies and tasks as possible (from system administration, to backend to frontend work), as opposed to the 'Big Company' where (especially for a first job) you'll be focused on one task.
The important thing is to leave after one year, no matter the compensation you are getting. Teams have a tendency to give the shittiest work to the most junior member, and there's very little inertia to replace that person if they are doing a stellar job at that shit work, but once you leave that startup with bankable experience under your belt, you'll have a much easier time interviewing and negotiating yourself a cushier position at either another startup or a big company.
Most big companies have a much better career 'ladder', where you'll be on a path to more interesting work once you've proven your worth, but I suspect you'd still be in a better position coming into the company one or two years in, rather than starting the treadmill at a lower salary/title.
Everyone is either saying go to a big corp or go to a startup as your first job.
What I usually tell new grads is: Get offers from both, and take the job that has the best potential person or people that you'll be able to learn from. There are a bunch of ways you can research this. Try asking people on the team to tell you who they've learned the most from in their career.
Do not take a job where you'll be a lone wolf. As a new grad your goal should be to find great people to work with and learn from them.
If you want to have a balanced career you should try both big corps and startups, but ordering doesn't matter.
Good point. Fresh out of school I went to a tiny company of under 10 people. I had a great time and I was really impressed with the skills of the people I worked with.
But within 18 months or so it became obvious that I had by far the most theoretical knowledge of anyone there and a lot of their approach was guesswork. In two years, I began to realize I was just as good an engineer as any of them, just inexperienced.
I should probably have left after year three when the fun-factor was in sharp decline, but I stayed 5 more years, then took a job at at $BIGCO where my salary almost doubled instantly and projects were much, much bigger and infinitely more fun.
^^ Great advice. I had a college student ask me for input on this very question this morning and my response was not to stress too much about finding "the best, most ultimate company ever to work for," but to find a position where you can learn a lot and develop skills you know you need from people willing to invest time in you. (As an aside, something like 70% of people say the most stressful part of their job is their boss. So if there are ways to screen for working with someone who is willing to take the time to cultivate you, amazing.) I think it's tough, especially for the generation of students graduating from college right now (millennials coached to believe they need to have a HUGE impact wherever they go and to believe that their contributions are insanely important), to understand that a first job is just a first step and is not career-defining, in my opinion. You can work somewhere, get some good experience, and then leverage that to get a job you're really excited about.
I went about it the opposite way, and can definitely recommend that as well: big company first, then small. The big company experience shows you a ton of things, like how to interview, build, and deploy at scale. The small company can benefit from your ability to bring order to chaos, develop tools which are obvious in any big company but strangely missing from every small one, and more.
Maybe it doesn't matter which one you start with, but you should give both a try at some point.
This sounds great when you envision that big company as Amazon, Google, Microsoft or Facebook. It sounds less so when you envision that company as Oracle, eBay, Yahoo! or SAP. Some large companies are mostly going to teach you politics, byzantine process and spending money as a means of scaling bad software.
It's important to differentiate skills learned at big companies. Some are very useful, but others are coping mechanisms that have no place in a startup. Meanwhile, the scrappiness and well-rounded skill set learned at a startup will almost always have a place in larger businesses.
My own personal recommendation for early career workers would be to prefer the cream-of-the-crop mid and large companies where you'll get useful experience you can't find anywhere else, then prefer startups and leave the slower-moving and more dysfunctional larger companies as a last resort.
yes. which big company matters so much. i find it frustrating when my hacker school friends deride big companies as having no interesting work being done or not being great places to work. Having worked at startups and two different big corporations, I've learned the most at the very large company I work at now, almost nothing at the first one I did and a mixed bag at startups.
Heck, even well known boring big companies (eg IBM, Oracle) have great smaller teams that are doing interesting things. Much of it is a crapshoot. The nice benefit of the smaller company is that you have much higher likelihood of seeing your code go into production, and experiencing the feedback from it being used. At a big company you will get shielded from that. Often for good reasons - but the feedback truly helps your career.
Dont't knock spending money to scale. The most important lesson I learned at BigCorp was when to buy vs build. Not Invented Here syndrome will kill even mega companies.
Agreed. Large companies have entire programs for the intake of new graduates. At a startup you're much more likely to be left to find your own way - which can be great, but can also be awful.
What I like about "big before small" is that while you can't replicate what the big company does, you can selectively adopt certain "big company lessons, tools, processes" at a startup. At a big company, you also may gain a view into how scale works to understand where your changes at a startup will have the most bang for your buck.
Agreed - I actually worked at a big 4 consulting firm - and it made me considerably more disciplined, and structured over my peers. I can solve problems more clearly, succinctly, and focus on critical path which comes from pressured client work.
I think it really depends on the kind of person you are. If you're seeking fast pace and get bored easily, a startup is the right place to be. Otherwise, if you're like me, you can lead a pretty satisfying career in a large company. For some reason I was conditioned in college into believing that the startup mentality was the only respectable way to go, and any time spent at a big company should be a temporary.
I can also recommend this. The big company has a good starter program and lots of resources to learn and draw inspiration from. Also you get to touch such massive amounts of code and technologies. Of course it depends on the company, yet I think it will benefit you to switch job after a year.
It's kind of difficult to have start-ups hire juniors because they desperately need people to be productive and so I'd caution that start-ups that accept junior coders straight out of school may not be the kind of start-ups that give the kind of experience that's desirable even for a year.
Instead of recommending what people should go after college for their first job, I'll recommend what people should not do:
1. Work for a consulting / contracting company that has companies people don't like to work directly for. This is probably the worst arrangement of bureaucracy possible because you have the maximum possible layers of management overhead combined with business incentives to keep your compensation and impact upon the business as little as possible. Working for a web development shop that has big customers doesn't count here IMO because your work as an engineer is largely unchanged regardless of your customer paying you $2000 or $200k.
2. Work in corporate IT. These are high-turnover positions for many reasons. It seems like there's a lot of money in it, but it's mostly going to those that sell software to these places. People are miserable enough in F500 companies as it is, this is probably among the worst places for combination of stress, pay, and career mobility.
3. Work in a non-software company. A company whose business doesn't take its software seriously invariably treats its software and IT resources as cost centers meant to get maximum cost savings for as little money as possible via opex reduction and will, ironically, likely fail to make bigger expenditures required to keep costs (and really, wasting time) lower.
Being around non-motivated people in a demoralized environment is a great way to kill any starting career and learning what the signs of these organizational attributes are have important for avoiding really bad career moves.
>> Work in a non-software company. A company whose business doesn't take its software seriously invariably treats its software and IT resources as cost centers meant to get maximum cost savings for as little money as possible via opex reduction and will, ironically, likely fail to make bigger expenditures required to keep costs (and really, wasting time) lower.
To expand on this, there are some companies that seem like non-software companies, yet still treat software as a competitive advantage rather than a cost center. I worked for a big bank that did their best to stay six months to a year ahead of other banks on technology. The marketing folks were constantly coming to us and saying, "Give us cool features that we can sell." It was a fun place to work.
I also worked for an insurance company that viewed technology as a necessary evil that should be as cheap as possible. The marketing folks there were constantly complaining about how much time and money the company was wasting on technology. (Curiously, they also complained that the company's technology offerings were hopelessly far behind its competitors.) It was a miserable experience.
If you're looking for a job, ask questions about management support and budget priorities. If they're evasive or they say things like, "we're proud of how far we stretch our investment," it's not a good place to work. You can also ask how the company compares technically to its competitors. If they're evasive or talk about how they're trying to catch up, that's a bad sign, too.
The more correct rule is that you should try to find companies that have closely aligned business and technology objectives (which I haven't found outside of finance and the usual SV companies in the F500), but I have my doubts even that is the case because I'm working for a large organization that meets this criteria and I'd never think of advising a young, ambitious recent graduate to even reply to a recruiter for this place given the horrifically bad budget situation. Just because business leaders want something and try in earnest to plan for it doesn't mean much if they don't have the resources and momentum to execute.
A good example of what I mean are large, innovation-less companies with "start-up in a large company" efforts to bring themselves some relevance that almost always become the worst of large company inertia / legacy with the fiscal and market position disadvantages of start-ups. I've been through at least 4 of these efforts with varying degrees of "success." And while they're a large part of my career and I want to believe it can happen, I have no evidence of this working out well and am convinced it's a rather high risk to take with disproportionate upside.
I have an offer to do data science work for a large, public insurer. I will work inside an "innovation lab", and was promised lots of freedom and authority during the interview process. They say they want the "innovation labs" to run like startups, trying out new products and ideas at a fast clip.
Do you have any thoughts about what the general environment will be like, and is there any chance the place will be mired in bureaucracy? I'm relatively early in my career as well, and have never worked for a Big Co before.
I'd love to get in touch with you, but you don't have contact info in your profile. I'll be grateful if you can drop me a line - mailshanx at yahoo dot co dot in
It's hard to tell without context but I don't recommend most big company jobs that are not working on things that are high risk and high reward for recent graduates normally. There's a lot of questions to be asked about what the objectives of the project are, executive backing, and (most importantly) how strong the funding is to demonstrate the worth. As an example, my customer has made huge investments in attempts to hire developers while skimping tremendously on dependent efforts that would remove barriers for those developers to the extent that most developers are doing 9-5 jobs and unable to accomplish a lot while a lot of the infrastructure teams are working 12+ hour days working on very much solved problems from decades ago that only exist due to lack of respect and understanding of basic automation principles required to scale software companies of any sort. Everyone wants to work on modern, relevant problems - make sure that people are specific about their current barriers as being technical rather than organizational as a prospective employee.
Look for a deep culture of respected and accomplished leaders in software up and down the hierarchy. If nobody in a position of authority has delivered software successfully before that you can recognize as an engineer, pass because culture and experience among executives is massively important and their priorities should focus on long term growth (Amazon was ridiculed by enterprise vendors while I screamed that they will eat their business in a decade - they don't care because they'll go somewhere else while I have to deal with the very expensive consequences of bad software). There are too many great companies around today to waste time on mediocre companies - it is better to be jobless for months or years waiting for a great company to accept you for your talents than to waste some of the best years on companies where your best efforts will result in second rate winnings. It's a huge risk to work for mediocre companies that will not put the work you will have to put in themselves.
My e-mail is djk29a on Google's e-mail service. Not sure how the first part of your e-mail works out and I'm several days late so hopefully this is relevant advice.
If you take a startup job out of school, make sure that they embrace pair programming. Work for a Pivotal Labs. Work for an Andres Camacho. Work for a Chad Fowler. Or an Ernie Miller.
Find the leaders that understand all programmers need training (especially around process and coding standards). Sell that on your passion and that you want to become good _quickly_.
Pivotal is pretty awesome, definitely on my list of "seems cool, bro" companies. A lot of the criticisms I've heard hardly are a concern for me because everything I've known is that they're so busy coding they're hardly able to mess around taking submissions from others outside the company.
And to be a little cheeky, Pivotal (compared to Pivotal Labs, not the same but still) is nowhere near a "start-up" company by most definitions. They're planning for an IPO and are pulling in many millions in revenue like Cloudera and HortonWorks, it's hardly possible to keep these plans from being kept under wraps.
Pair programming is not for everyone. More generally, you want to be somewhere you can learn from senior folk. Pair programming and high quality code reviews are both great for this, and will appeal to different people.
I'd recommend anyone looking for their first job out of university to consider strongly a job at a supercorp. Starting a start up will be much easier with a network of professionals, a pile of personal savings, and it is way easier to go from supercorp to startup than vice versa.
I recommend getting into a small company (i.e. 80-200 employees and profitable), if possible. At this size, you have opportunities to wear different hats and moving sideways, but you also get opportunities to see and participate in workforce scaling (helping form new processes, seeing new departments emerge, etc).
The important thing is to be vocal about what you want to do. If you came in as a frontend dev want to do more about backend work, go find gossip about new projects and express your areas of interest to higher ups. If you want manage people, offer to improve the technical hiring test. If something is stupid (maybe there's burnout due to too much overtime, or a process is over-bureaucratic, or some aspect of development is too cowboy), be proactive and offer solutions.
The unique thing about small companies is that there are enough people that narrowmindedness and complacency start to appear (and with it, process problems), which gives you plenty of opportunities to prove yourself with out-of-the-box thinking, but not enough bureaucracy to prevent you from being able to make changes.
This was my experience and it has worked out really well for me. I've seen a few levels of scale (~120 people to start, ~1500 now), have worked in several different departments and touched nearly every area of the business. Incredible learning opportunities and ability to drive real change/results (which is a main argument for startups) while also having advantages of larger companies in terms of resources, training, pay etc.
I totally agree. This is the path I have taken and I do not look back.
I rebuilt the recruiting process at my first IT-company after college.
Now I started my own IT-recruiting agency in Zurich. If you look for a tech-job in the most liveable city in the world, check out my story "8 reasons why I moved to Switzerland to work in IT" on http://medium.com/@iwaninzurich/eight-reasons-why-i-moved-to... or send me a mail to the mail-address in my HN-profile.
I believe the inverse, I think most kids out of school should start at a (good) large company, they have the resources and framework to provide all kinds of career training you'd never get from startups or small companies. Mentors, leadership training, technical skills training, much bigger budgets, and a smaller group of tasks that someone is expected to perform. The pace is likely more deliberate, if not even boring, and that is good. As a newcomer you'll get a front row seat into what processes really work (code reviews, source control [yes, I still run into old/new people who don't use/believe in it], documentation, etc.) and you will be able to see how not having them can be detrimental in the future.
Starting off in a startup will lead to little support and a cowboy attitude, what the world needs more of is people who know when to cowboy, and cowboy with purpose rather than using 'just get shit done' as an excuse for a lack of standards and quality.
Also, this has been MY career experience to this date. As I now run my own tech companies and have been hiring technical people for the last 7 years, I have anecdotally found this to hold true. The early to mid-career types that have only ever been at tiny companies or startups are really good at having a breadth of experience and an ability to move fast. The spent all my career with big company types have usually been pretty deep at something (a language, framework, tech niche) and are very used to processes. They're typically slower and have a need to encumber small things with bloat (process, tech, etc). Marrying these people together on a team has yielded me fantastic results in nearly every case. The big enterprise people feel like they've been released from a cage, and the scrappy startup types seem a little less feral, while providing an infectious get shit done attitude.
I've been trying to leave my small company for a mid-sized startup in NYC (currently in NJ). Started just before my year mark. Almost every startup wanted someone with more experience under their belt. Of the few that were willing to take on someone with one year, I was still in competition with others who had much more experience. I got the same line over and over again - "strong technically, passionate, good fundamentals, but we need someone more experienced". So I waited a few months and tried again. It's gone a lot better so far (no offers yet) but I've had to shift my image from that of a young up-and-comer to one who knows how to Get Stuff Done. I stopped asking about mentorship opportunities. I still really want to work at a startup but I need a new job ASAP - I don't think I'll be attractive to them for a few more months at least.
I agree, but a year's a bit tight. You may want to give yourself an option of another 6-12 months, if your job is still rotating through things and changing enough that you're not pigeonholed yet. I'm not sure I could put into words why, but I'd look much more favorably on two years rather than one if I was looking at your future resume.
Flip side, I'd also add an option at months three and six to ask myself whether I should just get out now and basically just not put it on my resume in the future. Interesting tech is interesting, but if the startup has pathological personnel or psychological problems, a year may be too long. I would suggest sticking out anything other than outright abuse for at least 3 months, though, since you do want to account for the fact that, ahem, a real job is not school and there are certain different expectations, regardless of where you work.
> another 6-12 months, if your job is still rotating through things and changing enough that you're not pigeonholed yet
This reads as if you're advocating against ever becoming an expert in anything. A few months is nothing--if the domain is difficult you're barely up to speed.
In the context we're discussing, we're explicitly taking a job to sample many things.
Given the recent specialization in programming (web backend v. frontend, "mobile", devops, etc.), which is a continuing trend from previous decades, this seems sensible. I advocate for a T shape in skills, but before you pick what you go deep in, get somewhat established in the wide. Fresh out of school you just can't have the width yet to know what you want to and should go deep in yet, not even if you've had a job the whole time.
Actually, I suppose I ought to raise that up as my true point: Go a bit wide before you select what to go deep in. Try not to just float into something without thought. Width should emphasize learning things that have demonstrated staying power, but you want to go deep on something that you expect has future power. It probably shouldn't be the current hottest fad tech, but the current hottest fad tech is probably at least in the area of a good future choice; it's more interesting why the current fad is a fad than the specific fad. If you do go for something that became super hot in the last 6 months to a year, try to figure out how to leverage that into learning about fundamentals even so. There's ways at both big companies and startups to succeed and fail by this metric.
Of course, on the flip side, you don't have to get it perfectly correct. You can't go deep in everything all the time, but "pi-shaped" Π is feasible in addition to T-shaped too. (That's capital pi, for those who may not have seen it before.)
Well remember, the pigeonholed part is in terms of the crap work.
And I would say that in your first several years, you really don't want to be an "expert" in anything, cause you likely haven't had exposure to enough different things.
Alternative view: large corps often have graduate programs that will cycle you through various parts of the business (Cap Gem's is particularly good, IMO), and make a great platform for figuring out what you want to do next.
Yes, my sister did this -- she was a bright college grad and went through an associate program. Gave her a ton of exposure and helped her then find her niche and accelerate quickly. Let's be honest, know one in college knows what the ins and outs of "marketing" or "customer success" or "operations" looks like; my sister was surprised to find herself really interested in the niche field of fraud for a big travel booking company, and now she's able to parlay that expertise to get a higher salary and better job title elsewhere.
I recommend opposite as well but look for things like Leadership Development Programs in JPMC,WF,CITI etc... you get well rounded experience in 2/3 years and then you can decide to stick around or move.. Or work in big company and contribute to open source. There is lot to learn with big companies and if you can solve their problem you can solve small company problems as well but all small companies will get tired and have to behave like big corp to continue.. start up momentum is not sustainable beyond 3/4 years. Once you hit about 15000 people then you start having all kind of issues so better know how to manage that or seeing that will give you idea how to segment your company.
When you graduate from school with debt and no savings it is a good idea to maximize your initial salary. You can live on ~70% of it while building yourself a financial cushion for a while. Then, if you want to go to a startup later, you are in a better position to handle the risk of its failure and already used to spending less money. (Or you can stay with big companies and get a nice lifestyle boost after your emergency fund is established.)
The important thing is to leave after one year, no matter the compensation you are getting. Teams have a tendency to give the shittiest work to the most junior member, and there's very little inertia to replace that person if they are doing a stellar job at that shit work, but once you leave that startup with bankable experience under your belt, you'll have a much easier time interviewing and negotiating yourself a cushier position at either another startup or a big company.
Most big companies have a much better career 'ladder', where you'll be on a path to more interesting work once you've proven your worth, but I suspect you'd still be in a better position coming into the company one or two years in, rather than starting the treadmill at a lower salary/title.