
“This week marks the beginning of my 4th year at Facebook” - patangay
https://www.facebook.com/ry/posts/10151494199879822
======
dave_sid
It's funny how people are so interested in the development practices of
Facebook as if that's how it should be done.

It's a bit like the halo effect, where if the company does one thing right
(get lucky and dominate the market by being first), then everything else they
do must be right too.

If you ask me, they could take what ever approach to development, hiring,
training and firing they like and they'd just be as successful.

But, none of that stuff is what made them successful. Therefore, I'm actually
not that interested.

------
anonymous592053
> This week marks the beginning of my 4th year at Facebook. My > experience
> here has been incredibly transformative: I joined > Facebook after dropping
> out of college having never faced the > challenges that I've seen during my
> time here. At this point, I've > worked through these challenges for longer
> than 4/5 of the people at > the company and thought I would share some of my
> insights in hopes > that other engineers who are joining might find it
> useful.

This marks the beginning of my 17th week of unemployment* after being fired
from Facebook after about a half a year working there. My experience being
fired has been incredibly transformative. I worked through challenges for
longer than 1/10 of the people at the company and thought I'd write this
alternative viewpoint in hopes that other engineers who might want to join
Facebook find it useful.

In what follows, I will attempt to only share true stories without any
interjection of my own opinion. Though, being fired -- after being enticed
with a high salary, accepting a large bonus to move to Silicon Valley, and
taking out a lease that you can't afford without a high paying job -- does
cause a fair bit of emotional dismay.

As a little backstory, I was asked to interview for Facebook by one of their
recruiters. I was already employed, but thought it was time to grow
professionally. I interviewed with Facebook, and did very well, and was
quickly offered a cool salary. Less than a week after relocating interstate to
my new home, I started work. After doldrums and threats, which I will discuss
briefly below, I was let go, without notice, stuck with a six-month lease in
location with a hyper-inflated real estate economy.

> As an engineer, your job is to build things that solve > problems. When you
> first join the company, you're assigned small > tasks and you solve them.

As an employee, your job is to make the company money.

You are given a variety of disparate tasks to solve, with the ultimate goal
that after six weeks, you find the area and team you want to join.

But don't get me wrong, you actually are pushed in the direction Facebook
would prefer you to go. There are high priority teams and low priority teams.
Unless you have a good reason, you better choose a high pri team.

> As you grow professionally, the domain of these tasks becomes > larger. It
> is a mistake to constrain the increase in domain to > larger or more
> frequent diffs. Code is a tool you have for solving > problems.

Weird. Aside from being juggled around as an employee, being given work on
front-end, back-end, low-level, and high-level tasks, I was lectured on
Facebook's rules of the road: Generate lots of diffs! Bang out code fast! But
make sure it's right first time! As I'll discuss next, you also should
minimize your interactions with engineers during the code review process.
Facebook actually prefers to treat it as a "Code Acceptance (otherwise you're
failing)" process.

> If you were gardening, you might plant flowers or pull > weeds. Increasing
> your scope does not mean planting more flowers or > pulling more weeds
> (though you should expect to be faster and more > proficient at that as you
> become more experienced). What it really > means is looking up from the
> ground at the garden in its entirety, > considering how your section fits
> in, and eventually helping to > decide the whole garden's plan.

A nice idea.

The way my manager personally handled personal growth of his subordinates is
by threatening them. Well, me, at least. If I didn't complete some odd tasks
he assigned me by a certain date, I'd be sure not to have a place at Facebook
after that date. This occurred on more than one occasion.

Despite meeting these demands, it was fruitless, and I was told during a
meeting that my bags were packed and waiting for me in the lobby, and to hand
over my badge and laptop immediately.

> In order to do this effectively you need to have agency. Agency is > the
> capacity for a person to act in the world. As a hacker, having > agency over
> your world is critical to fully explore the boundaries > of problems and
> find how to best leverage your solutions. I'm > referring both to the code
> that you write and to the interactions > you have within the company.

I was given these sorts of platitudes often.

I loved exploring code. But I was told to just hone in on the issue I was
supposed to solve, not worry about the bigger picture, and to just solve the
problem. In theory, the above sounds nice, but in practice, I was told the
opposite.

Regarding interactions with other people in the company: I was ultimately told
by my manager that I should reduce interactions with other developers, and
eventually, I was told I was not allowed to speak to other developers at all,
apparently to "gauge my performance." After several weeks of complying with
this rule, the relationships I developed thus far in the company weakened and
essentially evaporated.

