HN user

gresrun

1,169 karma

[ my public key: https://keybase.io/gresrun; my proof: https://keybase.io/gresrun/sigs/qslnYax7ZVzINm7KbNQW2xvnaDTRDtua49lhpMWt3vw ]

Posts5
Comments102
View on HN

"Rich asshole makes demeaning comments about situations they don't know" More at 11.

Seriously though, how out-of-touch do you have to be to think that entire organizations full of smart people are so incompetent as to have 100% bloat?

  Could you lay off 50% of Google today and still have a functional, competitive product tomorrow? Yes.

  Would you still have a functional, competitive product in 2 years? No.
Engineers are building and maintaining the product, SREs are keeping the jobs, servers and infrastructure humming, sales is bringing in new clients and keep existing clients happy, marketing is... OK maybe Google does need a marketing overhaul...

Deep cuts will also signal to employees and competitors that blood is in the water. Any remaining loyalty would evaporate and MSFT, AAPL, AMZN, & META would all be eager to scoop up that talent to build competing products to Google Search & Ads and bolster their cloud & AI offerings.

Disclosure: Google employee

How do you handle versioning? Are there any guidelines/rules one must abide by?

It looks like you using Flutter's Dart<=>JSON serialization; do you recommend using built_value for immutable data structures?

Do you support protobuf/cap'n'proto?

While I'm 100% positive the details of operational concerns like this are classified, there are 2 distinct types of submarines today with 2 different objectives:

1) Attack Submarines (e.g. Los Angeles-class & Virginia-class for USN) which usually roam within a designated operations area, surveilling, tracking, and generally keeping tabs on other nations' surface & sub-surface fleet dispositions. These subs typically have multi-week sorties and may intermittently surface for surveillance & comms.

2) Ballistic Missile Submarines aka "Boomers" (e.g. Ohio-class for USN) which are given a strategic area in which to operate and their objective is to remain silent & undetected, waiting for the hopefully-never-coming order to launch their SLBMs. These subs usually have multi-month sorties and often don't surface until the end of their patrol.

Context: Staff Eng @ Google for 7+ years

1) This is solved by 2 interlocking concepts: comprehensive tests & pre-submit checks of those tests. Upgrading a version shouldn’t break anything because any breaking changes should be dealt with in the same change as the version bump.

2) Google’s monorepo allows for visibility restrictions and publicly-visible build targets are not common & reserved for truly public interfaces & packages.

3) “Code churn” is a very uncharitable description of day-to-day maintenance of an active codebase.

Google has invested heavily in infrastructural systems to facilitate the maintenance and execution of tests & code at scale. Monorepos are an organizational design choice which may not work for other teams. It does work at Google.

In sidemount diving, each diver carries two completely independent tanks & regulators, one on each side of their body.

While it is used primarily in cave diving because it is more streamlined and less likely to collide with cave ceilings and features, I find it also quite comfortable for recreational dives with a pair of AL40s.

It’s also a fun conversation starter with other divers who are curious about my gear!

At least in FL, slab-on-grade with concrete block for the first story + wood frame for additional stories is incredibly common because it is far less susceptible to termite & moisture rot damage than slab + wood frame or wooden pier + beam.

5+ yrs @ Google, Google is my 5th company.

Google has all the building blocks for great backend services and front-end development and, if you know where to look and have some experience with them, you can build a rock-solid product in <6mos, also assuming you have a team that can execute and the political will to ship it.

Politics/consensus building is where the real roadblocks lie in Google, and presumably other large companies. Trying to make high-level product & technical decisions when you have 10 stakeholders with 3 VPs, all in different orgs, is serious exercise in patience; months of emails & meetings await you.

Compose can also be implemented easily:

    extension NullableExtensions<T> on T? {
      R? map<R>(R Function(T) transform) => this == null ? null : transform(this!);
    }
    
    V Function(V) compose<V>(Iterable<V Function(V)> functions) =>
        functions.reduce((composedFunction, function) {
          return (V value) => composedFunction(function(value));
        });
    
    num add3(num val) => val + 3;
    num multiplyBy10(num val) => val * 10;
    num subtract5(num val) => val - 5;
    
    final doABunchOfMath = compose([add3, subtract5, multiplyBy10]);
    final optionallyDoABunchOfMath = (num? value) => value.map(doABunchOfMath);

    doABunchOfMath(10); // 98
    optionallyDoABunchOfMath(10); // 98
    optionallyDoABunchOfMath(null); // null
The nullable syntax (${Type}?) also makes it clear to readers that this is a type which may or may not contain a value. If you don't supply the trailing '?', Dart will enforce that the value must exist at compile-time and you can write your functions without worrying about nulls sneaking in where they're unwanted.

In effect, int? is almost nearly Option<int>, except you cannot represent Option<Option<int>> with Dart's nullable syntax.

Check out https://nullsafety.dartpad.dev/ to play around with the possibilities!

My recommendation is to hone your "soft skills": make sure you're on top of communication (be quick to respond to clients and don't let emails sit for more than 24 hours), be patient (working with clients means a wide variety of team dynamics and work paces), be humble yet confident (clients like help but they also want to "be right"), and prepare for the politics inevitably dumped onto outside consultants (consultants often are called in to make hard calls that internal teams don't want to make for political reasons).