Unless one absolutely does not care what one wishes to work on, joining Google is throwing your future into the Hogwarts hat of an ill-defined cabal of billionaires to pick your job at Google. Sometimes that works out, but most of the time you are allocated to whatever mission-critical project is currently leaking buttcheeks.
In my brief time there, I was placed on a 7-person team that lost one person per month. That is the single worst retention rate I have ever seen. I left after 4 months for that and the realization that the powers-that-be were in denial about the coming impact of an emerging technology that they have since embraced a year or so after my departure.
That said, the SCCS and the build process were top-notch.
But there are good reasons why despite all the perks and smart people, Google's overall retention rate is barely a month longer than Amazon's.
When I joined Google I was given 4 teams in 2 different locations to choose. I had lunch with each of the teams, and chose the one that better suited my style.
To be fair, your experience at Google will depend a lot on what team you land in. Not everyone's given a choice, but now I know better: Talk to your recruiter and make them clear what you want.
For example, if you didn't go to a top tier school you could be hired on only to find out that a single team wants you. It's in bumfuck nowhere 2000 miles away and its primary purpose is to program the road sign outside google HQ.
It could lead to very different googles for different people, and makes me wonder if applying to work there would really be worthwhile for someone like me.
I then asked if I could use said technology for which I am a recognized expert, he said no, and that was the end of that.
I have been tempted to print myself a "Bad Cultural Fit - Google HR" T-shirt in response, but I have better things to do.
Median tenure does not necessarily indicate retention issues for core roles at any company. It could simply be rapid growth or lots of roles that typically come with high turnover (e.g Amazon's warehouse employees).
Upon complaining that it was unfair to judge me behind the curve when there had been zero feedback whatsoever up to that point, he then reported me to HR and offered to let me leave the team. There were two other potential teams making use of the technology for which I have expertise: one was new and it had zero openings at the time but which is now arguably one of the most prominent teams at Google and the other one's manager asked me one question "Where did you get your degree?" and didn't like my answer (I suspect) because it wasn't Stanford (desirable attributes for the position listed a Stanford degree) but I don't know for sure because he cut off communication at that point
And yes, in a perfect world I should have reminded my manager sooner of my existence but he was off on paternity leave as well with no one to run things in his absence so I really don't know the winning move here other than what I did: leave for one of Google's competitors where I spent the next 4.5 years or so focusing exclusively on the aforementioned technology.
If Google HR is dismissing the AUC of my entire career over 4 blind-allocated months at Google, that's asinine, but it would explain a lot and fit the facts. Thanks for the info.
I personally know several people who have left & come back up.
If you left on bad terms, then of course any company wouldn't want you back.
What you need to do is find a team doing work you find interesting within a higher priority focus area with headcount, make contact with their manager, and start 20%ing. If you do a good job with your 20% project - high quality, and done timely - then you can float the idea of transferring permanently to their team. If a manager with headcount in a high-priority focus area requests a transfer from a low-priority focus area, and the employee is enthusiastic about it and has already done work for them, they're going to get it.
I've seen this work for several people who were there only 4-6 months. Officially, you need to be on your starting team for 18 months before transferring, but this is bullshit. Unfortunately, nobody in an official capacity is going to tell you this as a Noogler, so I've also seen a few talented Nooglers leave the company because they ended up on a poor fit for their skills.
So I wouldn't put much stock in that as a meaningful comparison.
From what I understand talking to current employees, this is now bullshit. You could spend 20% on other stuff, but the culture in many of the groups is such that you are putting your peer review at risk by doing so because of your reduced output.
Any current Googlers that spend 1 day of every week working on something completely unrelated to their main job want to comment?
My understanding is that while I'm a little bit of an outlier, in general 20% time at Google is nowhere near as dead as people on the internet tend to claim (at least for engineers).
The "approval from my manager" amounted to telling them in our weekly 1:1 meeting that I wanted to spend my 20% time on that project.
Of course, if you spend 20% of your time working alone on something that produces 0 results in the span of several quarters, I suspect your experience is not going to be the same.
Back when I worked at Compaq there was a tool everyone used in the build process and it had a splash screen that mentioned the author. That guy was a legend at Compaq because everyone had at least heard of him. When my buddy took over the build process he ended up emulating Mr. Legend and put his name on his tool that was used thousands of times a day. Same thing happened to him: oh you're the Mr. Coder? He had his pick of projects for a very long time.
The reason why I quit Google.
The rest of the quote:
In part this is because the approach to this is not uniform across the company. Managers at every level are responsible and accountable for what projects their teams work on, and exercise their discretion as they see fit. In some cases, this means that such decisions are made in a quite bottom-up fashion, with engineers being given freedom to choose which projects to work on, within their team’s scope. In other cases, such decisions are made in a much more top-down fashion, with executives or managers making decisions about which projects will go ahead, which will get additional resources, and which will get cancelled.
Thanks to the secrecy that shrouds everything Apple, it's hard to get a handle on whether he became a more evolved manager (or, let's not euphemise: less of a flaming asshole) later on at Apple.
The article posted by kyrra, mentions this.
Given the value gained from the existing tools Google has built and the many advantages of the monolithic codebase structure, it is clear that moving to more and smaller repositories would not make sense for Google's main repository. The alternative of moving to Git or any other DVCS that would require repository splitting is not compelling for Google.
It seems like they have just too much invested in this "shove it in the same repo" style. Or is this the more appropriate way to do things in a large organization?
Here's some of my painpoints with it:
* No branches. If you want to make a temporary code branch, you create a CL (Google's version of a pull request), but never submit it. This means nobody else can collaborate on it with you, and it must be manually updated to HEAD.
* No CL collaboration. Unlike Git branches, CLs can only contain changes from one user.
* No stable branch. Since everything is essentially on one long branch, it's a real hassle when a project is broken at HEAD. Sure, integration tests should ideally prevent this. In practice, HEAD is often broken. Teams have created bash scripts and mailing lists to determine 'stable' old versions that can be checked out for development.
* Single versions of libraries. Any library that is used is also checked into the VCS. However, only one version of the library can exist in the codebase, which is rarely updated. However, there are exceptions to this.
At one point, Sergey mentioned bringing Google "up to industry standards" regarding VCS's. However, that would be a monumental task and I doubt it will happen.
Although I seriously doubt that Google has this problem, one of the biggest drawbacks of the scheme is that nobody knows how to build anything -- not even their own project. If you are coordinating with another project, then you're always having to wait days for the load build to finish so you can get their changes. If the build breaks for an unrelated reason, you can lose a whole week of development to screwing around.
When working in that kind of environment, I tend to maintain my own VCS, then squash my commits when integrating with the main VCS. I also do all my own load build. Everywhere I've worked, I've been heavily criticised (usually by management) for doing this, but productivity has been on my side, so people reluctantly accept it. I often find it strange how so many people prefer doing it the other way...
This happens often on some projects at Google (although 2 days is the longest I've seen it broken). Others have told me they use this time for documenting code and writing design-documents.
> When working in that kind of environment, I tend to maintain my own VCS, then squash my commits when integrating with the main VCS.
Google actually has a tool that allows developers to use Git on their local machine, which is squashed into a CL when pushed. However, some projects are too reliant on the old system for this to work.
For the benefit of YC, here are corrections:
> No branches. If you want to make a temporary code branch,
> you create a CL (Google's version of a pull request), but
> never submit it. This means nobody else can collaborate on
> it with you, and it must be manually updated to HEAD.
> No CL collaboration. Unlike Git branches, CLs can only
> contain changes from one user.
> No stable branch. Since everything is essentially on one
> long branch, it's a real hassle when a project is broken
> at HEAD. Sure, integration tests should ideally prevent
> this. In practice, HEAD is often broken. Teams have
> created bash scripts and mailing lists to determine
> 'stable' old versions that can be checked out for
Important libraries define more rigorous releases, similar to Git labels, which are updated automatically every day or two. These both reduce the amount of tests that need to run, and reduce chances of errors in low-level code affecting many teams.
> Single versions of libraries. Any library that is used is
> also checked into the VCS. However, only one version of
> the library can exist in the codebase, which is rarely
> updated. However, there are exceptions to this.
Three of the four languages most often used at Google (Python, C++, Go) do not allow multiple versions of a library to be linked into a single process due to symbol conflicts. This is a limitation of those languages, not of the Google repository, and they affect any company that allows use of third-party code. The standard recommendation at Google is to avoid dependency hell by sharding large binaries and using RPCs to communicate. This development model has many advantages that have been documented elsewhere.
> Piper has branches
I've worked on two teams so far, neither of which used the branches you described. They opted to either flag off features or keep long-running CLs.
However, I'll try to learn more about Piper branches. I doubt my team will make large workflow shifts, but it would still be good to understand!
> CLs are equivalent to Git commits
I'd argue that CLs are not equivalent to Git commits, the equivalent would be a CL snapshot. Best practices in git are to have frequent, small commits. CLs tend to be much larger, and the review process means that having small CLs would greatly slow workflow.
> There is a global testing system for the entire repository, which is used to decide whether a particular project's tests pass. Commits on which all relevant tests pass are the branch point for releases.
Yes, but this doesn't help with development. When HEAD is broken, a developer has to chose between developing on an outdated codebase, or developing on a broken codebase.
> Many third-party open-source libraries have multiple versions, and new upstream releases are added when there's either a security/bug fix, or someone wants a new feature.
Popular libraries may be updated more often, however other libraries don't have many resources dedicated to them. After a brief correspondence with the team that manages third-party libraries, I decided it would be easier to implement the feature myself instead of following whatever process was required to update the library. And no, I wasn't trying to use 2 versions of the same library.
Despite your assertion, I'm not trying to write anything incorrect, and I appreciate your response.
I agree with you with respect to CLs/snapshots. I would sometimes try chains of DIFFBASE-linked CLs in a crude emulation of linear Git branches (I want to experiment with taking things different ways, and I want the version control to store/back up my work), which sort-of worked when you're writing the code, but merging could be nasty. But there was also ad-hoc Git hosting available internally. I started using that for my experimenting, squashing into Piper commits when it was ready to share. It wasn't terrible, though still not optimal for collaboration.
I'd qualify that to only on a working branch - it's preferable to squash it all to 1 commit when merging upstream in order to make reverting painless if there is something wrong with the proposed change.
Lots of small commits cause massive pain with git :( .
> I've worked on two teams so far, neither of which used the
> branches you described. They opted to either flag off
> features or keep long-running CLs.
> However, I'll try to learn more about Piper branches. I
> doubt my team will make large workflow shifts, but it
> would still be good to understand!
Dev branches require a change in workflow, and can be unhelpful if a team has bigger process issues (like yours sounds like). I recommend looking into them and trying out the codelab, but don't start advocating for them just yet.
Release branches are very important. If your team is not currently using them, that needs to be fixed ASAP. Look into Rapid, try it out for a small CLI utility. Advocate for all releases to be done via Rapid. Despite the name it can be slower than plain [g4 sync; blaze build] but the extra steps it runs are important and useful.
> I'd argue that CLs are not equivalent to Git commits, the
> equivalent would be a CL snapshot. Best practices in git
> are to have frequent, small commits. CLs tend to be much
> larger, and the review process means that having small
> CLs would greatly slow workflow.
If you are regularly writing large CLs, or long chains of diffbase'd CLs, that's a sign that your codebase may be poorly factored. Take a step back from the tactical level and look at what your CLs are touching. Is the UI's HTML formatting mixed into the business logic? Are you touching the same file over and over? Move things around, use includes, use data embeds. Replace long param lists with data structures. All this standard software engineering advice applies 2x when working with other devs.
> Yes, but this doesn't help with development. When HEAD is
> broken, a developer has to chose between developing on an
> outdated codebase, or developing on a broken codebase.
After it's fixed, look at why it broke. Why was a CL that broke things allowed to be submitted? Do you have proper presubmit tests? Consider adding your TAP project(s) to METADATA files so Piper will make sure tests pass and binaries build before allowing the submit.
If other teams' changes are breaking your code, add your TAP project(s) to their METADATA or help them improve their own test coverage.
> After a brief correspondence with the team that manages
> third-party libraries, I decided it would be easier to
> implement the feature myself instead of following
> whatever process was required to update the library.
Single version of a library is actually a good decision, makes sub libraries pulling different version of the same code managable and error free.
Not to mention security auditd and ease of maintenance.
Disclaimer: goog emp
Some google orgs, like android, don't use the existing infra, and they kind of struggle and have to reinvent most wheels, because of that.
Edit: added second paragraph
Do you want to check out only the app you're working on? There is a script that grabs it and its dependencies.
Do you want to do continuous integration? We have plugins to our CI server that understand when the app code or one of the dependencies has been updated.
Building always off HEAD is nice and it solved the issues we had with diamond dependencies but I am not completely convinced this is the right approach
• no trailing dependencies so you never have to backport fixes, maintain multiple released versions, etc.
• extensive integration testing of libraries since they go live instantly
• forced library developer and library user collaboration
• deployed code is not out of date
What's the problem with only One True Version? All the complaints seem around tooling.
And I'm sure that the number of companies doing really good integration tests in somewhere in the 1/10000 range (or worse). Every dependency, external provider, internal API, data store, taking into account versioning....it's hard.
I'm a huge believer in automated testing, I've written about it and done it for almost two decades now. My views on it have continuously evolved...and comprehensive and effective integration testing is still a complete mystery to me. The only reason I'd want to work at BigTechCo would be to learn about that specific aspect of software development.
I am guessing that in Google people they try to avoid above issue by creating and then depreciating a lot of projects instead having new major release. Older projects will become frozen because too many things depends on them.
This is visible in Google products that take years to change in any way. Gmail/Search are basically the same as long I remember. Given number of engineers in Google it is hard to see any output.
Google Fiscal Year 2015
Revenues: $74.54 Billion (source: Google)
Advertising Revenue: $67.39 Billion (source: https://www.statista.com/statistics/266249/advertising-reven...)
Profits: $23.4 Billion
Market Capitalization: $570 Billion
Google Not a Startup/Has Not Been a Startup for Many Years
Founded: September 4, 1998 (19 years ago)
IPO: August 19, 2004 (13 years ago)
Number of Employees (2015): 57,100
Revenues per Employee: $1.3 Million
Profits per Employee: $409,000
The issue is that Google has so much money and is so successful that it can do all sorts of things that are extremely inefficient, even very harmful and still do fine, unlike smaller companies or startups in particular.
For example the arxiv article states:
2.11. Frequent rewrites
Most software at Google gets rewritten every few years.
This may seem incredibly costly. Indeed, it does consume a large fraction of Google’s resources.
Google has the money to do this. As the article argues, it may work for Google. On the other hand, Google has so much money and such a dominant market position, it probably can keep succeeding even if continual code rewriting is actively harmful to Google.
In orthodox software engineering theory, competent software engineers, let alone the best of the best that Google claims to hire, should write modular highly reusable code that does not need to be rewritten.
Many rewrites and "refactorings" are justified by claiming the "legacy" code is "bad code" that is not reusable and must be written by "real software engineers" to be reusable/maintainable/scalable etc. One rewrite ought then to be enough.
Even highly successful businesses, for example $1 Billion dollars in revenues with $50 million in profits and 5000 employees (revenues per employee of $200,000), have nowhere near these vast resources --- either in total dollars or per employee or product unit shipped. Blindly copying highly expensive software development processes from Google or other super-unicorn companies like Apple or Facebook is likely a prescription for failure.
Different market niches in software have wildly different sizes & profitabilities. It's worth doing everything you can to get into a market that is both huge and wildly profitable, and once you're there, you should do everything you can to defend that niche from new entrants.
Pretty much everything in Google's strategy - the constant rewriting, the expansion into adjacent markets like web browsers and mobile phones and ISPs, the highly-paid employees, the 20% time - follows from this. Also, most of the counter-intuitive advice in the startup world - the obsessive focus on growth, the companies that shut down because they aren't growing fast enough, the existence of venture capital and willingness to accept significant losses of control in exchange for capital infusions, the use of disposable coding practices and technical debt - also follows from this principle. A lot of things about the software industry that seem stupid, irrational, or short-sighted become perfectly rational when you understand the market structure of technology.
I've seen Google do some rewrites that make sense when one has the money for them. The shift from eventual to stronger consistency in their databases via F1 RDBMS was impressive. Worth some rewrites across the apps to use it to knock out major problems that could affect them once and for all. After developing Go, they also might want to rewrite performance-critical apps in, say, Python to it. There's definitely benefits on such rewrites. A lot of the other stuff I'm betting they could've done more long-term esp if using and extending FOSS solutions.
Yes, this can't be stressed enough. Out here with the little people like non-Google-employed me, there's almost a desperation to copy the things that Google and Facebook do, and it's often justified with "Well, Google, Facebook, or Netflix use it!"
A huge amount of tech fads over the last decade have been the direct result of Google's publications and public discussions. Google might need BigTable, but that doesn't mean we should all bury our SQL RDBMS and use a crappy open-source knockoff "based on the BigTable paper". More than likely, Google would've been happy to keep a SQL RDBMS.
Google has the engineering staff, including two extremely technical founder-CxOs with PhDs on which Google's initial technology was based, and the hundreds of millions of dollars necessary to do things The Google Way. They can rewrite everything that's slightly inconvenient and do a lot of cutting-edge theoretical work. They have the star power and the raw cash to hire the people who invented the C language back in the 70s and ask them to make a next-gen C on their behalf.
Google has the technical and financial resources to back this type of stuff up, provide redundancy, put out fires, and ensure a robust deployment that meets their needs. They keep the authors of these systems on-staff so they can implement any necessary changes ASAP. In many cases, Google is operating at a truly unprecedented scale and existing technologies don't work well, so that theoretical cutting-edge is necessary for them.
None of those things are going to be true for any normal company, even other large public ones. Google's solutions are not necessarily going to meet your needs. Their solutions are not necessarily even good at meeting their own needs. Stop copying them!
I'm so. sick. of sitting through meetings that have barely-passable devs making silly conjectures about something they heard Google/Facebook are doing or that they read about on a random hyper-inflated unicorn's engineering blog.
You want your stack? OK, here it is: a reasonably flexible, somewhat established server-side language (usually Java, .NET, Python, Ruby, or PHP; special applications may need a language that better targets their specific niche, like Erlang), a caching layer (Redis or Memcached) that's actually used as cache, NOT a datastore, a mainstream SQL database with semi-reasonable schemas and good performance tuning, and a few instances of each running behind a load balancer. That's it, all done. No graph databases, no MongoDB, no quadruple-multi-layered-massively-scalable-Cassandra-or-Riak-clusters, no "blockchain integration", no super-distributed AMQP exchanges, ABSOLUTELY NO Kubernetes or Docker (use Ansible), none of that stuff.
Just sit down and get something done instead of wasting millions of your employers' dollars trying to make yourself feel important. If you do need an AMQP exchage, bolt it on after the fact to address the specific issue at hand, once you know why you need it, and make sure you know what you're doing before you put it in production (it's apparently difficult to grasp that AMQP servers are NOT data stores and that you can't just write directly to them and wait for some worker to pick it up if you care about data integrity).
Don't start a project with the primary intention of making a convoluted mess; let it get that way on its own. ;)
More general advice is: take G, A, FB, NF... papers (and HN posts, while we are at it ;) ) with a grain of salt, test before use and make sure it solves more problems than it creates - for you.
New infrastructure requirements, languages, performance considerations, markets, customers etc. etc. - they all change.
An expanding and adaptive business will likely have to refactor code that was 100% perfect in 'context ABC' because they have some new 'context XYZ'.
There are so many examples to think of.
When they went from one datacenter to many, whenever they replace the hardware architecture in their datacenters or change newtworking configurations. When they decided to integrate G+ into everything. When they decide on using a new common UI framework.
The 'roll on' effects may necessitate refactoring of other code.
And this is not including more opportunistic things in a given area.
Maybe they started doing some stuff in 'Go' and wanted to refactor other modules into 'Go' for greater maintainability?
And I don't think anyone will be 'blindly copying' Google's processes.
It seems the push to golang is entirely to sustain large projects with average engineers. Maybe somewhere high up they decided that it's better to just have a massive engineering workforce rather than only hiring top talent? At what point does brain drain start as the best people get sick of dealing with mediocrity?
Google has a lot of imperfections addressed elsewhere in the comments here but the engineering culture is extremely strong and one of the best parts about being there. I think the overall "Googley culture" is suffering but it isn't for technical reasons.
Then again maybe I'm one of those C players who snuck in the past year.
Seek out the people that were there 6+ years ago and compare their quality with the average Googler. You'll likely notice a difference.
Google now has over 50,000 employees. It's not possible to get that big that quickly without a reduction in hiring rigor. There wasn't a sudden influx of geniuses to fill that demand.
I met some great people at Google, but I'd be remiss not to mention I also met too many #IAmGoogle sorts (who were all dudes BTW).
> "For those in other organizations who are advocating for the use of a particular practice that happens to be described in this paper, perhaps it will help to say “it’s good enough for Google”.
In my opinion, this style of writing doesn't fit nor belong.
I would leave that paragraph out. Instead, let's judge on the merits and applicability of an engineering practice based on thinking, reasoning, and experimentation.
That said, as I've read various comments about Google's processes, I'm struck by the cognitive dissonance. On one hand, I see bandwagoning; e.g. "monolithic source control is nuts; we don't do that; no one I know does that". There is also some appeal to authority; e.g. "well, Google is the best, they do X, so we should too." I'm glad to see different argumentation fallacies colliding here.
The differentiation is in details that the paper doesn't explore.
I agree, this paper will just lead to more monolithic Git repos "because it's good enough for Google", without the appreciation of Google's other tooling and processes.
Google has some amazing perks and it's a wonderful overall employer, but I really wonder how much cash is left on the table by not addressing its shockingly low retention rate or at least explaining why it's not a problem.
There are a lot of articles estimating the cost of a departure is anywhere from 6-12 months of the lost employee's salary. Does that seem like something that should be ignored like they seemingly do? Why do shareholders even tolerate this?
I think that engineers in most large software companies don't actually accomplish much on a day-to-day basis. I'm saying this after having worked in both corporations and startups. Large companies are laughably inefficient - Engineers tend to focus all of their energy on very narrow (often tedious) problems at great depth.
These huge companies never try to reign-in the complexity because they don't really need to - Soon enough, the employees at these companies get used to the enormous complexity and start thinking that it's normal - And when they switch jobs to a different company; they contaminate other companies with that attitude. That's why I think startups will always have an advantage over corporations when it comes to productivity.
In these big companies, the most clever, complex solutions tend to win.
As the ACM paper calls out, files are loaded asynchronously like on access, so you only have the files you need on your desktop. From a developer's point of view, you can see all the files in the entire repo at all times. And with how CITC (client in the cloud) works, I can move from a laptop to a desktop without any effort (all of the files I have in a working state on one are immediately available everywhere I can access CITC).
As far as complexity... how would a large company solve these problems without these large and complex systems? Google is probably one of the more efficient ways I've seen large companies work. When you want all your devs to share code, thing get hard at scale.
It means you can modify the interface to a service, and all the clients that use it, in an atomic commit.
But good luck finding a free restroom at 10am. Is this an issue at other companies?
Perfect! We need a t-shirt.
That's a bit dramatic, but when your product development has a fast turnaround for fixes (git push vs 100 million dollar recall) and it won't kill people when it breaks, you should immediately throw most of that process shit out the window.
You can't be competitive in consumer SaaS if you get bogged down in 'real engineering' processes.
Your idea that it has to be as ridiculous as process junkies is a strawman. A strawman that happens in a lot of places for sure but doesn't have to. Google can just take the few, easy-to-apply practices from high-integrity systems to get tons of benefit. It's the 80/20 rule for increasing assurance.
Just look at Google Nest and their massive outage in December 2015, that’s usually enough to kill a company, and if Nest was independent, it’d have hurt them massively.
Their reliability is nice compared to competing websites, but compared to other infrastructure, it’s quite bad. Hell, I’ve seen 2 orders of magnitudes more Google outages than power outages in my entire life (combined 29min power outage vs. several days Google outage since '96)
It's a good time to be a founder :)
Can someone tell more about what they did and the things are that permitted (even though without needing approval.
EDIT: one personal example is at some point I took some external classes and used 20℅ time for it. But most cases are for developing some sort of tools or product.
That being said, there were times when I was really excited about the project so I would work 80% time plus 40% time and stay late.
20% time aiding in team transfer is very common I think.
They hire the smartest Software Engineers in the world, so it is only a matter of time that some of them will create new, disruptive product.
If they weren't given that 20% of time at Google they would do that anyway, on weekends, but since they do it in company-sponsored time then Google owns the copyrights to all of their work.
And from what I understood, all inventions they own, but I am still very iffy on what's qualified as an invention.
A coworker even asked for bosses blessing to sell some stuff on the side unrelated to the company, he said no because as per the contract that wouldn't let coworker give full undivided attention to the company.
> Relate at the time of conception or reduction to practice of
the invention to the employer’s business, or actual or demonstrably
anticipated research or development of the employer
For google, that's pretty much all software related projects.
Given that you work on your own time and don't use company's resources.
What did he say that makes you think that?
"All of SREs have to pass a full software interview to get hired"
There's two positions called "SREs", SRE-SWE and SRE-SA. SRE-SWE has to pass a full software interview, and are equivalent to SWEs working for other departments. SRE-SA are not expected to have Google-level software engineering skills, but make up for that in other knowledge areas.
Interesting metric. I wonder why no "social" VCSs report that metric?
What the heck is the other 991000000?
I skimmed this. Mostly just stuff any competent company would/should be doing. it's google though, so they act like it's super awesome.
Lots of things aren't source files: test data, config files, build files, metadata, documentation, etc.
Yes, you're absolutely correct. But here's the thing - it was actually Google that pioneered many of this. Many of the big/competent companies that are following these practices are because of Google's "DNA" leaking into those companies (via former employees bringing along the best practices learned at Google, etc.)
A specific example - the practice of keeping the entire codebase at the company under a single "source" repo. Pre-Google - it would've been considered outrageous to have the entire codebase of a sophisticated software company keep their entire software contents under a single repo. But Google did it, and other companies have followed suit successfully (as Google DNA has leaked to other companies).
Yes, of course keeping code in a single repo is not a "new invention". Linux is a single repo; many smaller companies have only a single repo because their only product is a single web app. Google keeps nearly 100% of their entire codebase in a single repo - and that was definitely a novel approach at the time.
Says right in the article: various config and dependency files, presumably both as caches (where everyone would generate the same product) or as a record of where things stood on at time t.
> In some cases, notably Go programs, build files can be generated (and updated) automatically, since the dependency information in the BUILD files is (often) an abstraction of the dependency information in the source files. But they are nevertheless checked in to the repository.
You can get an idea of what it looks like by reading the Bazel docs: https://bazel.build/versions/master/docs/be/overview.html
Storing a few text files at Google doesn't cost millions of dollars, BTW.
There are thousands of SWEs working on systems to save money for Google.
That "Hello World" Flask program that was 1 nice cute file? It's about 20 files deployed in Heroku.
Sometimes I wonder if things really need to be this complicated.
Many companies should be doing this. Few (that I know of) are doing this.
Making data-driven decisions also should be a thing, yet many still make them based on nonsense like politics.
The issue here is that politics are unavoidable. Being more data-driven is just another way of running your political process. And yes, it's a better way as long as you know its limitations. Collecting data and sifting through it to extract useful information takes time, creative thinking, and even "instinct" to figure out the right questions and hypotheses. Furthermore if you're going to collect data on dev workflow you better not have incentives there for employees or they will be gamed.
One of my pet peeves is technical people who worship so strongly at the altar of rationality that they are blind to their own biases. Even the most guileless and logical engineer still has an emotional life and worldview that forms the building blocks of what turns into "politics" when you get a large group of people together.
There are billions of dollars of difference between "would" and "should"
Who is "they" who act like it's super-awesome?
Ps: goog employee