~~~
anonymous592053
[Continuing because of HN's length restrictions]

> In the code base that you live in, you quickly develop an > understanding of
> how the components fit together. Use this > knowledge: instead of only
> fixing a bug you're assigned, consider > how you can prevent that class of
> bug from ever happening > again. Instead of implementing a new feature,
> consider how you can > create a common abstraction between the new and old
> ones and share > 80% of the code. This might take more effort now but gives
> vastly > greater results in the long run.

This is a very beneficial thing to do, but it led to ugly code reviews. I was
given a task, and solved it to satisfaction (code was written cleanly, tests
passed, etc.) but was told, in review, that the code was not satisfactory,
because it did not clean up code completely unrelated to the task -- even if
such clean up actually didn't solve any old or new problems.

I was severely penalized for this.

> At a higher level, take ownership over the entire company. Don't let > your
> coworkers be less than the best that they can be. Understand > the trade-
> offs being made and the factors that led to them; > understand temporary
> solutions and the priorities that necessitate > them, but don't accept a
> decision that you feel is wrong without > raising the issue and getting a
> better understanding. This is your > company (your garden) and if you let
> people pull in the wrong > direction the entire plan will fall into
> disarray. Make sure that > you encourage changes and that you're confident
> that the changes > happening are the right ones.

This sounds entirely ideal, but when someone new goes up against someone who
has been in the company for a while, the new guy is the one who is looked down
upon and usually disagreed with, with the reason that the guy with tenure
surely knows what he is talking about.

The part left unsaid is that there is no process for appeal. If you disagree
with another developer, and your manager ultimately disagrees with you, tough
luck.

I did not see democracy and debate. I saw tenure and social capital deciding
issues by default.

> It's easy to fall into the mindset that you don't know everything, >
> everyone around you is smarter and more experienced, and that if you > say
> something incorrect you'll be judged by your peers. This isn't the > case.
> When you have an idea, share it with your team, even if you > aren't
> confident it's the right idea. Wrong ideas are often stepping > stones to
> right ideas, both because they help define the real > boundaries of the
> problem that you're facing and because you can > iterate on a wrong idea to
> reach a right one.

Saying incorrect things, in my experience, actually does have repercussions.
During "bootcamp" at Facebook, you'll go through essentially a second set of
interviews with managers and team members. If you ask the wrong things, or
make seemingly incorrect statements, you _will_ be judged, and as a result,
they will not want you on their team.

Aside from the questions you ask and the interest you display, the number of
questions you ask also is a form of penalty. I was informally rejected from a
team because I was told I asked too many questions. Basically, since I asked
too many questions, I allegedly did not have the competence to solve problems
that team faced on my own. Even though it was the team I dreamed of being on,
and the one I could make the most impact on, I was told by my manager that my
reputation was irreparably befouled. Maybe if I tried again in a year.

As another anecdote, I was judged negatively for sharing my ideas without
confidence (I'm the new guy, I don't want to be presumptuous!), and being
indirect with criticism. Instead of telling another team member that he was
wrong, I shared an experiment and results to demonstrate so, in order to
minimize argumentation.

Even though I ended up being right about my assessments of the problem at
hand, I was actually told that I should have been more assertive because of
this, and my overall performance was deemed poor.

> It isn't immediately obvious how important it is to meet and > maintain
> relationships with people at the company who are outside of > your team.
> Find a random person with whom you haven't worked in > months and have a
> quick chat with them. It can provide a fresh > insight into problems you're
> facing and may even give a solution > that another team already has that you
> can use. FYI groups do a good > job of giving you a broad overview of the
> company, but talking to a > ground-level engineer from a different part of
> the code can yield > new ideas, new solutions, and new opportunities to
> combine forces.

True enough. Though, "joining forces" usually means "do something for the
company on your own time, and if the idea is good enough during a hackathon --
also on your own time -- then it might lead to a new opportunity". You can
shoot the shit with other developers, but there's no 20% time to take anything
to the next level.

> I'm only just starting to learn some of these lessons. I hope this > note
> helps to inspire you to step up, take ownership, and lead your > team in the
> right direction. Enjoy your years at Facebook; I know I > have.

Good.

Overall, I did not enjoy my time at Facebook, and I was reminded of the value
in having a good, experienced manager, and the futility of trying to retain
professional dignity in the face of an incompetent one. It was something that
could have been repaired, but there was no avenue to do so.

My tale also underlines the way at-will employment can be exploited as
"endless probation". Food for thought for anyone seriously trying to build a
tech career.

* Actually, I am glad to say that I am now happily employed.

~~~
anonfbemp
I can confirm the same experience as a non-engineer.

I worked in a group that was not engineering, and had the same schizophrenic
experience with respect to what I was told was the culture, what was expected
and what the reality was.

The culture of facebook is that of a pretentious enclave of people who think
that simply their being at facebook is validation of their any actions or
motivations.

While the benefits of the company are amazing, the actual actions and methods
of teams is utterly broken.

I was accused of not providing information in a timely manner, even though I
was simply statusing other employees and teams on their activities. After
multiple escalations regarding not receiving status from said teams, I was
ultimately held responsible for those that literally ignored every request for
an update, inclusive of escalations to both my and their managers.

I was accused of overstepping my bounds by looking into information required
for various projects and interfering in other teams responsibility even after
being explicitly asked to gather this information on thie behalf. I was told
by my manager that I should document all requests in email to ensure that I
was not perceived as being encroaching on their area. I complied, and was
praised for covering for that team, then denigrated by my very manager for
overstepping into their area....

I was accused of spending too much time in the social scene at FB, while I
joined a total of ~5 groups within FB and only posted a total of ~10 times
between all groups.

The fact is that there is a ruthless political system within facebook that
ruthlessly seeks out people who are too active and cuts them as early as
possible.

When I was fired, jsut minutes before I was assured by my manager that all was
good and that the person who was difficult was just someone I was supposed to
get to understand.

Then, all my colleagues disappeared from our desk line and I received a call
that I needed to leave the building. It was the most cowardly and disgusting
company exit I have ever experienced.

~~~
smegel
Wow, quite a few similar stories. I wonder how indicative they are of fb as a
whole, or just particular teams. Does anyone have any positive experiences to
relay?

~~~
alttab
Gotta love a social company run by a kid that was so incapable of making
friends he had to build a website and make everyone want to be there.

~~~
myko
I think this is a bit unfair. I'm not sure you know Mark well enough to know
that.

------
JacobJans
"Understand the trade-offs being made and the factors that led to them."

As a user of Facebook, this quote explains a lot. I run a Facebook page with
90k+ likes, and have grown to expect it to simply not load completely without
refreshing it multiple times. I've long suspected we were the victim of some
type of 'trade-off.' It appears my suspicion were correct.

We also spend five to seven thousand dollars a month on advertising. I wonder
how much more effective our campaigns would be if our page loaded 100% every
time.

~~~
jaredsohn
>It appears my suspicion were correct.

The text in your post doesn't support this conclusion (which tradeoffs are
causing the behavior?). Just because something isn't working right doesn't
necessarily mean it is because of tradeoffs; it could just be a bug (Edit:
that they aren't aware of).

Also, it seems strange that you are experiencing that problem since many pages
have more likes (for example Barack Obama's page has over 35 million likes)
and yet load quickly; perhaps the problem is unrelated to the number of likes?

Edit: Of course if it is a bug and Facebook is aware of it but hasn't fixed it
yet then the reason for not fixing it yet may be due to tradeoffs.

~~~
pavs
I have experienced the same problem. It happens randomly to random pages and
not all of them are high profile pages. I would chalk it up to it being a bug.

~~~
chopsueyar
Who is your ISP? What type of connection (DSL/cable/fiber/radio)?

I have a flaky* DSL connection of 2.6Mbps and I notice the AJAX calls to
facebook crap out.

* During wind or rain, cuts out for a minute about 4 to 6 times per hour.

~~~
pavs
I am in SE Asia, its a WiMax connection. The rest of the internet works as it
supposed to.

The problem I am referring to (not loading completely and sometimes loading
completely but not showing all the entries of a page) doesn't happen all the
time, but happens often enough to notice.

~~~
msrpotus
I have the same experience in the US. Seems like it might be a problem with
the admin panel on a page (since other pages don't seem to have the issue).

------
CGamesPlay
Thanks for posting, patangay! I wrote the post if anyone has any questions :)

~~~
LukeWalsh
Thanks for the post! I understand from my interview process with Facebook that
every engineer screens candidates. What are some things that have impressed
you the most of anyone you have recommended for a position?

~~~
CGamesPlay
I think the most impressive candidates have a mix of 3 qualities: raw ability
to program, ability to map real problems into programming problems, and
ability to work effectively with other people. I don't expect the ideal
candidate to be an ICPC winner or red-rank TopCoder, but they should be able
to manipulate code effectively and reason about their programs well. Knowing
what non-technical requirements mean in technical terms (i.e. how to build
what the customer wants) and what technical restrictions mean in non-technical
terms (i.e. what alternatives you can propose when presented with
restrictions) is core to being able to build software that solves problems.
And since we're talking about hiring people to join a team of other people,
obviously I need to be confident they'll succeed in that environment.

~~~
victorhn
I know there are many red-ranked TopCoders and ICPC winners working on big
companies like FB, in your experience does this ability translate well into
"real world" programming?

~~~
CGamesPlay
I'm not really able to look at performance versus TopCoder rank (partly
because I don't know my peers' TC rank because I'm not that into TC), but if I
had to guess, I would think that there is no correlation. It's simply a matter
of where one puts one's developmental efforts.

~~~
jongraehl
Given the same amount of time spent on TC, you'd definitely have the expected
correlation (with the usual IQ common cause if nothing else). But I agree that
once someone gets reasonably competitive in an area (esp. one w/ game-like
mechanics and public recognition), they're at risk for overspecialization.

------
kailuowang
It seems that it's more of a product oriented (solve problems) culture than an
engineer oriented (create something cool) one. Not necessarily a bad or good
thing but it's consistent with the impression I got from Facebook in the last
couple of years.

~~~
hkmurakami
I had the impression that Google was engineer oriented but I wonder if this is
still the case with their recent refocus into a small number of key products.

With that in light, how would we (to the best of our knowledge) characterize
some of the big/promitent software players? (FB, GOOG, AMZN, MSFT, NFLX, RAX,
DBOX, etc.)

~~~
Apocryphon
I wonder why AAPL isn't ever mentioned in these discussions. They may be
chiefly hardware focused, but they do plenty of software.

~~~
hkmurakami
I intentionally left them out since imo their software serves to augment their
hardware and the nature of the beast seems to be a bit different from others.

------
shmerl
I didn't really see what's so specific in this post about Facebook? The same
could be said like "it's my X year on social network Y". I expected something
specific in the context of Facebook in the post, but I didn't find it there.
I'm not a Facebook user though, so may be I didn't understand some implicit
assumptions of the OP.

~~~
CGamesPlay
The post was written with my younger coworkers in mind but I felt like it was
of general interest to all new programmers so I made it public. I don't think
you need to understand anything about the Facebook product or company in order
to understand my post.

The original title here was "FB engineer reflects on his job" but I guess it
got changed because that phrase didn't appear in the linked page? I think the
other title set context that wasn't needed on Facebook but is in this
environment. Apparently an editor disagreed. (Editor, if you're reading, I'd
title this "My advice for newgrads joining software companies".)

~~~
shmerl
Thanks, this clarified the point of the post :)

------
raverbashing
Nice reading

This is a good explanation (of what it is to tackle bigger problems):

"As an engineer, your job is to build things that solve problems. When you
first join the company, you're assigned small tasks and you solve them. As you
grow professionally, the domain of these tasks becomes larger. It is a mistake
to constrain the increase in domain to larger or more frequent diffs. Code is
a tool you have for solving problems. If you were gardening, you might plant
flowers or pull weeds. Increasing your scope does not mean planting more
flowers or pulling more weeds (though you should expect to be faster and more
proficient at that as you become more experienced). What it really means is
looking up from the ground at the garden in its entirety, considering how your
section fits in, and eventually helping to decide the whole garden's plan."

------
dustingetz
_understand temporary solutions and the priorities that necessitate them, but
don't accept a decision that you feel is wrong without raising the issue and
getting a better understanding. This is your company (your garden) and if you
let people pull in the wrong direction the entire plan will fall into
disarray._

i'm interested in hearing experiences about what happens when you actually
achieve this level of control. I love my garden so much, and have been given
sufficient responsibility over it, that I care very much when people pull in
the wrong direction. Refusing to accept incorrect decisions -- decisions that
will absolutely cause technical debt, overtime, and significant stress and a
smaller bonus for us all later in the product lifecycle -- can lead to some
interesting and complex social dynamic and this is the biggest thing I
struggle with today. Its actually even more complicated because while I feel I
am usually correct (who doesn't), there are times when I'm wrong and there are
other times where I don't realize I'm wrong.

~~~
nbm
This is something I've often struggled with before I joined Facebook, and it's
something I occasionally grapple with there too. Like you, I felt I was
usually correct, but had come to the realisation that not only was I
occasionally wrong in short-term hindsight (just after the fact), but
sometimes only in longer-term hindsight (ie, after I'd learned some lessons
further down the road).

Ultimately, it comes down to trust and teamwork. I had a much longer post,
but:

a) Make sure you are doing what you believe to be the right thing for the
company as a whole, and that you're armed with as much information as is
easily obtainable about it to inform your strong opinion.

b) Then, if you are able to believe that the people around you are doing what
they believe to be the right thing for the company as a whole (even if you
might need to remind them that they should do that) based on the information
(and you might need to help them understand what you have discovered) and
experience available to them, then your life will be a lot less stressful than
if you're the guy that feels they always need to steer the ship.

