I could do that in a weekend (2016)
danluu.com
danluu.com
Not to mention these notifications cross multiple devices so depending on how the teams are split there might be totally different teams managing the frontend toggles to change them and the backend services that persist those toggles... and then maybe a team or two to actually handle the sending.
Maybe another team that's just dealing with the WebSockets - gotta get notified about new messages if you have the app open, too.
Though I kind of hate this approach. As when you begin with just 10% and keep tacking on things for edge cases, you tend to get a crummier solution in the end than you otherwise would have. But that's why refactoring is a thing right? Oh wait, management is against that because they don't acknowledge technical debt...
Let me just slip this in here: https://www.youtube.com/watch?v=P4VBqTViEx4
https://www.chromium.org/_/rsrc/1277241373652/chromium-os/ch...
So you can silence notifications, but unless you're good at ignoring those little red dots, you'll still be distracted.
That’s just my opinion as a Slack user but as someone who’s worked on notification and badge systems I appreciate the honing that’s been done here.
So is it a solution to a problem or is it just papering over a completely different problem?
I wonder if there are ways to design software such that we can get visualizations like this generated from the code "for free". It could definitely be really useful when diff'ing code, or even just for general communication in meetings etc...
Perhaps there are some academic/esoteric languages that do things along those lines?
I'm more interested in an open source tool, that can run locally with TypeScript.
Anyone knows a tool/package?
It's also worth mentioning that this diagram doesn't capture dataflow or the relationships between the subsystems needed to make this work. The logic for notifications requires interaction with user preferences, channel membership, comment parsing, thread management, and more[0].
All told, you may still be looking at (low) thousands of lines of code, with maybe 1.5-2x times that amount for test code.
[0] I'm just guessing how the app is structured internally. I have no idea what it is actually like.
Also now should include adding random old stuff to notification.
I would also imagine that there are a variety of other features which require similar flow charts.
Apologies to William James' apocryphal quote.
A large fraction of the time, the PM just goes "that is correct", and the spec / ticket / whatever gets updated. When the answer is not "that is correct", you do lose out on whatever work you've done since sending that message, but writing code you eventually throw away isn't the end of the world. Also "that is not correct" responses often highlight areas where either the developer misunderstood what the PM was envisioning or the PM has a misunderstanding of what the system can do or how their proposed feature interacts with something else.
For this to work, you need:
1. Some variety of asynchronous channel that the developer can push stuff into at whatever frequency they want, and that the PM periodically catches up on entirely.
2. The developer to have a working understanding of how existing systems work and the system as a whole, from the business level.
3. The flexibility to modify specifications between the initial conception and implementation.
If you have all of those things, the PM doesn't necessarily need to think through the entire workflow beforehand -- it's nice if they can do that, but you can still ship working features without that and sometimes that is the pragmatic way to do it.
Systematically articulating all of these different conditions isn't necessarily the strong suit of a PM, but they're generally quite capable of understanding and providing input to such documents.
Code is generally the easy part once you know exactly what you're doing.
Not least because it's really the product designer and product owner's job to make this kind of chart.
I expected mobile notifications to fire no matter what... but they will only fire if you are not on any other client (desktop) and if the app is not running on the foreground.
Then for each check its a tour into another 60k beast with the main flow in a much handier 2k loc if-clause. And actions to be done are sent relatively straight forward from there, where needed.
But its OK, avoiding objects isn't too bad, its but after 30 years a lot of things in flows get added multiple times out of fear of breaking stuff, and it adds visual bloat.
Not mentioned in this flowchart is that sometimes one element of the flowchart breaks previous assumptions and required refactoring a bunch of code. Oh well!
However, I worked for a company who had a whole team of engineers and QA people working for months on what was basically a Django CMS, but with a large dose of "not invented here"-driven writing of everything from scratch. I'd finally gotten tired of it, so I spent a weekend at home implementing it in Django and being done with it.
I did learn two very important lessons, though:
- The other stakeholders really did not like someone demonstrating a working prototype of something they'd been doing unsuccessfully for months, and I got a thorough chewing out for disrupting their processes.
- I really didn't want to work for such an organization, and was much happier after moving to a smaller, more nimble company.
The cleanest code I've ever written has always been on the second or third try. Write it once, test it against the real world, then rewrite it to take the new discoveries into account. It's too bad we rarely have the luxury of breathing room to rewrite things.
The cleanest code I've ever written (and got complimented on by others) was when I was the main dev on a rewrite of a legacy system. It's easy to focus on clean/well-tested code when you don't have to worry about business decisions and customers' main concern is that nothing changes, even existing bugs!
Anecdotally, "not invented here" is consistently the most egregious source of unneeded complexity I've seen in my career.
In my long and painful experience in software development, almost no stakeholders like being shown they've wasted time and effort on something even if they were told from the start it was a waste.
(Although I suspect the kind of people who would be pleased to see a working prototype are also the kind of people who would listen to reason in the first place...)
> I got a thorough chewing out for disrupting their processes
Had that a few times. Been eased out of contracts for it too.
In short, don't embarrass your coworkers.
> In short, don't embarrass your coworkers.
This can't be overemphasized. And if you're in a situation where you have to decide between embarrassing your coworkers and going along with terrible ideas that waste time and money, then you may wish to decide to change part of the equation (e.g. removing yourself - or your coworkers - from the situation).
They aren’t there to solve problems. They’re there to receive their paycheck :/
The day I joined, one of the engineers told me to brace myself for the codebase. I figured it couldn't be too bad, after all, it was just a Rails app. Whew boy, was I ever wrong...
The code was needlessly complex in the worst ways. I'm talking constructors to create constructors, ill-named models that belied their true purpose. The entire thing was a self-referential mess of spaghetti. No one really knew how the whole system actually worked. The app probably had over 400 models, and half of which were probably obsolete.
It was obvious that over the years, no one ever took the time to clean up the code, and people just kept pouring more mess on top of it to meet deadlines. With such a messy codebase, even the smallest change that should have taken hours would take days or weeks.
Sure you can hack together a small Google clone using Elasticsearch in a weekend. Can you index all the worlds information and serve the worlds search needs with your little MVP? 99.99% chance no, even if you were given a few hundred engineers to scale it.
Even if you could do it technically, where are you coming up with the money to do so? That's not seed-round or even series A round money to do that. That's series D, hundred+ million dollar swipes of a VC's credit card just to get off the ground. Microsoft threw billions at it with Bing and still never became more than an also-ran. The only place that seems to have a real chance is DuckDuckGo, and I'd be very interested to see how their story has played out up to this point.
Google benefited greatly from growing as the web was growing. Trying to index the world's information in 2020 is an astronomical task compared to indexing the world's information in 98, 99 era.
That's an interesting perspective when you consider that:
1. Bing has at least 5x the market share of DuckDuckGo in the US (and even higher worldwide)
2. DuckDuckGo uses Bing as its main source of search results.
Is this still the case? I thought they now produce their own results.
https://www.reddit.com/r/duckduckgo/comments/g8wukz/duckduck...
Take a couple million preselected strings they needed to match to and then run them through Bing, page through the results, and build up the corpus I needed out of something like mechanize / nokogiri / headless browser.[0] Then clean up the data the normal data science way then do whatever mathy stuff I needed to layer on for whatever app they needed. There you go mister client something that has billions of dollars of R&D behind it and cleaned up for your specific use-case. You want something better? Go off and hire a team of Phds and spend a couple years and 50x the money I charged you to get your RoC curves (or whatever) looking 10% or 15% better.
Haven't done this in a couple years due to a startup and then after that randomly finding a client I liked working with so much I haven't needed to take on random jobs again, but I'm sure it would still work.
[0] I had also written custom tools to make this easier / saner. Also inspector gadget + CSS selectors goes a long way too.
Also, lol, I spelled it "RoC curves" I clearly didn't proofread this.
Edit: I knew I wouldn't get the capitalizaton right, AMD's is ROCm for "Radeon Open Compute" and who knows what the "m" stands for.
This is too simple of an answer. By these metrics Google+ would be a success. Also, the total funding amound of DDG is 13M (see Crunchbase). While that is serious money, that's not series D money.
Moreover, there are counterexamples of companies that did build an app in a relatively short amount of time, kept a small team and made millions per employee. I don't know of many [1], but I think WuFoo is an interesting example, founded in 2006 while SurveyMonkey was founded in 1999. WuFoo exited for 35 million in 2011 with a team of 9, I think (there's a YC YouTube video about this somewhere).
Disclaimer: I'm an armchair quarterback.
[1] I don't know of many tech companies in general.
> This is too simple of an answer
Writer implied necessity, not sufficiency.
And yes, there are actually a decent amount of people who say, literally, "I could build that in a weekend". Not sure how many people say that about Google, specifically, but it comes up often enough. This post was also from 2016, and I do feel like it used to come up more often in years past than it does now.
And that’s true. The other 10% is what gives you competitive advantage as a product.
The truth is that _if_ the market was empty at the time; then those 90% would give you enough runway to finish the rest of the 10% with a certain high enoufh probability.
To wit, Google has 80k employees now, in 2010 it was at 10k and the number only drops as you go further back. I think it's pretty easy to say that Google was doing more impressive things at the beginning of the century, and certainly the climb was greater. Within the last five years, there was a moment when Google had 4 competing chat apps. This is pretty rank inefficiency. If you were to take 80k people (not all are engineers, obviously) and sit them down and ask them to use their talents to build separately, you'd end up with a lot more innovation and productivity, I'm pretty certain of that.
The entire point of a minimum viable product is not that you have a complete, flawless app, but rather that you get something up you can iterate on quickly. That can be built in a weekend (I'm a slow worker, but I know people that can do crazy stuff in a night and interest). My personal criticism (and something I'm testing), is that our current processes are not harnessing all the gains in productivity we've seen over the decades, nor the ability to do that because it is very cheap to do so is not happening on a large scale. It's not totally apparent why it is happening, but it isn't.
I realized late that people take this criticism personally and feel like you're saying they are stupid or don't work hard or it is all so easy, but I ask you to consider the nature of our industry and how easy things are to build and then ask you why we don't see real competition across so many products.
The moats of many companies are perceived. The goal isn't to build Google in a weekend, it's to take the first step and give yourself an opportunity.
edit: my numbers are off, it's 25k to 100k
You're misunderstanding how large companies operate.
Their job is not to produce massive innovation -- that's what startups are mostly for, because most innovation actually fails in the market. Once innovation is proven, a big company like Google or Facebook can buy it to scale it larger and with less risk than the startup could have on their own.
Google's job has been to increase revenue, and they've been doing a great job at that. The productivity increase happens from building enterprise features, hiring gigantic sales teams, etc. Building Google Cloud.
And separate chat apps is necessary when WhatsApp and Slack and iMessage are eating your lunch. You can't risk having a single chat app that fails -- so you build one (Duo) that competes with WhatsApp and iMessage, another (Hangouts Chat) that competes with Slack, without pulling the plug (yet) on the legacy Hangouts.
So if you took all 80k people, as you suggest, you'd wind up with a mess of startups which will mostly fail. You're not going to wind up with Google's actual increases in revenues, that's for sure.
Their constant failure to make a dent in the chat app space is surely embarrassing, but having a few parallel efforts is a drop in the bucket in terms of efficiency.
Given that I agree with this premise, it's interesting that I come the exact opposite conclusion. If 99.9% of the work is in the iteration after the MVP, then when someone says "I could build that in a weekend" it's totally fair to say "'That' is only 0.01% of the work". Hard work that it may be to put out an application, none of that matters when no one uses it. Conversely, easy work that it may be to come up with an idea that has already been done before, if it's successfully marketed and developed into a product with traction and then ends up being the first of its ilk to be the runaway success, then you end up with Google instead of Lycos or Yahoo.
I think his point is that reducing successful companies and products to implementation is to miss the forest for the trees. Traction is hard. Execution is everything. If it was easy, everyone would be able to do it successfully.
Figuring out how to maintain a small business pace of innovation while achieving the consistency and economies of scale of a big business is basically the tech industry's quest for the holy grail.
Amazon's big success stories recently have been about providing the infrastructure for other businesses, both in its retail storefront and with AWS. This is one of the tried and tested strategies for big businesses to exploit their greater resources while not actually having to do the grunt work to create new products or services that end customers are willing to pay for.
You think AWS was planned ahead for years and everything that runs on top of it?
If AWS was such a logical consolidation why has Amazon such a big market share of the cloud and can even Google & Microsoft barely catchup with the innovation?
Did you ever speak to an engineer working at Amazon or is this some feeling you have??
I talked to Werner a couple of times and everything he told me disputes your personal assumptions.
The commoditization of logistic and compute infrastructure is real innovation although it looks like consolidation from the outside.
But imagine if you could take the more capable people who work on Amazon's high-tech systems like AWS or logistics automation, bundle them into well-composed teams of a few people each, and give each team say $10M in funding. You've potentially just created more highly capable startups with enough runway to do something worthwhile than YC has funded in its entire history. Tell me with a straight face that Amazon as a whole is innovating as much as the combined portfolio of YC from day one.
Is the annual revenue of all YC companies combined larger than Amazon? (I really have no idea but the it would be the only objective measure of your comparison, brownie points if you reply the answer)
Innovation? Probably not much. Running on cloud infrastructure is hardly innovative in 2020, there are several other viable choices apart from AWS, and of course before cloud people were running systems in data centres for a long time.
In short, infrastructure like AWS might make some things easier, but it doesn't create much potential to do anything radically different. Big businesses consolidate.
Is the annual revenue of all YC companies combined larger than Amazon?
I don't think we can tell, because a lot of YC companies are private and don't necessarily publish their figures. Amazon's reported revenue rate is in the region of $300B. YC has a portfolio that includes unicorns like Stripe and DropBox, but also a long tail with many less successful or now-failed businesses.
It seems unlikely that the YC portfolio out-earns Amazon, but this isn't really a useful comparison. For one thing, my figures before were only looking at the tech side of Amazon, and completely ignored major factors like Amazon's huge retail operation and most of its acquisitions over the years. For another, it would be no surprise for the big business with huge volumes to bring in more revenue. Small businesses innovate, and innovation is often more about potential revenues in the future than actual revenues right now. Big businesses consolidate, and consolidation is all about scaling up once they've found something that works.
I think there's an analogy here for for profit companies. Maybe if instead of adding a tiny marginal dollar for BigCo, you could add a big marginal dollar for SmallCo, and society's per capita productivity is lower? I can't pinpoint whether the analogy works for companies, but I suspect it does.
It is very annoying to this post on a 28" monitor... the text runs from left to right with no margin spacing.
The problem is it's not 1994 anymore, monitors are no longer 800 pixels wide, so it looks like shit and is impossible to read. It's well accepted that 70-90ish characters per line is best for readability, and instead now on an average monitor unstyled HTML gives you like 250.
It’s insane that it’s 2020 and some people still refuse to use CSS haha
Personally, I did not experience any problems reading it on my ~50cm wide monitor.
You might consider setting your browser's default font size to something appropriate for your DPI.
Rotate your monitor by 90 degrees for a better reading experience. If this is not possible, buy one that can.
Until it arrives, use the Reading View of your preferred browser.
I've tried it. In portrait mode, my old 24" 16:10 monitor is already tall enough to wreck my neck and be really uncomfortable to read. I wouldn't even want to try that with my current 27" 16:9 monitor..
The nuisance for me is actually rotating the monitor, particularly if OS support for detecting such and automatically rotating the view is missing. So while I like portrait mode, I tend to just keep it one way or the other, based on my overall monitor configuration.
Yes, of course.
It's more like looking at an ordinary A4 page.
However, in this particular case the body starts with a space character, so it should have a body tag.
A minimal valid HTML5 document looks like:
<!doctype html>
<meta charset=utf-8>
<title>blah</title>
<p>I'm the contentBut also, no, I've definitely seen a lot of companies with an insane headcount simply to "do more in parallel" or "deal with the complexity of the system". Sometimes, having too many people to keep busy is really bad.
I've been working on TinyDev for about...two months longer than I thought I would have, and I still have probably a month left to go before it's completely ready. Just the amount of ops work you need to do in order to lock down your stack is absolutely insane. That's assuming you invest in ops work in the first place, which many places don't, hence technical debt and war rooms and fires and the slowness of project management resulting in massive backlogs and the like.
I'm going to do a writeup hopefully up this weekend on backend level to VPC level work, just so that I can lock in my learnings. What I can say now is, the only easy day was yesterday.
Anyways, I think we're all big boys and girls who can figure out how to use reader mode or resize a window in 2020. That's the whole beauty of the web browser.
danluu.com – more-readable text
body {
max-width: 65ch;
line-height: 1.3;
/* center the body in the viewport, and then add padding to make up for the default margin we overwrote */
margin-left: auto;
margin-right: auto;
padding-left: 0.5em;
padding-right: 0.5em;
}
I’ve had that style on for so long I forgot about this site’s terrible defaults. body {
max-width: 600px;
margin: auto;
line-height: 1.7em;
}
Much better :)Companies tend to vastly over-complicate things and to support that end up having ever growing teams to support the ever growing over-complexity and feature bloat.
I can’t tell you the number of times a team has said it takes so long to deliver something with 3x the number of engineers because they need more testing, backend and such but meanwhile the core product features that customers care about are delayed and not materializing. It’s not that these other things don’t matter but all the “other stuff” shouldn’t take priority over having a lean and mean product that works and people use.
Thus it’s less “why does this company have 100 engineers” and more “why does this company not just exist as a far simpler and leaner product?”
I'm sure there are bloated teams, but apart from those the argument against a very lean product is growth of the consumer base. You make a lean product, get some users. They love it. You do a little research into customer churn though, or followup on marketing efforts to people that didn't yield, and find out that feature X is a common thread: you don't have feature X. So you build feature X. You gain incremental customer & revenue growth as a result. Then the process begins again. The problem is that at some point you reach a point of diminishing returns, and if you don't recognize that point, you'll still go over the bloat line.
Totally agree with you; I think the sentiment behind "I could do that in a weekend" is that shipping the core functionality can be done quickly, and iterating on the "other things" can be done after launch in many cases. Not everything has to be as robust as possible on day one. Google didn't have BigTable, MapReduce, and Borg the day the search bar went live. Shipping features is my favorite part of the job, it'd be great to have those wins as often as possible and cross other bridges when we come to them.
I don't think those are unfair questions / concepts.
document.body.style.cssText = 'max-width: 35em; margin: 0 auto; padding: 1.5em; line-height: 1.4;'; 0;
In Safari, Firefox, and Edge, I recommend just using reader mode.
It's the other 95% of what the original business did to become successful that usually gets overlooked.
I guess now that we know it's more than just the program, the startup adage equivalent is "Talk is cheap. Show me the product."
Most of the explosive growth of those companies was built on essentially weekend projects by a handful of coders, or even one person.
You absolutely can write a billion dollar app in a weekend. If you have the right idea at the right time, with the right connections.
Capital - massive capital investment in data centre around the world, for low latency, particularly for Google Suggest. Capital is an enormous barrier-to-entry for web startups. Google made search capital-intensive.
PR - consumer habit, supported by those myriad projects that position google in consumer minds as "leading tech company". It matters that you are the best; it matters that decision makers know you are the best.
Data - being first gives you a headstart, but competitors will catch up if you don't run at least as fast (and ways to improve that consumers care about - more running track). If you can something you have to do this that competitors lack, it's easier. So google madly collects data, and uses it to e.g. NLP of queries
Backend - Sergy did a lot with little hardware in the beginning, and that has continued, I believe including their own silicon.
All that gives google time to rival better search - and money buy it.
1) there is no viable search competitor to Google, therefore
2) search must be a much harder problem that takes more engineers than we expect, therefore
3) it's hard to reproduce Google's success because you can't actually do what 10^n engineers do in a weekend.
I think that's plausible, but it needs to be emphasized that search could very well be not that hard, but no one has overtaken Google because they have inferior marketing, distribution, present too high of a switching cost, etc.
Just because Google has a bunch of engineers solving that problem (and reproducing what Google does seems complex for correct reasons pointed out in the article) doesn't mean that the engineers are actually adding that much marginal value. My guess is that even if Google invested less in search engineering, and didn't solve real time indexing and some other edge cases this well, it would still be leading the field.
I'm not sure what to call these, but you know the rich results Google searches provide these days? Like showing the definition of a word, or a snippet of data from Wikipedia off to the side of the main search results. It's a useful feature, and it was first developed by DuckDuckGo not Google. But it didn't matter, because it was so easy for Google to adopt a feature like that into their own product.
My boss paused for a minute and then asked “What were you watching?”
Additionally, from their own site: http://www.rideaustin.com/faq
> How much has it cost to build RideAustin?
> The tech community contributed technology to power the app that costs millions to develop - but it also took over $7 million in cash donations and significant in-kind services donations to make RideAustin what it is today.
That is non-trivial.
The devil is always in the details.
I wonder if this was reposted here for the same reason.
Kinda intrigued as to what that means? What features in the billing increase conversion by percentage points, but are not available via an outsourced payment provider like Stripe?
Or in other words - it's easy to bake a bread loaf but running a bakery is much more complicated.
(I know, downvotes incoming. Worth it)
1 part arrogance.
1 part optimism.
1 part naïveté.
Do not over mix. Bake half way.
If that were true, wouldn't you have to hire every developer who could possibly build your app in a weekend to succeed at that? It just takes one to start a new competitor.
Building a new competitor is more than just a matter of code, there are often network effects, a lot of marketing, and often still a cost to switch from a less than optimal but good enough solution to an optimal one.
You see this with Facebook buying Oculus in 2014, Microsoft buying Skype in 2008, Google buying Waze in 2013, Apple buying Shazam etc.
Also this is not privy to the tech industry. Large companies of all sorts of industries use the growth by acquisition strategy.
well haven't they? a competitor doesn't need to be a copycat. like how, e.g. google bought deepmind
Let's first build a benchmark. Without it, you're basically in the dark.