I bought HitTail (a SaaS app) in 2011, grew it, and sold it last week - <AUTHOR> http://blog.hittail.com/2015/12/meet-the-new-hittail-team.html <comment><USER2> It's been great listening to Rob's story about HitTail on the Startups for the Rest of Us podcast [1]. I highly recommend this podcast for the coder/entrepreneurs out there. It will motivate you and keep you focused on starting small and growing from there.

[1] - [http://www.startupsfortherestofus.com/](http://www.startupsfortherestofus.com/)

<comment><USER3> Agree one of the best pod casts out there.

</comment></comment><comment><AUTHOR> Here's the original story of the purchase and revamp: [http://www.softwarebyrob.com/2012/01/25/the-inside-story- of-...](http://www.softwarebyrob.com/2012/01/25/the-inside-story-of-a-small- startup-acquisition-part-1/)

<comment><USER4> Also a podcast interview covering more details about it (many technical) [http://techzinglive.com/page/921/165-tz-interview-rob- wallin...](http://techzinglive.com/page/921/165-tz-interview-rob-walling- hittal)

</comment></comment><comment><USER5> Congrats Rob! Enjoyed following his various posts and presentations about HitTail.

I suspect this is the listing for the sale on FE International:

[http://feinternational.com/buy-a-website/5262-saas- keyword-t...](http://feinternational.com/buy-a-website/5262-saas-keyword- tool-9-years-old-73k-net-mo)

I'd also be curious if Google's recent updates ("not provided" keywords in analytics, etc.) have impacted the ability to make this an effective product in the long run.

<comment><USER6> No doubt the long-term outlook of this product has changed dramatically since its initial conception and the 2011 acquisition. It's an analysis and recommendation engine built on search data for each site. That data used to be directly available to and collected by HitTail, since search terms were in the referring URLs of every visit to the site coming from a search engine.

Now that Google virtually never includes search terms in referring URLs, the only way HitTail can get the data it needs is via Google's APIs. Google can change the API, remove the API, or change the terms of use, and HitTail's SOL. Already they only have access to a subset of search data the API makes available, rather than _all_ long-tail keywords, which they had a few years ago.

Will Google remain friendly to tools like this in the future? Who knows. That's a risk the new owner hopefully evaluated before taking it on.

<comment><USER7> I believe HitTail has it's own history of terms it's collected over the years before google took it off the table

</comment></comment></comment><comment><USER8> Congratulations, Rob, it's nice to see counter-examples to the "it's all chance" worldview.

I looked at the FE International listings, and I have to ask of those who know about these things: What would lead somebody to sell a going-concern business for 2x earnings? There were several examples. I don't want to go straight to "scam!" but that seems too good to be true.

<comment><USER9> There's a range of answers to this question, but the simplest answer to "Why take N years of earnings today and give up the business?" is "Because then I get N years of earnings today _and can spend my next N calendar years doing something else_."

The exact setting for N comes down to a variety of factors, market conditions, and a negotiation between a particular buyer and a particular seller. As someone who happens to be long SaaS companies at the moment I would prefer N=50 but I know SaaS owners whose lives would be improved by a sale at 2. (As mentioned in sibling comments, market right now is 3ish.)

<comment><USER10> I was more than happy to score a 20 and I would have settled for 10... but don't tell the buyers.

<comment><USER11> Do you mean your buyers paid 20x your business' yearly profits?

Why?

<comment><USER10> Excellent question! But I don't have the answer for you.

<comment><USER11> But did you actually sell at 20x yearly profits?

<comment><USER10> No, I sold at 20x _turnover_.

<comment><USER11> 20x gross revenue?

Wow!

What was the name of that business and what year was that?

<comment><USER10> None of your business :)

But it's very well possible to make deals like these, it just matters that the buyer has a different idea of the value of the business for them than you do. Which answers your earlier question in a way, but the 'why' is actually probably a lot more complicated than that and I can't really speak for the buyers, the only thing I know for sure is that they had a totally different idea of where they were taking this than I did. They probably thought it was cheap.

Beauty is in the eye of the beholder...

<comment><USER11> Actually, I just compared your deal with Twitter:

12 months revenue ending 2013-12-31: $664.89M

Twitter IPO Valuation: $24 Billion (Nov. 07, 2013)

Price/Gross revenue ratio = $24B / $664.89M ~= 43x

That makes your 20x sale look like an underperformer.

<comment><USER10> Yes, there are many other deals that are better. You forgot to ask the key question though :) But I'll let it rest, none of this is for public consumption and I shouldn't have written the first comment.

<comment><USER11> What is "the key question"?

<comment><USER12> Purchase price, most likely.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER13> We just bought a SAAS business via FE International last month ([http://talentdesk.com](http://talentdesk.com)). Process was incredibly smooth. I'm happy to answer questions privately if anyone has any on what it's like on the buyer side.

<comment><USER14> Congratulations on the acquisition! Great to hear you found our process smooth, too.

</comment></comment><comment><USER15> FYI, uBlock blocks your site.

<comment><USER16> here's why:

"It will give you a script which you need to add in the head part of your blog and it will start tracking all Keywords which drive traffic to your Blog/Website"

[http://www.shoutmeloud.com/hittail-review-related-keyword- su...](http://www.shoutmeloud.com/hittail-review-related-keyword-suggestion- tool.html)

Whenever I see uBlock flagging something, I always make sure to double-check as to what it actually is. In this case, it doesn't seem like HitTail is _that_ malicious.

<comment><USER17> uBlock has had some pretty stupid political blocks, e.g. sourceforge globally

<comment><USER18> You never know which installers will get hijacked so as a precaution it's a good idea to block SF globally.

</comment></comment></comment></comment><comment><USER19> Hey Rob -

Financially speaking (and knowing what you know now) would you do it again? Will you be going through the trash to find your next treasure?

Congrats!

<comment><AUTHOR> >>Financially speaking (and knowing what you know now) would you do it again?

Absolutely, no questions asked. Several reasons:

1\. Acquiring an app with product/market fit puts you ~18 months ahead of starting from scratch. Like most founders, I'm not a very patient person. I'm now working on GetDrip.com, and it took us a long time to hit p/m fit. The slog to get there is the worst part of launching a product, IMO.

2\. Financially, this was a game changer for me. During the course of my tenure with HitTail, revenue + the sale prices funded multiple angel investments, the budget for building and launching Drip, and many other things I would not have been able to afford previously.

3\. The acquisition and revamp were also game changing for me in terms of what I was able to learn, the content I was able to produce from it (multiple MicroConf talks). Both are important to me.

Even without the sale, the learnings and financial rewards were still a major success for me.

>>Will you be going through the trash to find your next treasure?

I've already started my next one, GetDrip.com. I built it from scratch with a co-founder, and I can't count the times I've said "I'm never going to build from scratch again!"

I try not to say "never," but if I could choose build or buy I would buy. Every. Single. Time.

<comment><USER11> How do you know that the business you are buying already has product/market fit?

</comment></comment></comment><comment><USER20> I've always enjoyed Rob's take on things. The things he's worked on seem like "a good goal" rather than something completely unobtainable, like most SV style startups seem to those of us who are not there and don't want to kill ourselves working on one. I highly recommend his book even though it's a bit long in the tooth at this point:

[http://amzn.to/1OuZPHs](http://amzn.to/1OuZPHs)

</comment><comment><USER21> As a listener of both Techzing and Startups for the Rest of Us, it's fun to have followed almost the whole story since it's beginning :)

</comment><comment><USER22> Congrats Rob!

Are you looking for your next adventure? I have spent 9 months building a startup, at large scale (60 servers, 4 million data points a minute) My email is in my profile, I would love to chat and get your thoughts and advice :)

</comment><comment><USER23> Excellent! I am sure HitTail is in great hands with Stas behind the cockpit. Looking forward to seeing what comes and excellent job by FEI.

</comment><comment><USER24> Is there a writeup for the story of this sale?

<comment><AUTHOR> I'm working on something.

<comment><USER4> Perhaps you could discuss it with the techzing guys again? It would be nice to get into the details.

</comment></comment></comment><comment><USER25> Brilliant "Discount for Bloggers" strategy = loads of positive reviews.

</comment><comment><USER26> Congrats! I enjoy your podcast very much

</comment><comment><USER27> Congrats, Rob!</comment>


Picking a JavaScript Library - <AUTHOR> https://smalldata.tech/blog/2018/09/01/picking-a-javascript-library <comment><USER2> happy to see that security is part of the evaluation :-)</comment>


Let's stop kidding ourselves about APIs - <AUTHOR> http://250bpm.com/blog:55# <comment><USER3> I'm puzzled by the pushback this is getting. There are many questions about APIs which are purely technical:

What does this API do? Can I invoke it using my preferred language? What performance characteristics does it have? Is it synchronous or asynchronous?

To that we can add questions about types, latency, protocols, and so on.

But there are plenty of non-technical questions: can I rely on this service to continue operating in the future? Can I be sued for using it, or for using it in certain ways? Can I build a commercial service using the API or the data it provides? If the API provides me with data that is incorrect, or illegal (containing copyrighted material, say), who is liable? What likelihood is there that the people running the service will degrade or shut down the service, demand increased payment for access to it, or offer preferential access to my competitors? Who owns, controls or distributes any data that I share via my invocations of the API? And what happens if or when the answers to any of these questions change, and how can I influence the direction of those changes?

Whether you call these 'political' questions or not is a matter of semantics. I think they're political in the sense that they're about the _people_ running the service, rather than the technology itself. They're about who controls it, who decides the direction of its evolution, and what constraints they operate under. Those questions will depend on business, ethical, regulatory and philosophical considerations, and I don't think it's unreasonable to describe those as being 'political'.

<comment><USER4> Even many of your examples of "technical" questions seem at least partly political to me (which just reinforces your point, I think). For example:

* Language bindings: The decision to create and maintain an API binding in a particular language is mostly a political decision based on what your API consumers want. It is a trade-off between convenience for the consumer and extra work for the API developers. You will probably develop bindings for popular languages. But what if a language is very popular but also one that developers are unfamiliar with, so it would be a high cost to learn the language and develop the binding? Both the developer and the consumers are invested in the resulting decision, which makes it political.

* Performance characteristics: This can be political as well, because in a sense it's a negotiation between the developer and the consumer. How much extra work should the developer do to save the consumer some time? How much of the computation should be done "behind" the API, and how much should be pushed onto the API consumers?

* Protocols: Each protocol has costs and benefits for the API developers and for the consumers. For example Apple chose to expose their push notification service over TCP, not HTTP. This has costs for the consumers because now they have to use a 3rd party library to handle a new TCP protocol (or implement it themselves). On the other hand, Android's push notification service uses HTTP POST, which is more developer-friendly. I would argue this is a political decision (and a deliberate one on Google's part).

* Latency: Typically reducing latency costs the API maintainers more dollars, but it makes the consumers' applications more performant. This is also, in my eyes, a case of a political negotiation. How fast can we make it so that consumers are satisfied, while spending the least money? Or from the consumer's perspective, how much latency is "acceptable"? This embodies a political trade-off as well.

You could probably make similar arguments for almost every other API characteristic. The simple fact is that almost everything that involves multiple people with selfish interests is at least somewhat political.

<comment><USER3> I agree, although I think that some of those are less critical issues. For me, the reason to be aware of the politics around APIs is that APIs - <USER2> libraries - imply an ongoing relationship.

With a library, it is presumed (leaving aside the question of licensing, which is definitely political) that the decision about whether to use a library is purely technical: does it do the things we want it to do, with the correct level of performance, reliability and ease of use? You could imagine writing a test suite to determine definitive answers to these questions and, once answered, there would be no need to examine them again.

An API gives you access to someone else's product, and that product _will_ evolve. Some of those evolutions may cause your product to break. If you're a Windows application developer, you can count on a pretty strong guarantee from Microsoft that they won't break Windows APIs, which is why programs from the 90s still run on modern versions of Windows, even if this requires some complex engineering from Microsoft. There was no technical aspect of the Win32 API circa 1995 that guaranteed these things; the commitment to future support was entirely political in nature.

The same applies to network-accessible APIs today. If your program achieves some result by invoking a statically-linked library, you can be certain that it will continue to work in the future purely on the basis of your technical knowledge. If you're relying on a third-party API, you cannot, and that's the distinction that the OP is asking us to take more seriously.

</comment></comment></comment><comment><USER5> This article is very confused. It makes a case that an API is a boundary (which it is) and because there are also other boundaries (like borders) it must be a political boundary (which it is not). But it doesn't stop there. Once it has mistakenly _added_ the attribute "political" to boundary it goes on to essentially _drop_ "boundary", too. So now we are left with "political", so APIs must be about "power, money and respect" after all. Well, that's not my experience and this text does not provide a reasonable argument for this extraordinary claim. However I applaud the author for having tried to formulate a new concept that could have been interesting.

<comment><USER6> I was excited to see a contrarian perspective here, but I'm disappointed that you've just selectively quoted the parent while claiming they are wrong. I would love to know how you define political and why you think the decision to make a function public instead of private is apolitical.

<comment><USER5> It's not apolitical. But it's also not necessarily political. Sure there can be different opinions about an API and some of those might have a political motivation (for a very broad definition of the word political). But this does not mean that APIs are primarily about politics. And there is certainly a huge leap to such concepts like power and money.

<comment><USER7> [http://www.oxforddictionaries.com/us/definition/american_eng...](http://www.oxforddictionaries.com/us/definition/american_english/politics)

        The activities associated with the governance of a country
        or other area, especially the debate or conflict among
        individuals or parties having or hoping to achieve power.

Politics is not just about nation-states and the type of work usually associated with governments. Politics is what we call the various ways we humans solve our disagreements.

And yes, this can be about power and money, though political decisions come in all sizes.

</comment></comment></comment></comment><comment><USER8> Comments here are a dearth of actual examples. You can argue APIs are a Broadway musical if you don't give any clue what kind of APIs you're talking about.

For a few years I was involved in trying to get session-layer security into a networking library.

The disputes were "nominally" technical, in that they were couched in technical language, but there was a strong political dimension. Here were the talking points:

* Knowing that security code is likely to have bugs, isn't it better to do nothing and know it's insecure, instead of doing something, believing it to be secure, and being wrong?

* What cryptographic methods are acceptable? Do we defer to some standards body, like NIST? Or do we _reject_ NIST methods, because they are NSA shills?

* Do we retrofit something off-the-shelf like TLS? (Which implementation?) Or, as a project that defines new protocols, is it within our mandate to innovate on this?

Because there was no consensus on these questions, after several years it's still plaintext-only. There are, however, various "dark forks" that take minority positions, because writing code is easier than convincing people to your side.

Lack of political consensus (on many issues besides this one) is killing the project, to whatever extent it isn't dead already. And even in its death throes there is this desire to pretend there are no political questions.

<comment><USER9> > because writing code is easier than convincing people to your side.

this is a great insight

</comment></comment><comment><USER10> The author makes a good point which is that engineers have a tendency to couch emotional and political rationalizations in technical terms and then annoyingly believe that their objectivity is unassailable. That's definitely a thing.

But we must recognize that an API is fundamentally a technical construct, so you can't really have an informed political discussion about an API without exploring the technical aspects at the same time. The devil is in the details, as they say, and APIs are nothing but a big pile of details.

<comment><USER11> > ... and APIs are nothing but a big pile of details.

And so is international law. But nobody really believes that international law is fundamentally a legal construct.

<comment><USER10> Nobody believes that law [...] is a legal construct?

<comment><USER11> Let's take Treaty of Versailles, for example. Who would you say was responsible for it? Lawyers or politicians?

</comment></comment></comment></comment><comment><USER12> Don't remember the name of this adage, but there's one that says "The structure of a project tends to reflect the structure of the organization responsible for it" \- e.g. software modules tend to reflect organizational structure much more closely than they reflect separation of concerns (though, of course, the organizational structure itself reflects a separation of concerns). In my experience, that is definitely true.

This piece is, in many senses, another look at the same phenomenon.

<comment><USER11> It's called Conway's law.

</comment></comment><comment><USER13> _> And by "most important" I don't mean "covers 20% of the topic" but rather "solve it and the rest of it can be done by a monkey" sort of thing.

Here it is: API is a POLITICAL concept, not a technical one._

It would be better if author provided concrete examples of politics-driven APIs because it seems like _some_ API functions can be a 99% a technical problem rather than a political one.

Certainly some API calls might be trivialized to "just a function" but other API calls have ramifications of burning lots of real cpu, bandwidth, etc to provide them. Whether the company absorbs the expense of providing that API as a cost of doing business or monetizes it by charging users doesn't seem like it's all reducible to "politics".

<comment><USER7> Examples? Try "every API ever created".

I think you're missing the point, which is unfortunately a very common problem among programmers. This can lead to bad situations where political decisions are being made _de facto_ , without a real decision-making process.

Unfortunately, there are usually many opinions on which of the various possible solutions should be used to solve some problem. Often this involves trivial choices based on personal preference (e.g. snake_case vs camleCase). Sometimes the choice ends up affecting other important areas, such as your "burning real CPU" example. It may have far more important ramifications, too, about who has the responsibility for the long-term storage of a particular type of data and how that data can be accessed.

"Politics" is simply what we call the process by which we humans come to an agreement on this kind of question. The article's point (which I strongly agree with) is that choosing who has to pay those CPU or bandwidth costs is a _political decision_. Often, an API could be designed to make either side be the party that has to run their CPU. If you have a strong opinion about which side that should be, good! Engage in the political process and start negotiation.

On the other hand, purely technical decision usually _doesn 't need_ an API. The solution is usually obvious. We (hopefully) take the time to write up an API (or specification, or RFC, ...) for the things where there is not a single technical solution.

<comment><USER13> _> choosing who has to pay those CPU or bandwidth costs is a political decision. _

Well sure, if you put it that way, we could reframe _almost anything_ as political decisions.

      "costs" == "politics"

      "adding server racks to service the API" == "politics"

      etc, etc.

Should a coupling hosting a party at home ask their guests to bring potluck? Structuring the cost of food and deciding whether it's the host or the guests funding it is ultimately a "political decision".

I was reading author's essay while holding a narrower concept of "politics" in my head. I now get your expansive perspective on "politics" and while I understand where you're coming from, that larger framework is not helpful to me.

 _> "Politics" is simply what we call the process by which we humans come to an agreement on_

Sometimes, the API is just "published" with no process for "agreement". It either exists, or it doesn't. It may have come into existence because it was an easy technical solution.

<comment><USER11> The term "politics" is not as all-covering as it may seem at first. It refers to the process of people and human groups reconciling conflicting interests.

</comment></comment></comment></comment><comment><AUTHOR> Many people commenting here are talking about the use of the term "political". Another way to look at it: APIs are fundamentally a _social_ or _community_ thing, more so than a technical thing. "politics" applies here more in the sense of "interpersonal politics" often used to describe any non-purely- technical social process.

</comment><comment><USER14> I agree that an API is a boundary, and that boundaries can be political, but the boundary = politics argument seems like it dilutes what it means to be political. In a way, you can describe almost any person-to-person interaction as political (there are always subtleties and unspoken motives), but I'm not sure that's useful. To me politics specifically suggests covert social games under the cover of more formal interactions. Most API's though, I think, exist for pretty straightforward reasons. Yeah it's a boundary between groups, but that doesn't mean much more than that, boundaries make a lot of logistical sense.

For instance, at work we're putting an API into our product so that people can develop plugins. Is that political? I guess you could argue that it creates a dynamic of "us" (the developers) and "them" (3rd party developers), but being that this is a corporate entity, that already existed. The only thing the API does is create an explicit agreement of what we will provide and what we won't. I hesitate to say that's political though, because there's realistically no back and forth negotiating or games being played. The API is what it is, and people can take it or leave it. Is that really political? The boundary already existed, the API is just the "formalization" of that.

<comment><USER15> _For instance, at work we 're putting an API into our product so that people can develop plugins. Is that political?_

What's your motivation for people to be able to develop plugins?

</comment></comment><comment><USER16> I think it is precarious to call these political decisions rather than business decisions. If I'm deciding to return despises as JSON, XML, or both I am making a decision about: 1\. Cost to maintain one or two formats 2\. Cost to develop one or two formats 3\. Benefit of having multiple formats And some subsidiary questions like: 1\. What tooling is availabile for the formats? 2\. What will make my customers/consumers happiest? 3\. Will this have impact on how many integrations with my service get built?

These are business decisions and are reducable to financial terms. To say political is to assume that decision makers are not able to make rational decisions based on economic metrics or chose not to analyze decisions on that level.

I know not every decision make by people under various pressures are done with proper diligence/information, but shouldn't we try to frame things as they are?

<comment><USER15> This is when you know a political view is really embedded in a society: when decisions made under it are assumed to be apolitical.

A "financial decision" is completely political. It's underlined by a view about who should bear costs and who should reap rewards.

Converting to financial terms means that supporting a certain format brings certain costs to the provider and provides certain benefits to the users (which can be charged). How do you decide if it's worth to implement it? Some organizations will maximize revenue, but that's definitively not the only option, and the choice is political.

</comment></comment><comment><USER17> I was going to reply to another comment, but then my response became much more general. So this is more of a general response to those comments that disagree with the original article.

In the case of web APIs, there is always a determination made as to where the limit of the host's responsibility lies. If the API exposes more functionality, it costs more to implement and maintain, and the responsibility is on the host, not on the client. If an API is shrunk, then the host shifts the responsibility to the client. In many other fields, changes in an API spec might be called a turf war, not separation of concerns.

A personal anecdote: I currently (not for long though) support and extend a large enterprise application that is licensed by my organization, but is hosted at the licensor's data center. For the last decade or so, this application has been extended with in-process plug-ins/modules that use internally exposed Java APIs and have an internally exposed JSP tag library for UI extension. The complexity of the plug-in system, and the incredibly varied effects it has on customer deployments, has become untenable for the licensor (apparently). So as this enterprise software provider transitions their products to a multi-tenant microservices model (as opposed to the current silo'd monolith we have now), the Java APIs will be gradually phased out, in favor of REST services. Of course, this means that clients will be responsible for maintaining their own server for each extension service (as opposed to the "free" in process hosting previously provided) and will also be responsible for their own UI (including accessibility and mobile concerns), even though it can be iframed in the new UI.

Long story short, this has a lot of the extension developers...upset. Basically they've had an entire integration and extension platform that is now being mostly (if slowly) closed off to them to shift several responsibilities across the border between the licensor and licensee. There are (very good) technical justifications for changing the framework this way, but they sit alongside the political and economic justifications.

</comment><comment><USER18> Among other things I am responsible for my employer's REST API. I don't really see where an API is inherently political. It could be, if you're trying to get lots of different organizations to buy into it as a quasi standard (OAuth?), but most APIs I encounter simply provide a decent separation of concerns so external users can do what they need to do without knowing what's happening on the other side.

There's also the time and money aspect to it. The API isn't usually the top priority for most companies, so the API usually ends up somewhere between a crude interface and a mirror image of what's in the packaged product.

In most cases, its definitely a "don't let perfect be the enemy of good enough" situation.

</comment><comment><USER19> Breaking things out into APIs is one way of adhering to the Single Responsibility Principle, which has nothing to do with politics. (Microservices are a good example of this, but so are basic things about software design like encapsulation.) I think the author's assertion is overly broad.

It reminds me (although I can't find any links, not sure how popular it really was) of the movement in the open source world for not needing the "private" keyword in Java if everything's open source anyway. It's a completely misguided fallacy to assume that encapsulation only happens due to politics and proprietary software.

</comment><comment><USER20> I don't understand. What is the problem and what is the proposed solution?

An API definition is just "here's the functionality/interface I decided to expose to the outside world." There are an infinite number of APIs that can be defined, such that when designing one you have to make a lot of arbitrary choices, sometimes "political" ones. Different groups take different approaches here, and respond differently to feedback, but I'm not aware of an endemic over-politicization problem.

</comment><comment><USER21> I both agree and disagree... in the case of software, in general you usually want two boundaries, regardless of if you are the only one generating them... between your front end and your data... usually front to back, and back to database.

This is part of the reason I don't instantly like solutions that expose databases to web front ends... usually the types of permissions typically needed are made excessively hard or impossible... A resource can be owned by one person, viewed by peers, partially readable by others, and manageable by command structure (management). That's just typical.

Beyond this are the differences between users/logins and accounts... too many systems will conflate the two on the backend even though they can be presented as tethered to begin with, the backend should definitely separate the two.

Given, most APIs are political boundaries within an organization... this isn't entirely a bad things. But that is far from the only reason to create/use those boundaries... security and data integrity are two more.

</comment><comment><USER22> Okay. Technical considerations aren't the only things that matter. Correct.

It's good to recognize that API design accommodates both technical and "political" considerations, but to argue that the concept is one or the other is silly to me.

Sure, an engineering team is a part of an organization. And that team may be the only to represent technical factors (affecting complexity management and cost of development & maintenance) on the political/financial/bureaucratic/business front. The influence held by the engineering team is probably determined by the culture within the organization.

APIs of all kinds directly or indirectly are or support a product. Of course technical factors aren't the only ones that influence product development and therefore API design.

If you zoom out far enough, everything can be viewed as a political/business issue. So why all the fuss about it?

<comment><USER15> _If you zoom out far enough, everything can be viewed as a political /business issue. So why all the fuss about it?_

Because what you plainly stated is often (usually?) not acknowledged, and pushed back against if pointed out.

</comment></comment><comment><USER23> I'd like to see more follow what Balanced Payments did: use it's public facing APIs to power its dashboard. Not only that, it open sourced the dashboard.

[https://github.com/balanced/balanced- dashboard](https://github.com/balanced/balanced-dashboard)

</comment><comment><USER24> > Programmers typically don't like politics and tend to argue using technical > language. But that doesn't make politics go away, it just makes it > subconscious. In fact, I am tired of people pushing their political agenda > under the disguise of technical argument.

That's well said, I'm tired of this too.

</comment><comment><USER25> Another good way of thinking about API is a user interface. And by the way, yes, when your "helper function" is exposed publicly to the whole project, and every developer ended up using it in 10 different places, you can safely consider this function to be an API.

</comment><comment><USER26> This is kind of ridiculous because politics is simply the interface (i.e. relationship) between two or more people/groups/entities/whatever. It is stating the obvious as though it were revolutionary: "Rain is simply water falling from the sky!! Wake _up_ people!" _Of course_ APIs are a kind of political boundary. Why is this some kind of genius revelation?

</comment><comment><USER27> "Arguing that API is a technical problem is like arguing that state borders are a geographical phenomenon.

Yes, boundaries often coincide with rivers and mountain ridges. But often they do not."

This is geography, i.e. humans in space. Rivers and mountains are topography and geology material.

</comment><comment><USER28> Yes, APIs are political. Just like everything else.

Politics is just another lens for looking at the world.

</comment><comment><USER29> I'd never really considered it before, but of course the author is correct. Control of an API is the control of a language, and as with 1984's Newspeak, control of language is a powerful tool.

Amazon's control of the dominant language to describe infrastructure (its own web services API), for example, gives it a competitive advantage beyond its head start and inertia.

Of course, an unused API is as apolitical as an unused language, and noting that an API is political due to its usage (and is more political the more used it is) may be a useful extension of the idea.

<comment><AUTHOR> See also "Code and other laws of cyberspace"; APIs are part of that. They say how other programs can and cannot interact with yours.

</comment></comment><comment><USER30> Of course I disagree with the article. APIs are not the political problem, technology is. It's inherent in saying that you're going to "change the world," be "disruptive" or "revolutionary." When software dies, it goes unmaintained and unused in favor of something more popular. These are qualities of political platforms. The word "platform" is used in technology in a remarkably similar way. So it's not an API thing.

<comment><AUTHOR> Then it should be a logical extension that APIs are analogous to the relationships between political platforms, which is the premise of the article. Along similar lines, consider that people talk about APIs as "contracts". More generally, the article makes the point that APIs are more social than technical.

Terminology aside, I think it's reasonable to note that the interface boundaries _between_ software have noticeable non-technical aspects that the interfaces _within_ software do not.</comment></comment>


Introducing New World Lenses - <AUTHOR> https://www.snap.com/en-US/news/post/introducing-new-world-lenses/ <comment><USER2> Looking at the F8 Keynote and the Computer Vision stuff that they are showing off now just reinforces to me that Snap is going in the right direction and is ahead. At this point it's who has the most data to feed the models and for me, that's Snapchat. Imagine this being put in personal drones, etc.

</comment><comment><USER3> Looks awesome -- I am suprised this is able to render on a phone but I guess they are getting powerful.

However, I would say this is not anything 'game-changing' or really that new. This looks a lot like basic Hololens's features, so I wouldn't be surprised if this is a feature that could be cloned easily by FaceBook in a couple of months. To be honest, I feel like Microsoft is truly the pack leader in terms of AR but the Hololens's are so expensive I can't see them becoming a market leader

</comment><comment><USER4> This reminds me of the Silicon Valley episode (S3E1) where Richard Hendricks was going to be in charge of an app for adding mustaches to people.

<comment><USER5> I think Snapchat _was_ the company they were trying to emulate in that episode :D

Mike Judge's parodies are on point.

</comment></comment><comment><USER6> It's just shocking to me how much the aesthetic drawn up by sci-fi in comic books and movies have entered the mainstream. To me, it just seems so cheap, gaudy, and ugly. But I suppose the idea is to keep it frivolous to lock itself in the domain of 'fun' and 'jokes' to deflect seriousness and criticism.

<comment><USER7> The anti-Glass

</comment></comment><comment><USER8> If this is AR, Palm was multi-touch.

</comment><comment><USER9> These kinds of filters have been available in Asian apps like B612 and Snow for a while. No one I know in Japan has ever even spoken of Snap, let alone used it. And this is in the land of selfies and purikura.

</comment><comment><USER10> Too poor.

</comment><comment><USER11> Now how long until this shows up on Instagram Stories?</comment>


Show HN: Free Kanban and Pomodoro Webapp - <AUTHOR> http://timeboxer.io <comment><USER2> Signup requires Google. No, thanks.</comment>


Are You Downplaying Luck's Role in Your Life? - <AUTHOR> http://nautil.us/blog/are-you-downplaying-lucks-role-in-your-life <comment><USER2> My entire life is luck. Sometimes I have a moment of appreciation where I realize it fully and laugh to myself maniacally wondering when and how the streak will end. I've never attributed much of my success to anything but right place right time. Honestly most people could do my job if they tried, I just happened to meet the right people. I got into my career accidentally. Accidentally met my fiancee. Accidentally met all of my best friends, just on the bus, or at a park or something. Sometimes I think about if I just tweaked any one of those happenstances how it would all fall apart. The thought tickles me greatly.

For example, I heard about crypto because some guy in WoW wanted to buy my character off of me painlessly. He told me to register on btc-e, then I got a bunch of BTC and that was it. 5 years later I hear about crypto again, remembered those coins, and boom, life changed. All because I was in some virtual world at 3am on a Thursday trying to sell off my WoW character for beer money for the next day.

<comment><USER3> What's your net worth?

<comment><USER2> Enough to not work and day trade (lose) shit coins all day. On the other hand life is sort of pointless now. Trying to avoid the hedonic treadmill.

I'm not rich, I can just pay my rent for a decade and a half before really having to dip into savings.

<comment><USER4> That's a _great_ story :)

Mine is the opposite :( I mined about 500 Bitcoin in mid 2010. But I got paranoid about the lack of anonymity, so I sold them, for maybe $0.06 each. So it goes.

<comment><USER2> Does the thought sometimes hit you like a pile of bricks when you're sitting at work? Damn.

<comment><USER4> No, not really. Stuff happens. And I've been pretty lucky about finding ways to get paid for doing stuff that I might otherwise have done for fun. And mostly as a consultant, with very little structure. Now I just work anonymously for Bitcoin.

But anyway, I would have probably have sold it at the ~$1K peak, and the money would all be gone by now ;)

</comment></comment></comment></comment></comment></comment><comment><USER5> I owe my life to luck.

Two years ago I suffered an extreme bout of depression and hung myself. I'd apparently called 911 beforehand so that someone prepared would find my body. The police got there first and cut me down, but I was not breathing and had aspirated (vomited into my lungs). The ambulance arrived and took me to a nearby hospital where they performed an endotracheal intubation (tube through the mouth, down the esophagus) and hooked me up to a ventilator. I was sedated for 10 days, put on longer-term life support (tracheotomy and PEG feeding tube, etc. It was expected that I would almost certainly have brain damage if I survived. The aspiration had lead to substantial pneumonia, further complicating treatment. When I awoke I was hallucinating from the sedatives and had lost all memory of the week leading up to the suicide attempt. After a few days they were able to take me off the ventilator and just use oxygen, and eventually the tracheotomy tube was removed from my throat. Luckily the opening healed, and I could speak and breath on my own. I was transferred to an inpatient mental health facility and learned to better cope with depression. There was no brain damage. Hanging has a higher rate of completed suicides than shooting. Almost all of the incomplete (survival) hangings result in permanent brain damage. I am ridiculously lucky. My survival is due to the hard work of a large number of people, for which I will always be grateful. But there's still a lot of luck involved.

<comment><USER6> Welcome back.

</comment></comment><comment><USER7> I am extremely lucky:

1\. I did not end up as a spontaneous abortion (if you include fertilized eggs that don't implant, 70-75% of conceptions end in a spontaneous abortion.

2\. I did not have any severe genetic abnormalities

3\. I was born healthy and full term

4\. I was born to parents that loved me and took good care of me and did not abuse or neglect me.

5\. I was born in a developed country

6\. I was born at a time in history with generally low levels of violence

7\. I was born in a time in history when they had treatments for common infections and other childhood conditions

8\. I was born in a time in history and a place that encouraged individual freedom.

9\. I learned English as my first language

10\. My parents had enough money to buy me a computer

11\. My parents had enough money to buy me programming books

12\. My parents believed in children going to college

13\. I had good friends that did not get me in trouble.

<comment><USER8> Not all of these events can be considered random. Spontaneous abortion is definitely stochastic process. But you don't have a distribution of being born at a particular time, i.e. you can't talk about probability of being born nowadays vs 100 years ago.

</comment></comment><comment><USER9> I think being born white, male, and good at math at this particular time in history is the very definition of luck. I'm definitely playing the game of life on "easy" mode.

That being said I think there is a minimum level of effort, intelligence, and resilience required to take advantage of certain lucky opportunities if they present themselves. When I look at how much some of my peers had to endure and overcome to reach those minimums compared to what I had to do, it's easy to see how lucky I've been.

<comment><USER10> > I think being born white, male, and good at math at this particular time in > history is the very definition of luck.

And being an asian, male, and good at math isn't?

<comment><USER11> Being white means that you have a higher probability to be born in a developed country too.

<comment><USER12> White people descended from Europeans are the seventh most successful ethic group in this country. The "luckiest" are Indian Americans, they beat Jewish Americans nearly 10k a year.

[https://en.wikipedia.org/wiki/List_of_ethnic_groups_in_the_U...](https://en.wikipedia.org/wiki/List_of_ethnic_groups_in_the_United_States_by_household_income#By_ancestry)

</comment></comment></comment></comment><comment><USER13> A lot of these posts, while I appreciate the gratitude and they're great, don't seem to show the gratitude for the seemingly bad circumstances or those less than ideal.

I am insanely lucky for my strait, white male privilege. But I'm lucky for every disadvantage that taught me empathy and patience with those not so lucky. It taught me that manifest destiny may be present in our lives, but it's value is to help connect and help those whose life didn't go the same path. I think gratitude is a truly differentiating factor when interacting with others.

My merit means nothing if it only exists to serve me. Meaning is found by leveraging those strengths for others :)

</comment><comment><USER14> Chance favors the prepared. Everyone has countless opportunities, but only some recognize and act upon them.

<comment><USER15> Chance also favors those who expose themselves to it. It is very easy to sit on ones ass for a decade, with a narrow and constant social circle, without trying anything new.

<comment><USER16> Misfavors too. We have limited time and mental resources to manage social circles. Someone falls off the list.

Ann's whether a new circle will be beneficial is not obvious.

</comment></comment></comment><comment><USER17> We got a home computer in the very early 90's (Amiga 500) and dad bought me programming books for it. I was afforded the time to use those. I came out quite good in the brain department of the genetic lottery.

Those three bits of luck make up a huge part of where I am today.

</comment><comment><USER18> I was born in America in the latter part of the 20th century. That alone makes me luckier than just about every human who has ever lived.

</comment><comment><USER19> Nope. I got into the career I got into on... mostly luck. It's one of the reasons I don't understand the cultural taboo of speaking about salary... it's not really a valid measure of self-worth, it's just drawing the right card from the deck.

</comment><comment><USER20> I'm so sick of seeing articles like this. And it seems like a cop out or excuse people can tell themselves if they don't get what they want.

I think the old adage that luck is when preparedness meets opportunity is much closer to being the truth. Look at the example they give with Bryan Cranston. That's an opportunity that happened to open up for him through a series of events outside of his control. But he wouldn't have been offered that part if he wasn't of a certain caliber in the first place. Successful people generally work hard and usually that pays off in the long term for them by being able to seize opportunities when they arise. No one is going to run after you to say "hey I have this great thing that you need to be involved in" if you are mediocre.

I can smell the privilege and white guilt ideology that underpins articles like this. I've seen it before in much lengthier pieces. This one is no different.

<comment><USER21> >That's an opportunity that happened to open up for him through a series of events outside of his control. But he wouldn't have been offered that part if he wasn't of a certain caliber in the first place.

How many actors were of that quality and didn't get a series of events leading to that opportunity? Opportunities arising are luck, no one is saying hard work isn't necessary to take advantage of the opportunities.

>I can smell the privilege and white guilt ideology that underpins articles like this. I've seen it before in much lengthier pieces. This one is no different.

This one is different as it does not take the further step of showing how rich white men tend to get far more opportunities than other groups. If you start from the question "what makes people successful," you will see luck playing a role before you look to see which people are luckier. Saying that a "white guilt ideology" drives this is looking at it backwards.

</comment></comment><comment><USER22> It is okay to think about luck's influence on your life, but I would say it is a mistake to cite luck as a justification for everyone else's success or your own lack thereof. While it absolutely helps a lot to be at the right place at the right time, you also have to have enough talent to capitalize on the opportunity.

<comment><USER23> Luck is a huge factor, but mostly blamed for failure, few of us have the insight to attribute much of our success to luck.

<comment><USER24> I think luck is mostly blamed for failure because no energy is expended on it in that direction.

I.e., if you are lucky enough to be able to work on something that earns you lots of money, you may still end up having to spend energy/effort/time on something to earn that money. Even if the situation is lucky, there's effort being expended, and in a relative sense, the amount of luck is irrelevant to the amount of effort.

I.e., "you're lucky to be able to be a software engineer" != "you did no work and got everything for free".

On the other hand, bad luck can hit out of nowhere in the form of random medical expenses.

I think that's generally what's happening. When people work for something and then get it, they generally aren't going to consider that the availability of the situation itself is luck, because they're more focused on the work they put in. When bad things happen to them, or when good things don't happen, the individual often has nothing to do with it, hence it looking like pure luck.

</comment></comment></comment><comment><USER25> I'm not downplaying luck's role in my life so much as I'm downplaying my role as my own worst enemy.

<comment><USER26> Me too.

</comment></comment><comment><USER27> Luck is a short term fluctuation in Texas Hold'em. Over the long term, the fluctuations of luck smooth out. A given action could win or lose on one hand, but over the long term, the return (or loss) will reflect the strength of the decision.

In real life, lottery wins happen, but not often enough to bank on.

<comment><USER28> Texas Hold'em is IID -- events are independent and identically distributed. Life is non-stationary, with autoregressive conditional variance. Heck, for some aspects of life, the mean and variance are undefined.

It doesn't always smooth out in the long term, except for that in the long run we're all dead.

<comment><USER16> So far. Technically immortality is not out of question but a really long shot.

</comment></comment></comment><comment><USER29> I chose to major in CS the same year the dotcom bubble burst. Nevermind the specter of outsourcing at the time. Due to those and many other factors, I am completely where I am by luck - at the time for all I knew I was basically majoring in candle making.

<comment><USER30> Back in the mid-2000's I chose _not_ to major in CS despite having a strong interest in the area, largely due to the doom-and-gloom news surrounding tech in the wake of the dotcom bubble burst.

To a certain extent, I'm still paying for that mistake.

<comment><USER31> Don't get too upset. Unemployment rates for new grads are pretty atrocious tyool 2017.

</comment></comment></comment><comment><USER32> I wouldn't be where I am today, living the dream life on a sunny island, if I didn't have a stroke at 33 at lost my dad at 36. Lucky me!

That's exactly the same bias as in this article. "Luck" is only a _post-hoc_ interpretation of stochastic events. Explaining these events by "luck" is like explaining them by "good angels" or "aliens influence": pointless.

That not science, and making any conclusion based on this "research" is a bad idea.

Are you really surprised if people tend to downplay luck, angels or aliens?

Luck is like religions, trying to find meaning in something supernatural...

</comment><comment><USER33> As a child I won a free computer in a drug store drawing and that got me into programming. If I hadn't won I might have ended up in a totally different career. Luck plays a huge role.

</comment><comment><USER34> No, actually. I know that I've started from way behind most people in my demographic cohort, made incredibly mediocre choices, and lucked out in a lot of ways... to still end up mediocre.

Fuck luck.

<comment><USER35> > to still end up mediocre.

It's not the end my friend.

<comment><USER16> Over time, number of opportunities rarely increases. (But sometimes their quality does.)

</comment></comment></comment><comment><USER36> Most people do. The luck isn't that, like many here, I got into computers at an early age, had the free time to teach myself, and was smart enough to. I would likely be programming anyway and so would many here. The luck is that there are good paying jobs in computers. It doesn't have to be this way and in fact, in most of the world, it's not. Programming jobs could be paying a median wage. They could be few and far between. That's where I and others like me got lucky, IMO.

</comment><comment><USER37> I'm wondering if there are people who actively try to eliminate certain types of luck from their lives, for example because they think it would make life too easy.

<comment><USER38> I personally turned down all the government grant money I was offered for school. I didn't feel it was right to take peoples tax money. I did take other grants and loans supported by companies, individuals, or the university.

I did it because of principle. I didn't / don't think it was moral correct for the government to take tax money and hand it to someone blindly. It should be a choice of individuals to contribute, not the right of the masses.

Not exactly luck, but most people look at me like I'm insane. I'm sure there are people out there willing to eliminate luck for a similar reason.

</comment></comment><comment><USER39> Interesting to see no mention of Fooled by Randomness either in the article on in the comments. Isn't that the central thesis of that very influential book?

<comment><USER23> It is one of many topics in "Fooled by Randomness". However, Taleb's views on luck profoundly influenced how I see the world.

</comment></comment><comment><USER40> Came from low-medium income Russian family ($9k/y household), made it to multiple $100k/y total comp. in one of the big 4.

But here's a thing: pretty much anyone of my old non-CS schoolmates/university friends would call that 'luck', but somehow most of them would consider a suggestion to learn Computer Science to be arrogant.

</comment><comment><USER41> Hell, no. I know I've been lucky.

I also know that while I was lucky, I wouldn't have been in a position to be lucky if I hadn't made some good decisions. I didn't just sit back and wait to be lucky.

The way to maximize the role of luck in your life is to behave like luck has no role in your life.

<comment><USER42> Where were you born? Was it in a war-torn or poverty-stricken third world circumstance? Were your parents emotionally or physically abusive to you? Were you born with mostly normal cognitive function? Without any significant physical handicap?

I.e. even though you made some good decisions, you were still lucky to be born/raised in an environment and with a body that enabled you to make those good decisions.

I agree with your last sentence.

<comment><USER43> Thanks for this insight. I think all of these things could easily permanently handicap anyone.

And I have serious respect for those who manage to overcome these issues, if luckily.

</comment></comment></comment><comment><USER44> The reality is, _everything_ comes down to luck. We are all ultimately a product of our genes plus our conditioning, neither of which we control. And any decisions we make are a function of those two things, so they are also out of our control.

<comment><USER45> I'm always surprised how few people are willing to just come out and say this (to me very obvious) truth.

It's rare enough that I feel the need to express some kind of solidarity / comraderie to someone else dated to look at the world the same way.

So well done (not like you had a choice.)

</comment></comment><comment><USER45> If you answer this "no I worked hard" it's a good exercise to examine the prior conditions that led you to hard work.

Keep following that chain back; honestly keep asking yourself how everything isn't a matter of luck.

</comment><comment><USER38> You know, recently my wife and I (25 yo) bought our first house. For the most part, it's larger and nicer than the rest of my family members. I bought it because it was a great deal, and I needed a big house if I wanted to invite my large family over. Given it's about 2 hours away from where most of them live.

The first thing a couple family members said to us was, "you're so lucky!" And quite honestly just that infurates me. It's one of the most insulting phrases I think I've ever been told. I know they didn't mean it, and I actually questioned why I was so mad there for a while. Obviously, I didn't let the family member know, but later, my wife told me she was just as mad.

A bit of back story, my family was poor. I had to start working at 14 to pay for my clothes, sports, really anything. Now, I never went hungry and always had a home - so it wasn't the worst. We all pitched in, and it taught me a lot and made me tough. I literally pride myself that I kept a Pentium III computer until I was 19 going (aka 7 years or something).

In high school, I taught myself to program and worked odd jobs to make money. In college, I did the same. I went to junior college, worked 40 hours a week, then transferred to UIUC where I continued working 40 hours a week, and took a full course load. I graduated with a 3.1 GPA - cutting it as close as I could to keep a 3.0+ average, while still supporting myself. In the end, I still have $70k loans (In part, because I helped my now wife who was astranged from her parents, aka no student loans possible).

I've had so much bad luck I can't explain it here. Sure I didn't get cancer, but I have severe allergies, I have a learning disability [1], my wife and I had to fight in court with her crazy parents, so on and so forth.

Now, we are both living in a nice house. She's about to start her PhD in Neuroscience. I have a good job, and we are both starting a company (which makes some pocket change). Luck right?

The point is, I work hard 80 hours a week; my wife the same.

So fuck luck. We've earned it.

Things fall the way they do, we've had a hundred failures for every success, but the success is what counts. I'm not going to apologize for getting lucky, nor am I going to blame luck for failures. All you can do is constantly position yourself for success.

I've been in positions that benefit me, the best example is actually my teachers kicking me out of my "regular" course work in high school. They told me if I wanted to graduate I had to start in the honors courses. Is that luck? I definitely had teachers who cared, but it was what they saw that made it count. We (as in people) make our own luck, through our personalities, our perseverance, our ethic.

That family member who says "your so lucky" implies they don't understand how tough it can be. They either don't have the ethic, or have given up. Sure things can fall in your lap, but even then. Keep positioning to do better, else you increase the potential bad luck.

If for instance, I stopped after my teachers pushed me into honors courses, then I probably wouldn't have had any future luck, right? It's the perseverance and drive that keeps us going.

Articles like this, breed whiners and failures. What's the PG quote, "Startups rarely die in mid keystroke. So keep typing!"[2].

Make your own luck, and don't give up.

\</comment><comment>

[1] [http://austingwalters.com/please-excuse-my- grammar/](http://austingwalters.com/please-excuse-my-grammar/)

[2] [http://www.paulgraham.com/die.html](http://www.paulgraham.com/die.html)

<comment><USER46> Truths are not usually exclusive.

Its true you have worked hard all your life, and overcome many obstacles.

Its also true that many people do all of that, and are still unable to attain the lifestyle you have (whatever it may be).

You have worked hard and overcome many obstacles and been very lucky.

That is pretty cool.

<comment><USER38> Maybe I'm confused about the term luck, but usually it refers the chance of a good (or bad) event happening.

I guess my whole point was, you're job is to position luck to fall in your favor. It's a lot of work, but it's controllable. Making it seem like it's not (to some extent) controllable, is just doing a disservice to everyone.

</comment></comment></comment><comment><USER47> Luck is being in the right place at the right time, and education and experience are key in that, or course a little bit of lucky never hurts.

</comment><comment><USER48> > Cranston got to play Walter White, the school-teacher-turned-meth-dealer in > Breaking Bad, because two talented actors, John Cusack and Matthew > Broderick, refused the part.

If you buy into oversimplifications and weak analysis, this article probably appeals to you.

Success, overwhelmingly, looks a lot like hard work. That hard work might present in a lot of different ways, but it is almost always there. And mostly when it's not, the "success" was not truly earned.

<comment><USER21> >Success, overwhelmingly, looks a lot like hard work.

And if two people do the hard work with one becoming much more of a success? It's not either or, luck plays a huge factor. Acting is an easy example, how many thousands of people work hard to become an actor? What evidence is there that the successes worked harder?

</comment></comment><comment><USER49> If you want to see how much luck directs your outcomes, just flip a coin for every decision, instead of calculated choices.

</comment><comment><USER50> >I think being born white, male

That is an ABSURDLY racist and sexist thing to say, and it is terrifying to me that it is becoming not only socially acceptable, but socially required, to believe and say such things.

What happens to people of all colors/genders if racism/sexism becomes socially acceptable again?

<comment><USER51> This breaks the HN guidelines against flamewars. In fact it's exactly the sort of thing most of us come here to avoid, so please don't post like this again.

[https://news.ycombinator.com/newsguidelines.html](https://news.ycombinator.com/newsguidelines.html)

We detached this subthread from [https://news.ycombinator.com/item?id=15086798](https://news.ycombinator.com/item?id=15086798) and marked it off-topic.

<comment><USER50> I'd just like to point out that I was wasn't the one who introduced the "flamewar topic" of race and success, and so a just application of the rules would place [https://news.ycombinator.com/item?id=15086798](https://news.ycombinator.com/item?id=15086798) at the head of this detached subthread.</comment></comment></comment>


Python best practices - <AUTHOR> http://www.fantascienza.net/leonardo/ar/python_best_practices.html

<comment><USER2> Most of that stuff is a bit silly but I learned python before it supported _verbose regular expressions_ so I found this example useful.

      finder = re.compile(r"""
        ^ \s*         # start at beginning+ opt spaces
        ( [\[\]] )    # Group 1: opening bracket
        \s*           # optional spaces
        ( [-+]? \d+ ) # Group 2: first number
        \s* , \s*     # opt spaces+ comma+ opt spaces
        ( [-+]? \d+ ) # Group 3: second number
        \s*           # opt spaces
        ( [\[\]] )    # Group 4: closing bracket
        \s* $         # opt spaces+ end at the end
        """, flags=re.VERBOSE)

<comment><USER3> I love regular expressions as much as anybody, but I never understood why people wrote code like that.

r"\s __" is repeated 6 times in there, each time with a comment. Is there a reason nobody uses DRY when writing a regexp?

        spaces = r"\s*"
        number = r"([-+]?\d+)"
        bracket = r"([\[\]])"
        finder = re.compile(spaces.join(["^", bracket, number, ",", number, bracket, "$"]))

<comment><USER4> That is the most beautiful bit of RE I have seen in ages. Thank you.

I always do one-off RE transformations of text in vi or even just sed, but this alone is reason enough to start writing my more complicated RE one-offs in Python.

</comment></comment></comment><comment><USER5> This is an excellent overview of how Python is usually written by people who write (and read) a lot of it.

I hardly ever see coding conventions documents that do such a good job of capturing the popular conventions without inserting quirky personal preferences. I clicked through expecting something to point and laugh at, but was pleasantly surprised!

</comment><comment><USER6> _Always use 4 spaces as indent_

My god how I wish everyone did this... would make life so much easier.

<comment><USER7> Awww, I like 3! 3 makes the tab levels very distinct, without wasting space. Of course it's just a matter of personal preference. But, is 4 really a widespread standard in the Python world?

<comment><USER8> "is 4 really a widespread standard in the Python world?" yes. <http://www.python.org/dev/peps/pep-0008/>

<comment><USER7> I am so sad to see this. Thanks for posting it, though. Maybe I'll...ghhk..ekkk...switch. I went through the entire PEP and found that I'm following every other convention but two (multiple imports on one line, and I seldom write docstrings).

</comment></comment></comment></comment><comment><USER9> > if x is None: ... > if items is None: ...

None's truth value is false, so the above are equivalent to:

      if x: ...
      if items: ...

Empty sequences and mappings are also considered false, so you don't need to

      if len(items): ...

Instead, you should

      if items: ...

On a side note, does it annoy the hell out of anyone else that a sequence's length is len(foo) instead of foo.length() (or size, count, etc)?

<comment><USER5> There's a reason why "if x is None" is idiomatic when "if not x" is shorter:

      >>> x = ''
      >>> if x is None:
      ...   print 'x is None'
      ...
      >>> if not x:
      ...   print 'x is empty'
      ...
      x is empty

<comment><USER9> Good point. I was only thinking of sequence types, and failed to see that it would break with strings. I also somehow forgot to include "not" in the if statements! Pretty sad for a first post...

</comment></comment></comment><comment><USER10> My comments:

> x=5 || x = 5

Noooo. That first one is backwards. Extraneous spaces annoy me to no end. Makes it a pain to search for things too.

On the other hand, using newlines to break things up at commas for example, is great. But that's not applicable here.

> class fooclass: ... || class Fooclass(object): ...

Is this a joke?

> d = dict() || frequences = {}

How can you say that longer names are always better? (Is that part of the message here?) Usually most variables are throw-away so using short names should be the most common case. Similar to mathematics.

> # Use iter* methods when possible

This should mention that thread-safety is probably the most directly relevant use case for the non-iterable methods.

> # coding: latin

Better to use this:

         #!/usr/bin/env python
         # -*- coding: UTF-8 -*-

<comment><USER11> Though I am a lowly Python noob, I'll tell you it's generally _very_ bad practice to use a mutable as a default argument value. The reason is that a function's default is only ever initialized once. Case in point:

      >>> def f(l=[]):
      ...     l.append(0)
      ...     print l
      ...
      >>> f()
      [0]
      >>> f()
      [0, 0]
      >>> f()
      [0, 0, 0]

Unless you 1) actually want the appearance of a 'static' local variable or 2) are really careful to make a copy of the mutable before messing around with it, you'll get yourself into trouble.

<comment><USER12> I always took that as a case against mutating arguments, not against defaults. You still have the same problem if you pass in an argument:

>>> MY_CONSTANT = ['foo', 'bar', 'baz'] >>> def f(l): ... l.append(0) ... print l ... >>> f() ['foo', 'bar', 'baz', 0] >>> f() ['foo', 'bar', 'baz', 0, 0]

I would've rewritten f as:

      def f(l=[]):
          print l + [0]

...unless you specifically want f to mutate its caller's variables and have documented it as such.

Generally, I try to avoid mutating objects unless a.) I just created the object within the function or b.) it's specifically intended as a "long lived" data structure, i.e. something that survives multiple user interactions. For everything else, I try to use the non-mutating operations (slicing, concatenation, list comprehensions) or make an explicit copy of the argument.

</comment></comment></comment><comment><USER13> Instead of:

      tot = x + y

Better:

      sum_ = x + y

And I can't see nothing wrong with:

      freqs = {}
      for c in "abracadabra":
          try:
              freqs[c] += 1
          except KeyError:
              freqs[c] = 1

Or:

      nested = [[1, 2, 3], [4], [5, 6]]
      flattened = sum(nested, [])

It is worth to mention _dict.setdefault()_ :

      indices = {}
      for i, c in enumerate("abracadabra"):
          indices.setdefault(c, []).append(i)

</comment><comment><USER14> Just in time for the start of our python project

</comment><comment><USER15> VERY COOL! <http://psyco.sourceforge.net/introduction.html>

</comment><comment><USER16> Biased but interesting. Seems to me that there are only two examples of 'strange' here the 'while(<>)' and the regex. Interesting thing about regex--- python itself uses perl compatible regex, so throw that item on the trash heap. As for the other its shorthand for grab a file from the command line, open it, Feed each line(\n terminated) to $_(could just as easily been a declared variable, but $_ is always there) and parse it with the regex. While you're at it, throw away the first and second parts, set $_ to the third part and continue. After that get another string from the file. All of this is covered in Wrox's Perl for Beginners as well as else where. I've done reasonable projects in both languages. Don't have anything bad to say about Python--- just wonder what all of the 'have to prove my language is better' crap is coming from...

<comment><USER17> What are you talking about?</comment></comment>


Ask HN: Why is it good if media companies lower streaming quality? - <AUTHOR> How is this helpful if the quality of a stream is regulated by the speed of the internet in the spot where the client is?
In my understanding, if the local network is busy it will ultimately result in lower speeds, therefore, a "degraded" stream quality. <comment><USER2> you are assuming the bottleneck is network. But there could be other factors that are the bottlenecks.

for example, cost, might be one reason. The bandwidth cost you money. The more people use it, the more money you spend. Like running a gym, you want everybody to have a membership, but You don't want them to actually come to the gym to avoid paying for utilities.

Similarly, recently zoom said their quarterly income will be lower, because they need to invest into infrastructures due to increased usage. You would assume, the more users they have, the more money they make. not necessarily.

<comment><USER3> Bandwidth is not only a bottleneck but also a resource that most company has to pay for.

Also to ensure better streaming quality and availability, the media files have to move to server closer to the client region, depending on trending demands and timezone usage to avoid bottleneck at the delivery stage. Storage is also not a free resource (or server renting space)</comment></comment>


Report poorly parked scooters - <AUTHOR> https://www.cnet.com/news/bird-wants-people-to-report-poorly-parked-scooters/ <comment><USER2> This won't actually be in practice long. Retrievers will realize that they can manufacture income simply by badly positioning every unused scooter they see, then using a second phone to "report" it while they are still nearby to collect on the reposition. Lather, rinse, repeat.

Result: more costly, and the bad-actor positioning problem _worsens_.

This is strictly a P.R. move.

<comment><AUTHOR> Just like with wikipedia there are people that want the articles correct and perfect, and many people want the scooters not knocked over and lined up perfect.

</comment></comment><comment><USER3> and now pg knows all the boomers on the site stored in the upvote list here.</comment>


What Does Your Code Smell Like? [video - Larry Wall - YAPC::Asia 2012] - <AUTHOR> http://www.youtube.com/watch?v=x4Ep0VKa_ZI <comment><AUTHOR> Synopsis - Larry takes a program written in perl5 (from RossettaCode) and performs a live _refactoring_ of it into perl6.

 _We all know that people make many decisions intuitively, not rationally, but if you look carefully at those intuitions, they are often based on deeply rational reasons. Over the 25 years of Perl's history, my tastes have changed in some ways but not in others. So this talk will be about how I now think about code smells when I'm coding, and design smells when I'm designing a programming language._

Larry Wall - [http://yapcasia.org/2012/talk/show/40330888-db88-11e1-8417-0...](http://yapcasia.org/2012/talk/show/40330888-db88-11e1-8417-0d4e6aeab6a4)</comment>


Ask HN: Remote workers, how do you avoid rework? - <AUTHOR> Am I the only one that sometimes thinks "someone must have done/thought about this before - this is such an inefficient use of time"?
I've had this feeling particularly working for established teams or businesses, but I imagine this may also apply to newer organisations too.
Have you felt this too? How do you deal with it or address it? What tools or methods do you use to solve this problem? <comment><USER2> How is this question relevant to remote work? In any sufficiently large software shop, this problem is universal. How does one end of the company announce what they are working on to the other end?

At my company, we have monthly organizational meetings where a few senior devs go to represent their teams and share what we're doing that could be dogfooded on other teams.

</comment><comment><USER3> This becomes data archeology quickly, and leads to necromancy. Project necromancy is fine, but is fraught with danger and tends to be about as popular as normal necromancy in a D&D game.

The more shared documentation that exists at an organization, the easier the archeology portion will be. Even old Slack threads and half-finished README docs can point in a direction, and help with hidden requirements that would have taken more time or painful failures to find on your own. The steps I usually see are:

1) Identify a problem

2) Create a useful documentation infrastructure, like a GitBook or Sphinx, and write down the problem in a well-thought out matter

3) Explore old sources of documentation, and rewrite them into the new structure you created; include the original material and perspective on what's happened between then and now

3a) Find references to other sources of documentation (from when everyone moved from Hipchat to Slack three years ago), get copies of the logs, and search further.

4) Repeat step(s) 3 until you feel mostly fine, and/or other people on your team start to ask you questions about the problem because you've written the docs

5) Architect a solution to the problem, and add your reasoning to the documentation

To do this well, your documentation system from Step 2 should be one that the rest of the team actually uses, and will hold up for a while. At the very least, when your Step 2 is someone else's Step 3, try to be more useful than terrible.

Remote work makes this harder, because it means that you can only use digital archives; a lot of people use paper, and if there's no paper, you don't get random lucky bits of paper that turn out to be exactly what you needed. Instead, you'll have to ask people, hope their archiving system of choice is working, and they are willing to share.

Prevention of these problems involves consistently using the same tools over time, indexing all documentation in a central location which is widely accessible, and meaningfully valuing project document creation as actual work within the organization.

</comment><comment><USER4> Normally 'rework' is when you screwed up the first time and have to do more work to fix it, and is not 'reinventing the wheel'.

<comment><USER5> Perhaps OP means "duplication of effort"?

In any case, I rather enjoy "rework" in the sense of fixing things. It's kind of fun changing a data structure and getting an important piece of software to run in minutes instead of weeks, or to add a bit of locking and get a flaky piece of software to become rock solid.

In some ways, I've become the mythical old guy that fixes things by turning a single screw. The trick, of course, is to know which one.</comment></comment>


How to Fix Google - <AUTHOR> http://tylerneylon.com/b/archives/118 <comment><USER2> This misses out on what the Google "cruft" is all about. Products like Android or Chrome aren't meant to be standalone products/business (and wouldn't be profitable if they were). Their nature is a defensive moat around Googles Search/Ad business.

Relevant article: <http://techcrunch.com/2011/03/25/search-googles-castle- moat/>

<comment><USER3> Came here to say this and post the same link.

However, I wouldn't go so far as to say the article's idea is an all around bad one. If the described sister companies were how new ideas got brought to the Google table, and only after their success were they integrated into the __moat __, then Google can persist with their current business model (Castle- Moat), and the rest of the world can get sans-barnacle developed products. I think this might actually fit into that entire "returning to startup roots" initiative that Larry Page keeps mentioning. If you think about it this moves all the development overhead mentioned to the integration with Google rather than the core feature development of the product, so no good idea gets hindered by red tape, and integration can then thereafter be prioritized by the degree of each products success.

I realize I'm talking abstractly, from a far, an without any account for constants, project nuances, or implementation details, but I wanted to post about the techcrunch moat/castle article, and when I saw you had already posted it, decided to give a brain-dump instead. Enjoy! haha...

</comment></comment><comment><USER4> I wouldn't call it broken, especially compared to Microsoft (I've worked for both). Besides, why don't we at least give Larry a few weeks as CEO before proposing a restructuring :-P