It's also something I've learned more and more about leadership and mentoring:

a) It's hard to learn lessons if you're not making mistakes. Telling people
how to avoid mistakes in one case doesn't help them learn how and whether to
try avoid them in future.

b) Choose your battles - expend your influence capital on the most important
thing, and don't transform from that person that's been a great help in the
past to that person who just tries to meddle in everything.

------
bitskits
I find it interesting that a Facebook engineer would openly compare the
company to a "garden", given the criticisms they regularly face.

------
ChuckMcM
Given a 4 year vesting cycle it is the end of the fourth year that is of the
most interest :-) Although I've noticed things are a bit more 'shares every
year' kind of thing these days to maximize retention.

------
skc
If we had a minimsft type blog on the major players in tech, I suspect we'd
see that they all provide roughly the same type of positive AND negative
experiences.

It's cut throat out there.

------
ojr
@CGamesPlay how did you get a job at Facebook being a college dropout and why
did you drop out of University of Central Florida?

~~~
CGamesPlay
After doing an internship at Facebook in college, I received a full-time offer
for after I graduated. I never really felt like college was for me and so I
asked if they could extend me an offer immediately rather than waiting until
graduation.

~~~
zerr
Does internship to employment transformation imply easier interview process
overall? i.e. rather than apply to full-time position directly.