</comment><comment><USER5> " _Companies are a lot like people._ "

True; but even more so: Corporations are living organisms; I call them humanoid organisms. [http://science1.wordpress.com/2008/10/09/the-realm-of- the-hu...](http://science1.wordpress.com/2008/10/09/the-realm-of-the-humanoid- organisms/) Humans are the domesticated critters of humanoid organisms.</comment>


State of Illinois Bans Arial Font (1999) - <AUTHOR> http://my.execpc.com/~gdkohler/mace/ILBansArial.html

<comment><USER2> I am Comic Sans, and I approve this message. [http://www.mcsweeneys.net/articles/im-comic-sans- asshole](http://www.mcsweeneys.net/articles/im-comic-sans-asshole)

</comment><comment><USER3> Great to hear. I was always confusing them with the state of IIIinois.

</comment><comment><USER4> Check the date on this one folks, before you formulate your response.

<comment><USER5> for the busy: 1999

<comment><USER6> Time of year also can be lIIuminating.</comment></comment></comment>


French Agency uses Arduino to let anyone control its Christmas tree live - <AUTHOR> http://xmas-tree.io/

<comment><USER2> That's awesome, a bit late for Xmas but fun ! Is it real live ?</comment>


AMD Contest: What Would You Do With 48 Cores? - <AUTHOR> http://blogs.amd.com/work/2010/03/03/48-cores-contest/

<comment><USER2> For some reason, this idea came into my mind: that the existence of this kind of contests proves either the marketing departments have really trouble figuring out how to promote many-core processors, or there is no real demand for these monsters except a few niches.

<comment><USER3> Couldn't most of games use it for higher complexity graphics? It looks like people are still not developing for multicore... maybe it's still "too hard" for an average game developer?

<comment><USER4> Games face bottlenecks from heavy statefulness. Animations, physics, and AI have design-required interdependencies where a change in one will trigger a change in the other - e.g., the player character throws a box, it collides with an enemy, and the box breaks, while the enemy shows a visible hitreact or knockback, and possibly changes their future tactics. Sometimes you can queue and defer all of these changes for a frame and lose some responsiveness, but other times it's really critical to have them all sync up.

The render stage of graphics benefits from massive parallelization, but most subsystems can't see the same improvement. A common fallacy of new game programmers is to think that "one thread per actor" is a clean architecture - only to discover that each actor's thread blocks the others and causes massive slowdown.

</comment></comment></comment><comment><USER5> I would have them sit idle most of the time, since most of my tasks are usually IO bound.

<comment><USER6> Add them to a grid, so others can use them when you don't need them? Seti@home, but where you get paid for your cycles?

<comment><USER5> Well, it depends how you view the original question.

Sure, you could eventually find some purpose to the 48 cores, but that implies an active search for such a purpose and basically a side-project. I dunno, I might just collocate the server and sub-rent virtual machines or do some shared hosting -- but that's not what I care about.

So -- for my current tools and work-flow, 48 cores isn't needed. Pretty sure some scientist or video editor might replace his cluster with this thing but as a normal user and developer I would severely under-utilize the hardware.

</comment></comment></comment><comment><USER7> Render two chicks at the same time?

<comment><USER8> I just saw this post now and was going to add a comment with something similar. I wonder how many people's response to any question that begins with: "What would you do with..." results in an answer of something that includes the phrase "two chicks at the same time".

</comment></comment><comment><USER9> Just 16 cores short of having one per chessboard square, like the pioneering parallel chess machine Hitech...

<https://chessprogramming.wikispaces.com/HiTech?f=print>

[http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.126...](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.126.8874&rep=rep1&type=pdf)

<comment><USER10> As Minsky has said, parallelism isn't worth a damn thing if you don't have better heuristics to prune the search space.

If you have a million processors to play chess with, and your search tree still has a branching factor of thirty, you're only looking two moves ahead.

The human mind is amazing because our pattern-matching-based search heuristics are great.

<comment><USER11> Our pattern-matching-based search heuristics are great because the human mind is amazing.

At least that's how I see it ;)

</comment></comment></comment><comment><USER12> Run a large ant farm. <http://clojure.googlegroups.com/web/ants.clj>

</comment><comment><USER13> As an OS developer trying to solve the I/O bottlenecks on 8 cores, probably cry...

Seriously though? I don't know -- maybe get a bunch of RAM and virtualize 32 machines for some distributed systems research.

</comment><comment><USER14> The MapReduce tasks I run on Hadoop are heavily CPU bound. This would be a dream come true, at least until the light bill arrived. I have to wonder, with so many MR tasks running on a single box, would IO become an issue again? Suppose you have 12 HDDs and 96 tasks running. At some point the tasks are going to fight each other for the needle.

</comment><comment><USER15> Crack passwords and keep my office warm.

Alternatively I'd set up a transcoding farm and build a service to help people to edit their videos online and download them in multiple formats. My goal would be something like iMovie but cross-platform with subscription meaning exclusive filters, wipes and effects with more formats.

</comment><comment><USER16> Is it a coincidence that the intel cloud-on-a-chip also has 48 cores? <http://techresearch.intel.com/articles/Tera-Scale/1826.htm> i.e., is it marketing to the crowd that would want one of those from intel?

</comment><comment><USER17> probably the same thing I do with my 8 core mac pro- under utilize it...

<comment><USER18> I have a Mac Pro too, and I know the feeling. Have you looked into distributed computing (BOINC, etc)? That's how I rationalize it. I see the electricity bill as part of my donation to science.

</comment></comment><comment><USER19> write an essay about using that sun t2000s shipped with 64 cores years ago.... well at least its x86 now so you can run more... proprietary binaries?

<comment><USER20> Sun wanted to sell you theirs for $$$$. Now that AMD and Intel are at it, we'll have 8-12 cores for $200 in a few years. Things did seem to slow down a bit on the multi-core front. I was beginning to wonder what happened.

</comment></comment><comment><USER21> I'd see if I could view flash banner ads efficiently.

<comment><USER22> I believe the next version of Firefox will be able to run flash in its own thread, so having a bunch of extra cores would indeed isolate the evil from the rest of your browser.

<comment><USER21> I've been running nightly's lately and it does indeed "isolate evil". Instead of a browser crash I now see a message at the top of the respective page telling me that the plugin crashed.

</comment></comment></comment><comment><USER23> I know, i'll just learn haskell, scala, clojure, erlang, jocaml and F#. Go language, too. Then you have 8 problems.

like this guy

[http://www.coderholic.com/12-new-programming-languages- in-12...](http://www.coderholic.com/12-new-programming-languages- in-12-months/)

</comment><comment><USER24> I'm cheap so I would simply use it for an embarrassingly parallel problem. I'd personally have the most fun with ray tracing or brute force cracking.

</comment><comment><USER25> incidentally, this is a usa/canada competition only - <http://blogs.amd.com/work/48-cores-official-contest-rules/>

(posting because i was about to put some serious effort into this and suspect other "foreigners" here might be caught out in the same way)

</comment><comment><USER26> I need 42 to find the answer to the Ultimate Question,

the 43rd to satisfy the nerd,

the 44th to find north,

the 45th to bust a myth,

and the 46th idles because nothing rhymes with it

... and well, you finish it.

</comment><comment><USER18> I'd run 48 instances of Rosetta@home.

</comment><comment><USER27> I'd attempt to run Crysis.

</comment><comment><USER28> Calculate pi to 48 places.

</comment><comment><USER29> Run a web server?</comment>


Support Open Source and Deduct From Taxes - <AUTHOR> http://benjaminkerensa.com/2012/12/26/contribute-to-open-source-and-write-it-off

<comment><USER2> I will likely pay less than 7k in FIT this year (not taking any deductions). I wish I made enough money to make tax-deductible donations worthwhile.

I gave (very little as I can only afford very little) to the ACLU out of pocket but that is about what I have done this year.</comment>


Show HN: chessable - chess built with HTML5 Canvas. Any feedback? - <AUTHOR> https://www.chessable.co.uk

<comment><USER2> You're going up against Chess.com. They've got some serious network effects on their side, so yours is an uphill struggle. If you're going to make a decent go of it without a massive marketing budget, you'll need to work very hard on converting visitors to active users.

Job one is to implement good tracking and A/B testing. Job two is to get rid of the signup. View every mouseclick and form field as a machine-gun nest that's mowing down your potential users and be absolutely ruthless about removing them. Do the work for the users. You need a huge "PLAY NOW!!!!" button that takes me straight to a game, with me playing as black against a weak engine. I respond to white's opening, then you grey-out the screen and prompt me for my e-mail address (and only my e-mail address) to receive white's reply.

I'm now committed, so I'm far more likely to give you my e-mail address. Use the response e-mail as an opt-in to a mailing list. Remind me daily that I've got a game on the go, whether I'm actually playing or not. If I'm not playing, send me tutorial messages, ask me what's stopping me from playing. If I am playing, invite me to start another game after a couple of moves. Tell me about other new users, drive me to engage with them. Match me by location, match me by rank, just get me playing. Push, push, push. If you want to see how the experts do these sorts of e-mails, sign up at OKCupid or Vistaprint and wait.

<comment><AUTHOR> Thanks a lot for the feedback, I really appreciate it.

I should have probably made it clear that this is really only a little side project, with the aim being to make back the small amount it costs me to run. Sorry for the confusion.

I wanted to differentiate it from Chess.com by making it simple, which is what I didn't like about Chess.com. With that in mind, it is designed primarily for casual players.

I strongly agree with your thoughts on the signing up process, and I'll definitely work on that.

Thanks again for your feedback, it's given me a lot to think about.

Austin</comment></comment>


The Story behind Cortana's almost human attitude - <AUTHOR> http://www.engadget.com/2014/06/04/cortana-microsoft-windows-phone/

<comment><USER2> Maybe not Clippy 2.0: people responded well to Eliza.</comment>


Show HN: GitHub user polls (markdown friendly) - <AUTHOR> https://github.com/tj/gh-polls <comment><USER2> Really nice idea and execution!

My two cents:

\- IP restriction is not fair (lots of developers in big companies may vote only once because of their employer public IP)

\- Is there a way to use your polls without having to install a software on my computer ? Like a webapp ?

<comment><AUTHOR> Currently no webapp but I opened an issue for it :D, and I agree on the IP issue, I'll see if I can come up with something better there.

<comment><USER3> Optional GitHub OAuth to vote?

<comment><USER4> Why not have a full-featured UI where you could like votes of others and share yours, add pictures of you voting and comment with emoji on everyone's votes?

</comment></comment></comment></comment><comment><USER5> This looks so pretty! It'd be nice if it redirected back to the referrer instead of just showing "Voted!"</comment>


Write when inspired - tomh- http://www.zeldman.com/2009/08/09/write-when-inspired/

<comment><USER2> Meh. You want quality writing? Sit down at the same time every day, seven days a week, and write continuously for two hours. It doesn't matter if you're inspired or uninspired. There are a few gifted people who can dash off a sonnet whenever the muse strikes, but the rest of us need practise, practise, practise. It's the same if you want to be a great pianist. You have to play every day. You have to play through the boredom and the blahs because it's only after your technique becomes effortless - essentially disappearing - <AUTHOR> inspiration can truly be released.

<comment><USER3> This is at best tangential to what you're saying, but it's something I always wonder about whenever I see a discussion about practicing writing: is there an upper threshold to writing ability?

See, I've been writing in fairly substantial amounts for about the past seven years. When I look at my old writing, it's clear that I improved _extremely_ rapidly for the first year or so, and there's noticeable (though less pronounced) improvement for the next three or four years, but recently I think I've plateaued -- I no longer write in quite the same way I did a year ago, but I can't really distinguish between my writing then and now in terms of quality.

What's more, I'm not sure I can see anywhere for my writing to go -- I feel like I've maxed out my ability to appeal to my own aesthetic (in prose). And the fact that that even seems possible is a little painful.

I have to go and don't have time to really finish saying whatever I'm saying here. Have any of you ever felt like this? Have any of you ever gotten over feeling like this?

<comment><USER4> I actually feel my writing has deteriorated over the past few years. Part of the problem might be my limited vocabulary. I can pick up new words effortlessly as I encounter them, but I rarely manage to put them in use. I spend a lot of time just looking for that _one_ word that could convey my meaning succinctly, but I inevitably end up writing three sentences in place of that one word.

I face a completely different problem when I'm writing for an audience (my audience being the 3 people that read my blog). As I write this comment, words are coming naturally to me, but they completely evade me when I sit down to write a blog post. The result is a bunch of mediocre, incomplete blog posts in my 'Drafts' folder.

Needless to say, I need practice. One of these days, I should take some time off from writing code ...

<comment><USER5> Vocabulary is overrated!

Simple words are the best words; if you can get your story across without jargon, and have it remain compelling, then you've got a chance.

<http://www.mtholyoke.edu/acad/intrel/orwell46.htm>

</comment></comment></comment></comment><comment><USER6> There's a huge difference between writing "when the mood is on" and not writing when you're exhausted. Zeldman seems to conflate the two in this piece.

I find that inspiration comes from forcing my way through the first paragraph. Usually after that point, I'm ready to go and can keep going to the point of getting cranky if anyone interrupts me.

The strategy Zelman describes may work for him--he's published books so clearly he's found a method that works. Still, I've seen these same arguments used time and time again in order to justify procrastination, resulting in nothing ever gets done.

Edit: Having written this, I guess I'm now obligated to go open up the ol' word processor, huh?

</comment><comment><USER7> Sometimes it's good to push yourself when tired. In the book 'Founders at Work' (Jessica Livingston), there's a chapter on Steve Wozniak where he says that he hits a new creative gear when working on a problem for three days and nights straight. Not directly related to writing well, granted, but an interesting point nonetheless.

Incidentally, the only two things I actually liked doing in school were writing short stories and drawing sketches. I would spend hours blissfully writing or drawing when given it for homework, and it was never a chore. The best ways to feed the imagination is to simply read, read, read. It's plain and boring advice, but it works. I was lucky when young as I was always encouraged to read, for many people my age (early twenties), reading is very boring, but that's because they are poorly versed in it and have poor imaginations as a result.

It's a cliche, but it's simple practise at anything that makes perfect - apparently Tiger Woods gets up at an ungodly hour and practises for 5-6+ hours every day; Tyson in his prime would get up and jog in the middle of the night, and conducted a tough training regime other boxers wouldn't engage in. After the last Olympics, Phelps famously said that all he does is "eat, sleep and swim". There's only so far natural ability will take you after all.</comment>