Another concern - does this also imply the offer with a below average
compensation?

~~~
CGamesPlay
> Does internship to employment transformation imply easier interview process
> overall? i.e. rather than apply to full-time position directly.

Not necessarily easier, but having 12 weeks of experience working with me
gives the company much more context on my software engineering skills than 4
hours of interviews does.

> Another concern - does this also imply the offer with a below average
> compensation?

I don't think so. Anecdotally, I've heard that recruiters have pretty fixed
packages for newgrads and that I was given a newgrad package.

------
o0-0o
How many people have cheated on their spouse or committed suicide because of
facebook today?

------
axansh
Very positive attitude and good advice.

------
GuidMor
time to quit and do something real.

~~~
encoderer
Say what you want, but I left my entire, close-knit family behind in Ohio when
I moved to San Francisco for better opportunities on better engineering teams.
Nothing in my life keeps me connected with them the way Facebook does. Nothing
else draws together an audience as broad. From my teenage age cousins who use
FB their way, to my Baby Boomer parents, to my Greatest Generation
grandparents. They're all there in one place.

Also, they've faced enormous engineering challenges. Yes, Facebook style
problems have great fanout results. You can _almost_ accuse it of being easy
in that way. But at their size and with their growth rate, nothing is easy.

I'm not a big facebook user. I didn't touch it until i moved away and my
family over time started using it. But your slur here is absurd. Facebook has
given a lot of great engineering back to the community. Thrift. Cassandra.
Open Source networking hardware, etc.

~~~
23david
Yes the Facebook product has some utility. And they do have big engineering
challenges, and have contributed to open-source.

These are not unique to Facebook, and if these are the criteria for working
there, I can think of a lot of other places to work at that:

a) Have products that my friends and family would enjoy/use. b) Have
interesting engineering challenges that a new employee can work on. c) Allow
employees to contribute back to open-source and maintain their open-source
projects on company time, with significant engineering resources.

The OpenCompute project is pretty unique to only Facebook, so if hacking on
data center hardware is your thing, Facebook is pretty unique in that regard.
Would be curious to know how many people are in that group though... I imagine
it's pretty small compared to their general software engineering workforce.
You can do similar work at Google, but they don't let you release your work
Open Source. :-) Trade secrets and such...

