Do We Worship Complexity? - <AUTHOR> https://www.innoq.com/de/blog/do-we-worship-complexity/ <comment><USER2> I was interviewed recently. I was asked to implement a solution in Java. It was essentially a stack-based computation engine. The interviewer posed a question and there were enough tacit hints for me to see what he really wanted: an "OO" approach using a type hierarchy + command pattern. He offered unsolicited prompts and I took them: I coupled the command objects to the engine. He liked that.

What we ended up with was O(n) _classes_ (where n = the number of computation operations).

I remained in Java, but took a functional and dynamic approach yielding a three-line implementation of the engine where each command was simply a function. All the tests passed.

I was kind of holding my breath at this point. What will he say? We just went from this huge implementation to three lines. I thought he was going to love it. The crazy simplicity of it all.

But to my draw-dropping surprise he muttered something about adding new types and how he liked that the commands were coupled to the engine.

Is this complexity worship? Or what is this? It's almost as if his brain was refusing to see the solution. Like it couldn't possibly believe that the solution could be that simple. So it just ejected it, put a big black censorship block over it.

I'm currently reading a book on brain hemispheres. Apparently experiments have shown that the left hemisphere will completely and blatantly reject obvious evidence even if the right hemisphere 'has a clear counter proof'. Sometimes I think our industry suffers from an abundance of left hemispheric dominance. Or something like this...

<comment><USER3> I was asked in a Google interview to randomize a List. I wrote Collections.shuffle(list); The interviewer was not pleased.

<comment><USER4> It's normal to not be pleased when a candidate fails to understand a question (or exhibits smart-ass behavior), though in this case the easy and correct thing for the interviewer to do is to say "OK, how is Collections.shuffle implemented?"

<comment><USER3> I think it's stupid to ask an interviewee to demonstrate something they should never do at their job.

<comment><USER5> I think it's stupid to assume that a decision regarding time complexity would never come up at their job. Where I work right now, and especially in Google (not where I work right now), it is important that one understands time and space complexity issues well. The data sizes are huge and optimization skills are highly valued.

Sure I can teach constant vs. linear time. But what incentive or reason do I have to spend time teaching these fundamental concepts when I can just hire an engineer who demonstrates the understanding of basic CS at the interview time itself?

Given two candidates with all things equal except that one demonstrates the understanding of CS fundamentals and other does not, why would I want to hire the second person and spend our time teaching him those concepts?

<comment><USER6> >why would I want to hire the second person and ...

Someone commented on here recently that they would take motivated candidates over knowledgeable candidates. That's one reason. I can easily think of at least two others.

There are balance points here that vary according to all sorts of things.

<comment><USER5> I said, "Given two candidates with all things equal except ..."

I mean if there are two candidates who are equally motivated and are more or less equal in all things except that one is strong at CS fundamentals and another isn't, is there a good reason to reject the candidate who is good at CS fundamentals.

In many hiring decisions, I am faced with a similar choice, and I go for the person who is good at CS fundamentals. If two candidates are good in all other ways, then the understanding of CS fundamentals becomes a tie breaker. I see no rationale for selecting the guy who does not demonstrate his strength in CS fundamentals.

</comment></comment></comment></comment></comment></comment></comment><comment><USER7> Honestly, I think we as programmers have the opposite problem. We value simplicity so much that we neglect planning for complexity, because we think our simple, elegant solutions will last forever.

It's really fascinating to study modern CPU design. Modern high-performance CPUs are horrendously complex, with the very notion of superscalar architectures and pipelining resulting in guaranteed complexity explosion. Yet, as far as we know, _there is no way around this_. You need pipelining and superscalar execution to get adequate instruction-level parallelism in real- world code. Unless you want to use microcontrollers for everything, that complexity must exist.

Compilers are another example. Many people who go to implement compilers read the Dragon Book and think that all the complexity in GCC and LLVM is needless bloat. Then they quickly discover that they can't compete with them in performance.

It is of course desirable to avoid complexity where possible. But all too often the response that we as engineers have to discovering that difficult problems require complex solutions is to become defensive, stick our head in the sand, and stand by our simple "solutions". This is how we ended up with crufty Unix APIs, the security problems of C and C++, the pain of shell scripts, and so forth. We need to learn how to accept when complexity is necessary and focus on _managing_ that complexity.

<comment><USER8> Not in my experience. I see far more engineered overly complex solutions to simple problems than the opposite.

<comment><USER9> And then people say: lets rewrite it, the old solution is overly complex and has a lot legacy code that no one uses, we can do better. They imagine simple & perfect solutions because they underestimate complexity of real world problems, just like parent said.

<comment><USER8> I would say rewriting is OK if you are eliminating code while keeping the same functionality.

Obviously that is a generalization and there will be exceptions, but as someone else said in this thread "code is a liability not an asset".

</comment></comment></comment></comment><comment><USER10> It's interesting to me that Parkinson's Law wasn't originally conceived of in the context of software projects, yet that's the only place I hear it applied today.

I've been working outside of software recently, and noticed to my delight that this Law hasn't applied at all. In one case, I was hired for 3.5 days of work, and we got finished after 2.5 days so we were sent home early -- nobody was dragging their feet to make it last 3.5 days. In other cases (more common), we've temporarily had too many people for the job at hand, so the team lead said "Just wait", and we do nothing until there's more work ready for us.

Why have I never heard of any software team ever saying "There's nothing for you to do right now, so just wait"? My first thought was the endless supply of bugs, but that can't be right, because I've never heard of a team lead saying "We have no work for you today so go fix bugs for a while", either.

It really does seem like every software team manager thinks that the proper amount of complexity in a system is perennially $(current_complexity + 1). The cases where program complexity approaches a constant asymptote (like Redis and perhaps SQLite) are so rare as to be notable. They're also frequently mentioned as being developer favorites.

Maybe the field just needs another 50 years to mature.

<comment><USER11> > _Why have I never heard of any software team ever saying "There's nothing > for you to do right now, so just wait"?_

In addition to Parkinson's Law, there's this one: "A poem is never finished; it is only abandoned."

There's never nothing to do, because we can always improve things. And to a business or to a manager, "just wait" costs about as much as "work on something of little importance" but provides less benefit. It might be different if programmers were all on zero-hour contracts.

(OTOH... Firing engineers could work. I wonder why sites that seem "done" don't decrease their payrolls. Pride?)

<comment><USER10> I disagree that "we can always improve things". That only works in a few fields.

When Tom Wolfe was finishing up a new novel, adding more writers wouldn't improve the story. When a cancer patient is undergoing chemo, adding more physicians this afternoon won't improve the outcome. Adding cooks to the kitchen of my favorite noodle shop isn't going to improve the noodles one bit. Adding more actors to a film's shoot schedule isn't going to make it go any faster.

In all these cases, even if you gave me 100 more skilled people for free for a week, I'd tell you that we don't need them, and it would actually hurt us for them to participate. Changing the plan or going off-plan has a real cost. Mature fields like civil engineering have a great track record _because_ they don't just let extra people make contributions at any point in the process.

BTW, according to Wikiqote, the correct (and unabridged) quote is: "A work is never completed except by some accident such as weariness, satisfaction, the need to deliver, or death: for, in relation to who or what is making it, it can only be one stage in a series of inner transformations."

For programming to be a mature field, "the need to deliver" must be a necessary component, and "satisfaction" should be the goal, not merely an "accident". We can't utilize the process of a 19th century French poet and expect to get results like 21st century civil engineers. This was a guy who (according to his Wikipedia article), "around 1898, he quit writing altogether, publishing not a word for nearly twenty years."

</comment></comment></comment><comment><USER12> People definitely fetishize complexity. I often mention that I like an intellectual challenge at interviews, and the interviewers often mention 'oh, but this project is _very_ complex' like they are saying something naughty. (Once, the interviewer followed up with "we're using _algorithms_ ). I suspect they are usually right, and the codebase is a pile of unnecessary design patterns (because those are what educated developers use, right?).

Where I currently work we're using Azure to do a shitload of computations. At the same time, many modules don't even bother to throw away intermediate calculations. They literally have a _giant_ array of them, and save every result, for each step, even if it's not necessary.

But hey, the project is seen as a huge success, because it's _so complex_.

<comment><USER13> More Azure billage to the customer, more kickback from MS.

</comment></comment><comment><USER14> When talking about software complexity I'm always reminded of the old quote by German general Kurt von Hammerstein-Equord but attributed to various military leaders:

      I divide my officers into four groups. There are clever, diligent,
      stupid, and lazy officers. Usually two characteristics are combined. Some
      are clever and diligent – their place is the General Staff. The next lot
      are stupid and lazy – they make up 90 percent of every army and are
      suited to routine duties. Anyone who is both clever and lazy is qualified
      for the highest leadership duties, because he possesses the intellectual
      clarity and the composure necessary for difficult decisions. One must
      beware of anyone who is stupid and diligent – he must not be entrusted
      with any responsibility because he will always cause only mischief.

Clever and diligent developers devise complex solutions to complex problems, which may often be good enough.

Stupid and lazy developers can be entrusted to come up with simple solutions to simple problems.

Clever and lazy developers are able to find simple solutions to complex problems, a very desirable trait.

But stupid and diligent developers, given the chance, _manage to implement complex solutions to simple problems!_

<comment><USER15> [http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer....](http://www.ariel.com.au/jokes/The_Evolution_of_a_Programmer.html)

I have been saying for many years that overengineering is the plague of modern software. Almost everything seems far more complex than it needs to be.

<comment><USER14> Yes, definitely. There are too many diligent and too few lazy programmers. Too many devs take pride from coming up with complicated, overengineered abstractions – after all, if they can manage the complexity they must be really smart, right?

<comment><USER16> >Too many devs take pride from coming up with complicated, overengineered abstractions

This is what I feel about the current JavaScript ecosystem. I feel like web development became popular so programmers from other disciplines (C, Java, etc.) jumped in and found it to be too simple so they've hijacked the ship and created a new JS ecosystem that is as complex as their old environments.

<comment><USER17> Coming from a (primarily Windows) desktop development background, I can definitely tell you that JS/HTML/CSS and the DOM is some of the most complex, over-engineered stuff to ever see the light of day. It _seems_ simple, but that's because it _was_ simple initially, and now it's grown into this monster that has very little design at all and is just piles and piles of APIs and code added on top of other APIs and code.

Desktop development is blessedly simple, in contrast. The problem is that desktop development APIs and UI toolkits have been neglected for many years in favor of web and mobile, so now desktop development is _also_ a fractured mess because much of it is outdated or hasn't kept up with current graphic design and UI standards. But, at its core, desktop development doesn't struggle with oddball concepts like promises and other bizarre features that were introduced to overcome issues with the overall design of the language/environment.

</comment></comment></comment></comment></comment><comment><USER18> I think it could be that rather than worshiping complexity some people find it hard to value or respect simple things, and that that leads them on a path to "accidental" complexity. Like when someone find out that a rainbow is just water refracting light, or the sun is just a big ball of gas... that it takes some of the coolness out of it. There could be a tendency like that to find simple systems disappointing.

Or it could just be that people have a certain mental budget for maximum complexity, and they'll try and make sure they spend it all in the belief that it will cover more uses.

Or it could be that complex systems tend to stick around because they are far more immune to random management changes because everyone goes "oooh, we'd better not touch that". Simple systems might becomes the victim of their own ease and get subsumed by a more complex monster.

<comment><USER19> I have heard co-workers say that the code where we were working used to be dissatisfactory because there just wasn't very much of it, but now it's much better. My mind was boggled. Less code is almost always better (obviously there are exceptions, but rarely in production, in my experience).

<comment><USER8> I cringe reading this. I take far more pride in removing code while keeping the same functionality than writing new code these days.

</comment></comment></comment><comment><USER20> We also worship simplicity. I like to think of things as quadrants. Imagine a 2x2 matrix with columns and rows titled as such: [simple, complex] [easy, complicated].

They are quite not the same since one dimension denotes the complexity of the thing whereas the other denotes the complexity of the act of building, maintaining and evolving the thing in question.

We should always strive for easiness, however complexity shouldn't always be avoided. Quite to the contrary, staying away from complexity locally often leads to that complexity being sprayed on a global level, and that's when it turns into something complicated.

I have too often seen "complex" code, i.e. code that works on "complicated" datastructures such as trees and graphs be discarded in favor of solving the problem "simply" and directly, which means by disseminating the problem's logic accross the codebase and with multiple, gradual bugfixes because the problem being intrasequely complex is underspecified and cannot be tested in isolation of the system.

Of course the same people that are baffled by "complex code" and think simplicity sums up to looking away and not anticipating future needs, are the same who advocate it. Actually, they like good design and typography, focus more on indentation than datastructures and generally have a taste for nitpicking with as many subtle details as they can come up with, not seeing past the filter of their own opinion about what simplicity and complexity entail, and of course that makes the social process of building code a slow nightmare that does not converge.

I sound harsh I know. What I want to point out here is that by denigrating complexity in favor of simplicy, we may get rid of medieval savants, but we open the door to plain idiots disguised as zen masters.

<comment><USER21> You actually sound diplomatic.

Wanna hear something harsh? Most programmers I ever worked with for 17 years of career do not deserve the right to touch a keyboard; they should work on farms. That would be [somewhat] harsh.

You are on point with everything you said. Ego, strong opinion enabled by a secure job position where no amount of professional failure will ever get you booted (because you are isolated from the business outcomes), echo chambers of fellow bros who think like you, and plain old fear of change is what drives most humans -- and programmers aren't an exception.

IMO it's high time some formal certification and legal liability to be introduced to our profession. Also, pick 5 imperative and 5 functional languages and make them "official". People love their religious language wars but it has to stop at some point because billions of bucks are being wasted on 25-year old egos.

<comment><USER20> Keeping on being diplomatic, I don't think it's an ego problem per se: instead, the egos fight over pointless things such as coding style. Don't get me wrong, I've nothing against adopting a coding style nor being told I misindented code by mistake. I'm fine with this, this is teamwork. But when the coding style keeps evolving, is not the same depending on the code base, when you have to take into account who your reviewer is in order to know which style to adopt, and when in addition you have very "diplomatic" ways (or, to put it more bluntly, when you have a dominated and introverted personality) you just end up being a punching ball for the whole team and serve as an indirection layer so that the biggest egos in the team can fight each other through proxy wars.

As for a formal certification, here in France "engineer" is a state-certified status. There is no legal liability I can think of (there might be some when you're engineering bridges, but I have not heard of something similar concerning software). To be frank, this status is bullshit. At work I'm using a payment API from a local shop. The CTO comes from a top rated school (the french Calltech), yet their API does not ensure the reception of async notifications like if communication failures wasn't the crucial characteristic of a computer network. In addition to that, they are unable to provide a dedicated infrastructure to their big customers and ended up implementing a rate-limiting system on top of their absolutely business critical payment API (and boasting about it in blog posts). Last time I checked my company experienced a 80% drop rate in payments due to errors or the rate-limit being exceeded.

I say "last time" because I haven't been to work in months, my sick leave being extend month after month by my psychiatrist. I worked a lot these past couple years. In 2017, I think I averaged 70h per week. Actually, I have no idea. I just know I worked a lot of 80/90h long weeks that year. What's certain is that my hourly pay rate dropped under the legal minimum, which isn't surprising since I have the lowest salary in the team (a little less than 40k€/y). Everybody comes to me to fix their shitty problems, and when I push PRs to avoid them code aesthetics and "simplification" takes over in the code review and it takes foreeeever, and I'm never guarded against bug i may have introduced, only indentation and inessential shit like that, so I have to review my code on my own, and these PR never see the light of day and then I'm suddenly considered the master of unfinished work, almost in a self-satisfied tone by people who work almost twice as less as I do and earn almost twice as much. Also I'm not allowed to work remotely (but everybody else in the team is) and I have to be at work before everybody else, and the fact I sometimes come two hours earlier is never taken into account. Oh and my sleep and medication is monitored and I have been subject to very condescending and just borderline illegal remarks about it.

I'm just insanely butthurt to be honest. I could just as well start complaining about being "talked to like a dog" (these are not my words, but what two persons independently told me about the way I was being treated in the team).

And you know what, they are all very concerned about keeping the project's complexity low. Coming from a Clojure background I exactly know what this means and what's wrong with their approach, i.e. they see complexity as opposed to simplicity, but what's pertinent is to actually oppose it to easiness. See Rich Hickey (Clojure's inventor) "Simple made Easy" seminal talk for an in-depth overview of software engineering from this perspective.

To give a concrete example of what this misunderstanding leads to, let me compare the simplicity of markdown, praised by many minimalism hipsters and whose main force is to make us forget its limitations, fascinated as we are by its fixed-width typographical beauty, VS the simplicity of acknowledging that mixing text with control characters (the old-fashioned unix way) is not a sound way to build complex things at a large scale.

Anyway, since then, I've become extremely wary of those who advocate simplicity just like an early or "private" christian would dislike Church (or what it has become).

I'm now getting back to working on extending Clojure's compiler to experiment with the idea of integrating the notion of IDE and editor directly at the language level, but deep down I'm not sure I can continue with this kind of bullshit career, where ability to handle complexity is not just disregarded, but is punished.

<comment><USER21> Yep, you ended up like the punching ball of the team. Everybody has frustrations and somehow you ended up being that person who everybody mistreats and vents to. You have to end it.

Usually I would tell you "leave your job" but me being from Eastern Europe and not in the cozy enabling environments of most of Europe... I realize you might not have the choice.

I don't know your situation so what I can recommend is probably misguided. Still, here goes, in case it can help you (and in case it's not obvious):

1\. Leave the job if you can. You already are not working and are apparently still collecting some kind of paycheck. I am not sure any amount of medication of psychiatrists will help you overcome the fear of eventually coming back to that hell you have been working in. How do you feel about that prospect?

2\. Take a creative break. It seems you already are doing something along these lines by working on things outside your immediate duties. Do they fulfill you? If not, definitely just stop. I lied on my ass for 2 months before actually going back out there and starting to get stuff done. Sometimes you just need it. Also, programming in your spare time isn't always relaxing.

3\. Talk to people about your situation -- not only to people who are paid to listen to you though. That's a very broad advice so apply it as you like. ;)

It's OK to be butthurt/salty in this situation. We aren't angels or saints, these things can and do get to us. And you have been wronged, many times.

I faced the same. I actually come across as quite manly and assertive to a lot of people but that's mostly my appearance and my attitude of gettings things done without tarrying on petty differences. I strive to never argue emotionally or engage in yelling competitions with people and they very often mistake that for me being a pushover. What I usually do is: if somebody is becoming an obstacle, I just go to a higher manager and talk to them about it. If they don't care or have the wrong idea then I just reduce my efforts in the said work significantly and just move from paycheck to paycheck. Done that many times and now I am suffering financially for months -- very severely! -- because I want to choose a workplace where things are not like that. It seems the mythical "cultural fit" is not BS after all...

What I take from your gently shared pain is that you are not a conflicting persona. That's okay. You don't have to be. Do your best to find an environment where you don't have to fight daily with people. They do exist.

</comment></comment></comment></comment><comment><USER22> Engineers are supposed to simplify complexity, taking something complex and making it simple.

There are many engineers though that like to over-complicate and add complexity because it makes them look smart or they think they are expected to create complexity.

Complexity through simple parts is ok, but overall the job of an engineer is to take complexity and break it down to simplicity and simple parts.

In the game dev world for instance, Unreal used to be needlessly complex, still is a bit, then Unity came along and made things simple, so Unreal then looked to make things simple.

Or in the web dev world, a framework might abstract away the underlying standards and add complexity on top to seem simple, but actually make the domain more complex with more to learn and push for developer lock in to the framework over basic standards and simplicity. The first version of .NET with WebForms was an example of this, other web frameworks can be seen as this as well.

Lots of engineering people like to look smart by managing complexity but it doesn't always need to be so complex. Sometimes time pressure can create complexity and thus technical debt due to the complexity. Some simplification is misguided, a one liner that isn't understood 6 months later is not simplifying.

An engineer that takes something simple and makes it more complex for no reason other than job security or to look smart is the worst kind of engineer.

<comment><USER23> > An engineer that takes something simple and makes it more complex for no > reason other than job security or to look smart is the worst kind of > engineer.

I don't think most people set out do do this, most complexity comes from attempting to simplify things. A develop will see two similar bit's of code and try to stuff the commonality into a base class. In their minds it's simplified because there is less code but then when someone else picks up the maintenance it's more complex because now the logic is distributed. Then the requirements of each diverge slowly and over time each simple change is hacked into more code paths of this distributed logic. Eventually most simple changes take time because you have to be sure you're not breaking other potential code paths.

On a more macro scale, complicated architecture is another symptom of this over optimistic pattern matching that humans are susceptible to.

<comment><USER21> We the programmers sometimes get too caught up on extracting seemingly common code that we don't stop for a minute and think "but does it really make sense to extract it?".

It's a very classic problem and it's something that code reviews and pull requests for anything you do are such a good idea -- provided that your team is not a total echo chamber of course.

</comment></comment></comment><comment><USER24> One word: "Plastics", no, actually it's "Job Security". There is an incentive in ANY profession to recommend or encourage more of your own labor. For example, a surgeon is more likely to recommend surgery to solve a problem than a non-surgeon.

This bias isn't necessarily intentional: human nature (competitive evolution) just naturally pushes us to interpret the world in a way that makes ourselves as valuable as possible.

In IT, complex solutions that we create or learn keep out competition. "Only Bob knows how to fix this monstrosity" is a common pattern.

Simplicity should be added to the employee evaluation process. This includes parsimony in both features (YAGNI) and in how the features are coded.

Further, avoid "eye candy" UI gimmicks that add complexity and fragility. End- users often love them, but they are often a longer-term maintenance headache. Beauty ain't free.

<comment><USER25> > This bias isn't necessarily intentional: human nature (competitive > evolution) just naturally pushes us to interpret the world in a way that > makes ourselves as valuable as possible.

For the surgeon example, the simpler explanation is that, given a particular ailment, they just know only the surgical treatment, not the alternative drug- based therapy.

Or if they know, they know it way back in their head and don't think of it unless explicitly prompted, whereas the surgical procedure is probably recent experience.

I could also see this apply to IT. Given some problem, maybe there would be a simpler solution if I implemented this particular problem in, say, Python, but I'll implement it in Go because I work with Go a lot and all its idioms are much more salient in my mind.

<comment><USER24> That's a variation of "if all you know is hammers, then everything looks like a nail". That's certainly an aspect of it, but I'm not convinced it's the entire story. It would be interesting to see studies on how prior careers/specialities affects one's decisions in new specialities.

</comment></comment></comment><comment><USER19> I was with him until the very end, where he said that the cloud, microservices, etc. were the simpler approach, that other companies (not Google or Amazon) are trying to avoid.

What I see is the opposite; companies that would do perfectly well with a server or three, and a simple monolith, trying to instead use Kubernetes and an Amazon service salad because that's what Amazon and Google say to do.

<comment><USER26> I think it is worth knowing how you would grow into one of those solutions. That said, I do not know why you would try and start there. And, yes, migrating between solutions is always difficult. However, it is also the kind of problem only successful companies ever should have.

</comment></comment><comment><USER27> I think a massively underutilized core strength of developers is that we have a working thought process in front of us in the form of code, which can be used for more than just running a program.

In my experience, complexity in the code often reveals not only technical problems, but frequently also points to product and business issues. Exploding complexity and long iteration cycles are often a consequence of bad business decisions. Looking at the points of exploding complexity in the code can sometimes help identify these issues.

The key is to make the disciplines work together. Business and product decisions should not trickle "down" to developers. Instead, there should be a working feedback loop. For that to be achieved people need to be team players and talk to each other frequently. It also helps to have a 10% or so generalist in each team member's head to guarantee a shared understanding of a high level perspective.

I know, I know — this is all a given in agile methodologies. But in reality, it's unfortunately rarely executed that way.

</comment><comment><USER3> One only has to look at any Node.JS codebase for the answer to your question. On the Java side, the Spring Guys love complexity as well: [https://docs.spring.io/spring/docs/current/javadoc- api/org/s...](https://docs.spring.io/spring/docs/current/javadoc- api/org/springframework/web/servlet/support/AbstractAnnotationConfigDispatcherServletInitializer.html)

<comment><USER28> Complexity is a choice in most programming ecosystems. The most simple applications I have ever worked on are node applications.

In some ecosystems it is more consistently complex (Java?) but others just have many approaches with different complexity levels for you to choose from (node?).

<comment><USER29> Yeah, agree. I've worked on both very simple and intuitive Javascript codebases, and absolutely heinous ones that should honestly just be abandoned.

I do think JS has a lot more variation in complexity than other ecosystems though.

</comment></comment></comment><comment><USER30> Everything is always at the edge of maximal complexity. If it were any more complex it would collapse under its own weight. If it were any simpler someone would say "it would be so easy to add..."

</comment><comment><USER31> Simplification of systems should be a an actual college course, mandatory for all computer science grads.

Too many people these days _manage_ complexity through ever more complex sets of tools instead of simply getting rid of it. They use complexity as an excuse to introduce more complexity and it just keeps growing.

One important thing I discovered for myself is the practice of starting with _minimum viable representation_ of the problem. If I work on a system, I try to write down what it needs to keep track of. If I work on a component, I start with the minimal configuration it requires to instantiate. This helps to avoid anchoring myself with available tools and "common" solutions.

</comment><comment><USER32> There is a kind of complexity worship I've noticed, but my accounting of it is that it comes from folks who aren't aware of the methods of simplification employed by those successfully wrangling complex subjects/systems; absent an alternate explanation, they assume that the mind of the complexity wrangler is fundamentally different from their own.

In other words, rather than imagining the complexity wrangler inventing layers of simplifying abstractions, they imagine him/her to just have a radically extended short-term memory or something on those lines.

The article points out the case of architects worshipping complexity in some cases by essentially over-engineering. I think this is a mistaken explanation. I think it's more of a fear-driven thing: the architect is like, "Oh shit, this problem I'm gonna be dealing with is gonna be _really_ complicated; I'd better throw everything I've got at it!"

</comment><comment><USER33> Primarily, people worship their own positive self-image. Complexity gives them the chance to view themselves as smart enough to handle this really complicated thing.

<comment><USER34> Yup. Also, they'll reason that the way from junior to senior is knowing and using _design patterns_. I've seen plenty of inexperienced cow-orkers overcomplicating things because they thought that's how good programmers build things. I know I did that too, when I was first learning to program.

(Popular books on OOP and code style definitely do _not_ help keep things simple.)

<comment><USER8> i agree, I would say that this is where most of my experience comes in valuable, not knowing the latest framework, but being able to find a level of abstraction that promotes simplicity and maintainability in the code. Yet interviews seem to value the opposite.

</comment></comment></comment><comment><USER35> _After all, we all are looking for technical challenges and want to implement interesting projects._

In my experience everyone does, but the difference between the complexity- worshippers and (for lack of a better term) simplicity-worshippers is that the former like to take a simple problem and blow it up with complexity, while the latter like to take a complex problem and make it simple. In other words, some people like the challenge of making things more complex, while others like the challenge of making things simpler.

To make a concrete example, complexity-worship would be something like using half a dozen different new web frameworks/languages/libraries to set up a personal blog, while simplicity-worship would be more like an H.264 encoder in a single file[1] or a self-compiling C-subset JIT[2].

One thing that seems somewhat obvious about the complexity-simplicity divide, and which could also explain the prevalance of complexity-worship, is that it is relatively speaking much easier to generate complexity than to reduce it, and unfortunately it seems the majority of developers just don't have the skill to reduce complexity. It's easy to glue a bunch of existing code together without really understanding how it all works; it's much harder to take a spec that dozens of experts have worked on for many years, and condense it into a concise implementation.

[1] [https://news.ycombinator.com/item?id=18045494](https://news.ycombinator.com/item?id=18045494)

[2] [https://news.ycombinator.com/item?id=8558822](https://news.ycombinator.com/item?id=8558822)

</comment><comment><USER36> > The managers, that this paper describe, worship complexity without realizing > it. They want as large a team as possible and thereby they make a problem > complex because a large organization can cause the architecture to collapse.

Maybe we have different definitions of "worship", but this seems like accidental complexity, not reverence. If anything, people tend to worship simplicity.

<comment><USER37> What people say they want, and what they do, are only loosely related. I have lost track of the number of in-house / one-off frameworks I have seen that have been justified on the grounds of making thing simpler, but which have the opposite result.

Efficiency is another common excuse offered for gratuitous complexity.

<comment><USER34> Other common excuses are "we won't optimize prematurely" and "we avoid NIH syndrome". You then end up with something like Node ecosystem.

Simplicity is hard.

</comment></comment></comment><comment><USER16> Have you seen web development recently? The answer, apparently, is a resounding YES!

</comment><comment><USER38> Conway's insight, and the subsequent law that bears his name, was so laser- precise that it is uncanny.

Local incentives matter too. In any social system there's an incentive to "flexing your muscles" and showing off our abilities, since that helps to build prestige and respect.

When coding moves away from "impact", and "scaling" and "agility" and back to old fuddy-duddy engineering staples like better up-front design, partitioning problems properly and solving them in toto before shipping (i.e. doing it right the first time), allocating the right problems to the right people-- difficult to do in a team with junior members that need space to grow and experts that can dash things out in minutes--then we'll hopefully be sober enough to see through cargo cult practices down to what works.

</comment><comment><USER39> There is "complex", and then there is "complicated", I believe the author refers to the latter. A complex solution involves a lot of moving parts, but each of these parts serves a specific purpose, such that it is possible to break down the solution into relatively simple, understandable blocks. On the other hand a complicated solution will have inefficiencies, some of its building blocks may be too big or convoluted to be broken down further, causing implementations that are hard to understand and/or may be redundant, feeding back into the complications. I think Rube Goldberg's Inventions are an excellent example of the difference I'm trying to make.

Social posturing is certainly largely to blame for over-complications, but I think more deeply, a lot of people hate to let go, to be told that the very thing they were responsible for, that they worked hours/days/... on isn't necessary any more, or perhaps never was. And then in the other direction, there are what I refer to as "exponential requirements", for lack of a better term. You buy a large bag of coffee that you could simply use as you go and store in the fridge. Or, you could have a jar with some of the coffee in it, and the rest of the bag still in the fridge. Then a plate to put the jar on. Then a new shelf to put those plates and those jars. By the time you've followed this track long enough, you're looking at buying a new house, even though your essential requirements haven't changed from the beginning.

</comment><comment><USER40> The ability to recognize and manage complexity is surely a strong survival trait, akin to wisdom. As true for hunting and gathering as for particle research. Complexity is also somehow deeply related to beauty, or at least awe. Such emotions motivate us to become more observant of the complex, possibly therefore out-replicating the more oblivious.

Worship of the complex, or at least a particular focus on it, may be built in by Chuck Darwin.

</comment><comment><USER41> The fetishism of complexity in engineering (and our machine loving culture) is much like the fetishism of helplessness in some of our religions. Both intensely value surrender to an unknowable omnipotent power. A power addressable only by blind ritual.

You might say that in both cases there is a longing for a dissolution of self. Or death even.

Is the machine-lover a death-lover?

</comment><comment><USER42> when i was younger I used to think complexity was some sort of example of ignorance. I work as an automotive engine mechanic, so my gold standard for "its easy and works" was stuff like old fox body mustangs and such.

Fast forward to 2018 and stuff like timing chains are buried under a mountain of engineering sins. I have a honda with the oil pan, air conditioner, exhaust, and oil drained and in various states of disassembly and for what? a chain.

As i get older, I start to worship it. its inevitable that engines come with a spinal cord of three or four dozen sensors you need to carefully disconnect before doing anything. But what I cant abide by is the inclusion of demonstrably poor quality parts. Companies hope the engineering complexity will just baffle people into accepting the idea of disposable plastic valve covers and plastic water pumps, but I remember when these things didnt get thrown out.

<comment><USER43> _Companies hope the engineering complexity will just baffle people into accepting the idea of disposable plastic valve covers and plastic water pumps, but I remember when these things didnt get thrown out._

I saw this part:

[https://youtu.be/NZAWeR46z_Q?t=238](https://youtu.be/NZAWeR46z_Q?t=238)

of this review the other day and began to wonder: how prevalent is this really?

</comment></comment><comment><USER26> The intro on Conway's law was more fun to read than I expected going into this.

It is interesting, because I've seen Conway's law used as a weapon against modularizing something. I think the key is that you need to weigh what you are getting out of the modules. Even if it is, in some ways, more complicated, if you can more meaningfully delegate ownership of parts of the problem out because of the the modularization, it is a good chance it is still worth doing.

I don't think I can give a brief example. In my case, we had three teams, rather than trying to put everything on one team, I was trying to ask for what the three major components of the system were. If we couldn't agree on that, it seemed unlikely we were using three teams well.

</comment><comment><USER44> The "Simplicity: Not Just For Beginners" talk does a great work of touching the problem from the opposite angle : [https://www.youtube.com/watch?v=n0Ak6xtVXno](https://www.youtube.com/watch?v=n0Ak6xtVXno)

<comment><USER27> Indeed a great talk.

Here's the related HN discussion link: [https://news.ycombinator.com/item?id=18093158](https://news.ycombinator.com/item?id=18093158)

</comment></comment><comment><USER45> Surely at issue is that we do not know how to generally handle complex problems well. Particularly those _outside_ the domain of computing.

The old fallback of functional decomposition into parts that can be reasoned about and developed independently, is problematic due to the need to constantly rework and extend the hierarchical decomposition as more about the domain under consideration is specified.

How to predictably build a payroll system, or air-traffic control system or a much simpler (at first glance) yet inevitably complex real-world system, remains out of reach.

Surely we don't worship complexity, but outside of computer science, just still don't know how to deal with it?

</comment><comment><USER46> The more complex a system is, the more people it takes to maintain, write, test for it. It builds the manager's empire and also increases mindshare for the complexity-driven approach. I've seen it many times.

<comment><USER47> I've seen an even worse version. If only the person who wrote it understands it, then when someone else tries to modify it, they will likely fail. Then the original author can back-channel predict the failure and use that as further evidence for their brilliance and senior-ness.

</comment></comment><comment><USER48> Any serious programmer simply can not worship complexity because then his/her work would never get done.

You can start with a trivial problem and grow it into a system so complex it's hard to even begin grasping what it actually does and how the software actually works.

If you start with a complex problem the only viable path is down to less complexity; often we won't reach simplicity but at least we're somewhat equipped to handle the underlying complications.

</comment><comment><USER49> How many times have you stumbled upon something on Github that took 100x more lines of code and 20x more contributors than necessary? Probably every day.

</comment><comment><USER50> Another law of complexity: the Law of Requisite Variety: If a system is to be stable, the number of states of its control mechanism must be greater than or equal to the number of states in the system being controlled.

[https://en.wikipedia.org/wiki/Variety_(cybernetics)#Law_of_R...](https://en.wikipedia.org/wiki/Variety_\(cybernetics\)#Law_of_Requisite_Variety)

<comment><USER51> Is there a better introduction to these ideas than Wikipedia? It makes intuitive sense, but I'd like to see the proof of this statement. Wikipedia mentions a "good regulator theorem", but the citation is pretty bad: "Conant 1970".

Edit: The paper must be this: [https://www.tandfonline.com/doi/abs/10.1080/0020772700892022...](https://www.tandfonline.com/doi/abs/10.1080/00207727008920220)

But I'm still interested if there's a better introduction.

Edit #2: Looks like Ashby's 1956 book around page 207 has an argument based on information entropy. I haven't read it, just skimmed it. I'll look more closely later. You can download the book here: [http://pespmc1.vub.ac.be/ASHBBOOK.html](http://pespmc1.vub.ac.be/ASHBBOOK.html)

<comment><USER52> The whole "cybernetics" field is pretty weird to me, I think the notation and lingo have sort of moved on (I could easily be wrong and biased without realizing).

However the theorems you are talking about have useful, well studied analogs in the field of control theory.

For example the Law of Requisite Variety is very much related to the concept of under-actuation ([https://en.wikipedia.org/wiki/Underactuation](https://en.wikipedia.org/wiki/Underactuation)).

The good regulator theorem becomes the internal model principle. [https://en.wikipedia.org/wiki/Internal_model_(motor_control)](https://en.wikipedia.org/wiki/Internal_model_\(motor_control\))

I think you'll have much better luck finding good introductions to these topics in control theory than in trying to learn more about cybernetics.

</comment></comment></comment><comment><USER53> Because we can feel smart if we created something that others can't simply understand.

</comment><comment><USER54> I very much doubt this originated from me but whether I heard this somewhere and took a liking to it or thought of it myself, I became fond of saying this while I was at Google:

"How do you know if you're engineering if you're not overengineering?"

Now I don't direct this at Google specifically. This is more about the mental traps we, as engineers, can easily fall prey to.

Take interviewing and the FizzBuzz thing that was popularized (if it didn't originate with) Joel Spolsky. The beauty of FizzBuzz is that it's a quick and great _negative_ signal. This doesn't mean that if you ace it, you're a superb engineer but it does mean if you fail it, you're almost certainly not. Hiring (from the employer's perspective) is a numbers game. Every candidate costs you time (giving interviews, writing feedback, etc) and is a huge opportunity cost (other work that could be done, other candidates that could've been interviewed) so the goal is the filter out the "no"s as quickly as possible.

So the engineer trap when faced with something like FizzBuzz is to think "oh wait, that's too simple!" and they go on to change the problem to something you'll pass if you've heard of the particular obscure algorithm and will probably fail if you haven't. It's a easy fallacy to fall for. Harder is better. However now you're not optimizing to cull early candidates. Now you've designed a test that optimizes for people who do well coding under pressure (with some degree of luck) on a whiteboard. That is completely different from the original intent and (IMHO) almost entirely useless as a hiring signal.

Another example: another thing I was fond of saying at Google was that there was a hierarchy of engineers:

\- At the top level (in their minds) were the C++ engineers. You're not engineering if you're not writing code in C++ (basically)

\- Next tier were the Java engineers. They thought you weren't engineering unless you were writing in Java or C++

\- Next came Python and Go

\- Last came Javascript

Now at Google I met some engineer who were _superb_ C++ engineers. Like truly amazing. I also met others who were like walking Wikiepedias for the C++11/14/17 standards. And no, that's not the same thing.

So one example that springs to mind once was surprised to learn that I didn't know what perfect forwarding was. This is something that probably only needs concern you if you're writing a widely used C++ library using templates (especially template metaprogramming). As a user of such libraries, it's not often something you need to know.

My point here is that with all the knots C++ has twisted itself into over the years as a result of its origin and legacy, the trap some fall into is viewing such complexity as a virtue instead of baggage.

IME these aren't the people you want making design decisions on complex systems. The people you want making design decisions on complex systems are the ones who reverently follow Postel's Law.

</comment><comment><USER55> people are definitely suckers for complexity.

Complexity of a system actually creates meaning for people that do understand it and can navigate it.

Complexity also justifies headcount and effort put towards maintaining, enhancing something.

Finally, people associate complexity with being smart. If you like simple things you are either a newb or you are [very] senior/old/experienced.

</comment><comment><USER56> YES

</comment><comment><USER57> No.

</comment><comment><USER58> Yes.</comment>


Ask HN: How can I make $50k per year working full-time from my laptop? - <AUTHOR>

I'm heading into a transition period and I'd like to try and get into a digital nomad work situation.<p>- I can't program but I can code html/css and manipulate php (working with wordpress themes, etc...)<p>- My entire work background is in accounting/finance<p>- I have about four months left at my current job but I can get started on a project working nights and weekends.<p>Any ideas? Any suggestions for remote work web apps or tools? <comment><USER2> A rule of thumb I see often is that as a freelancer you would need to divide your target for the year by 1000 and that would be your target hourly rate. So, you would need to look at charging $50 / hour for freelance work to hit 50K per year.

From my experience, that's about right for freelancing and that's about where you should be charging if you are decent with Wordpress. I know of other developers who charge at least $50 / hour and don't know a lot of PHP or even JS. All these developers do all day is configure WP sites.

That said, charge what you think you can charge. The difference between $50 / hour and $80 / hour might simply be what you ask for.

Realistically, the size of your digital Rolodex and your ability to sell is what's going to allow you to hit your target rate. Start networking like crazy and saving as much as possible right now. Hit Twitter, LinkedIn, Wordpress forums and any other networking channels you can find to see the conversations and hook up the jobs. As a digital nomad you would be at somewhat of a disadvantage because you wouldn't be able to establish yourself in one location. That's not to say that you need to work with local clients, but it only helps if you can do it.

You could also hit sites like Odesk and Elance but you have a lot of competition there with Wordpress. You will need something which will allow you to stand out. The more niche and the more you can stand out the better. If you can stand out, then good potential client won't even look at the competition offering to work at $15 / hour.

So, aside from networking, you need to do whatever you can to try to establish yourself as an authority. Create a site, write articles and contribute to the community. Work to make a voice which other WP developers will take seriously. Continue to learn WP and read as much as you can to find out what people are doing to push the envelope with it.

You could branch out into other areas aside from WP, but you should start with your strengths. You could focus on HTML / CSS but combining that with Wordpress will give you a more niche target.

Try to save up at least six months living expenses before you hit the freelance circuit.

Hold off on travel until you have had a chance to get solidly into the flow of bringing in work. Also, freelancing while on the road is difficult. You might benefit from moving somewhere with cheap living expenses though.

<comment><AUTHOR> Do you think wordpress/web developing would be the best route to go?

I've been torn between going that way or trying to establish a cloud accounting/bookkeeping practice and supplementing with wp/dev work.

<comment><USER2> You mentioned PHP and WP so I assumed that's what you were headed. You also mentioned "accounting/bookkeeping" but that's too vague. I couldn't give you anything concrete on that.

</comment></comment></comment><comment><USER3> I am working at a Big4 company and thinking about having a side income, eventually full time. I am able to code tweak some php/rails/html/css.

Have you ever thought about starting out with niche sites for your/our industry? Please leave your email somewhere, i think we should talk; i have some thoughts floating around (niche websites for CPAs/ACCA members). Let me know if you're interested.

</comment><comment><USER4> Learn Ruby on Rails (bias) or Python

It will take you 2-10 months, but there are plenty of opportunities once you've made it.

I'm learning Ruby on Rails and I've done the research....plenty of opportunity.

<comment><AUTHOR> Would you start with Ruby or with Python?

</comment></comment><comment><USER5> I wonder if you could do software testing / documentation remotely? Admittedly I know nothing of how one could find work doing that.</comment>


Ask HN: Where to sell domain names? - <AUTHOR>

I have a few .io names I am not using and want to sell. No idea if they have any value beyond the actual cost, but where is a good place to sell domain names these days? Sedo is the only one I know of. Anyone have experience flipping domain names? I have hunter.io, tunes.io and songs.io - seems like they might be worth something to the right person. <comment><USER2> [http://www.namepros.com](http://www.namepros.com) (I got banned from that site years ago after a buyer framed me, so f __* them)

[http://www.flippa.com](http://www.flippa.com) \- probably only worth it for higher end stuff

[http://www.sedo.com](http://www.sedo.com) \- if it's really high end, just get a broker from there and have them deal with selling it.

<comment> Paul-NamePros chatmasta, it looks like you were banned from NamePros by someone who is no longer part of our staff, and I couldn't find a good explanation for the ban. We're very careful about bans these days, and they don't happen without good reason. I've unbanned you, so you should be able to log in with your old account. (Paul Buonopane, NamePros)

<comment><USER2> Can honestly say I was nt expecting that at all. Thanks!

</comment></comment></comment><comment><USER3> I would sell them on any site you can find. Not one site will work I think the best is to expand your exposure as much as you can. Even if you get only 1 extra view that is a potential. :)

We just opened up a forum section where you can list domain names for free. No fees, just list and you can sell it private without paying the extras that others pay. We only have one listing, but then again we only opened the forum today: [http://killerdomains.com.au/forum/aftermarket](http://killerdomains.com.au/forum/aftermarket)

</comment><comment><USER4> [http://dnforum.com](http://dnforum.com) and [http://namepros.com](http://namepros.com)

<comment><AUTHOR> thanks.

</comment></comment><comment><USER5> [https://flippa.com/](https://flippa.com/) too

<comment><AUTHOR> I'll check it out - I didn't know they did domains as well as websites.</comment></comment>


How Zano Raised Millions on Kickstarter and Left Most Backers with Nothing - <AUTHOR> https://medium.com/kickstarter/how-zano-raised-millions-on-kickstarter-and-left-backers-with-nearly-nothing-85c0abe4a6cb#.o9kxki64i <comment><USER2> It seems like there are some common threads that crop up in these failed kickstarters, especially the ones that require hardware and supply chain knowledge. I wonder if this could present a good opportunity for kickstarter: they could bring on board a team of domain experts that can help vet projects along with an advisory/incubator style model that would help successful kickstarters avoid these pitfalls.</comment>


Chrome reportedly bypassing Adblock, forces users to watch full-length video ads - <AUTHOR> http://www.neowin.net/news/google-chrome-reportedly-bypassing-adblock-forces-users-to-watch-full-length-video-ads <comment><USER2> Skip the article... the accurate information can be found in the update at the bottom of the page:

 _Update: We have been contacted by Rob Wu, a developer on the Chromium project - the open-source foundation for the Chrome browser - who has informed us that this change was not intentional but, rather, an unintended result of fixing a previous security issue (CVE-2015-1297). He confirmed that the issue will only be seen if the YouTube app is installed and that, at the moment, apart from disabling AdBlock or whitelisting YouTube, the only solution, as described above, is to uninstall the app. The problem is expected to be patched in the upcoming weeks or, at least, when Chrome 46 is released._</comment>


Climate scientists are now grading climate journalism - <AUTHOR> http://www.theguardian.com/environment/climate-consensus-97-per-cent/2016/apr/26/climate-scientists-are-now-grading-climate-journalism <comment><USER2> Climate Feedback homepage: [http://climatefeedback.org/](http://climatefeedback.org/)

Unfortunately, the feedback page shows the asymmetric effort required to combat journalism with scientific fact: [http://climatefeedback.org/feedbacks/](http://climatefeedback.org/feedbacks/)</comment>


New US Space Force flag mocked as a 'Star Trek' rip-off - <AUTHOR> https://www.businessinsider.com/white-house-ceremony-unveiled-the-new-space-force-flag-2020-5 <comment><USER2> this has already been debunked, Star Trek took inspiration from NASA logo, and existing Air Force Space Command Logo almost identical to new Space Force logo [https://globalnews.ca/news/6459588/u-s-space-force-logo- star...](https://globalnews.ca/news/6459588/u-s-space-force-logo-star-trek- trump/)

next.</comment>


Show HN: KStash, the search engine for your useful web links, meant for devs - <AUTHOR> Hello, I am a dev.
I built K-Stash for one reason: my bookmarks are flooded. They've become completely useless.
The more projects I do and the more researches I make on websites like, well, stackoverflow, the more links and folders I add to the bookmarks.
What if I needed a particular link, saved who knows where, after 1 year? At least for me, scraping through the bookmarks would be a nightmare, I'd prefer saerching all over again on google.
Why lose valuable time though? What if existed some smart bookmarks, where resources were searchable with keywords, just like a search engine?
Here is where K-Stash kicks in. I built it for personal use, but then I thought it could improve someone else's productivity too!
It's primarily meant for devs or whoever needs to save stuff for future use and build a.. knowledge stash :)
In closed beta right now, and I'd really love to get some feedbacks from you :)
https://k-stash.com <comment><USER2> First tell how it works before asking for payment. Is it a chrome extension? Is it just a site that I have to paste urls into? Are you just indexing the pages or saving them for posterity?

There used to be a service similar to yours called furl. It didn't survive but it was immensely useful. I hope someone revives this idea and makes a viable business out of it. I'll pay.

<comment><AUTHOR> There's a free plan meant to make you discover it, but yes I was planning to add a short demo about its usage.

I am working on a Chrome extension too :)

Atm pages get indexed. Offline saving is a future development.</comment></comment>


Very Useful Development Tools for IT Lovers - <AUTHOR> http://codebeautify.org

<comment><USER2> Loved this site. Awesome job by [http://codebeautify.org](http://codebeautify.org). It's full of development tools and JSON Viewer and XML Viewer is WoW.</comment>


What is your prefered VPS host? - <AUTHOR> Some of the recent comparisons of Linode and Digital Oceans' track records regarding security issues and downtime has led me to wonder what folks are using overall as their VPS hosts.  I've read quite a few reviews of different hosts and have toyed with the idea of using Linode, GoGrid or similar.  I've used Rackspace Cloud in the past, though their pricing is similar to a dedicated box.  I've also run across some interesting articles on SLAs and how useful they are like this one: http://blog.cloudharmony.com/2011/01/do-slas-really-matter-1-year-case-study.html<p>So, what say you HN?  If you had a decently popular site to host and were more concerned with uptime and security but still wanted a good deal, what would you use? <comment><USER2> I've had a VPS ($20/month, 1 core, 768 MB RAM, 20 GB HDD) w/ ARP Networks[0] for three and a half years or so. I have no major complaints and would (and have) recommended them to many others.

ARP is a small company with one guy pretty much running the show. If you need/want instant provisioning, "hand holding", or a number you can call, they are not for you -- I want to say that up front.

That said, I've been quite happy with the service. I no longer use the VPS for my primary web sites but that's because I work for an ISP and can throw as many physical servers in the rack and use as much bandwidth as I want.

When I was using it, I had no problems handling hundreds of requests per seconds when I got linked by Reddit, The Atlantic, Gizmodo, and others all in the same day. I was driving to work and knew "something was up" because I was receiving an usual number of "new follower" e-mails from Twitter but no alerts were generated because the VPS was handling it just fine. (All in all, it was something like 175k visitors to my blog that day, the VPS just kept chugging along.)

Like I said, ARP isn't for everyone but it works well for me. There hasn't been 100% uptime but Garry (the owner) is extremely transparent and, if he's online, you can drop into his IRC channel and chat with him (and he'll happily keep you updated when an issue does arise).

[0]: [http://arpnetworks.com/](http://arpnetworks.com/)

</comment><comment><USER3> 13EUR/month, 1GB RAM, 40 GB HDD, 2TB traffic [http://www.hetzner.de/en/hosting/produkte_vserver/vq12](http://www.hetzner.de/en/hosting/produkte_vserver/vq12)

</comment><comment><USER4> I've been using [http://www.m5cloud.com/](http://www.m5cloud.com/) for a side project and it's really nice -- you can scale CPU/RAM/Disk independently instead of getting shoehorned into set pricing tiers. The flexibility/transparency made it a lot better than a low level Rackspace Cloud Server which is very ambiguous about how much processing power you actually get. That said, I still do use Rackspace Cloud for a different project.

</comment><comment><USER5> I've used multiple vps providers through the years.

Rule 1: Stay the hell away from Rackspace. I was a Mosso user for a while and then it went to hell. Switched to Slicehost and was incredibly happy with them for years until Rackspace bought them. Then it went to hell when they migrated my vps to their infrastructure in January.

I've since switched to Linode and been very, very pleased. They're inexpensive and periodically just upgrade your hardware capabilities at no increase in cost to you.

</comment><comment> spicer-matthews At Cloudmanic Labs ([http://cloudmanic.com](http://cloudmanic.com)) we use Linode for production stuff. Mainly it is worth the extra money to give our customers even a few milliseconds faster response times.

Our apps make a fair amount of concurrent calls to the server. So the 8 cores at Linode really helps.

For all our non-customer production stuff we use Digital Ocean. DO is great. If your site does not have lots of concurrent connections DO is a great option.

</comment><comment><USER6> I'm a fan of [http://bigv.io](http://bigv.io) from Bytemark. I've also had good times with webfaction.com

</comment><comment><USER7> I was initially tempted by DigitalOcean's prices and specs, but was quickly disappointed. My $20/m's VPS from them was outstandingly "meh". On paper it looked like a great deal, but the performance was nowhere near what they claimed it'd be.

About 6 months ago I switched over to Linode and have been loving it ever since. Their customer support and performance is top notch!

<comment><USER8> Until their is a security incident...

<comment><USER7> I felt they handled the security incident fairly well. Definitely better than the majority of companies.

</comment></comment></comment><comment><USER9> HostVirtual [http://vr.org](http://vr.org) $10/month, 512MB, 10GB

BuyVM [http://buyvm.net/](http://buyvm.net/) $15/year, 128MB, 15GB

I've had great service with both of these.

</comment><comment><USER10> Digital Ocean has been working really good for me, plus its cheaper than Linode!

<comment><USER11> I signed up with them a few weeks back to release my (still unreleased) SaaS on. Worked really well for me.

I've been using them to test live etc, set Dokku up and what not and I've had no issues.

</comment></comment><comment><USER12> For open source projects, [http://rackspace.com](http://rackspace.com). I you ask, they will probably host your OSS project for free.

</comment><comment><USER13> ovh, they just release new server today at 3£/month [https://www.ovh.co.uk/dedicated_servers/kimsufi.xml](https://www.ovh.co.uk/dedicated_servers/kimsufi.xml)

<comment><USER14> But you have to live in the UK to buy it.</comment></comment>


Ask HN: Can we have a "read later" for the posts? - <AUTHOR> It would be great if a "read later" was there for posts as some good posts will be missed in the long run.<p>"read later" can be also used as a bookmark. <comment><USER2> If you install Pocket, a `save to pocket` link appears below each post. I think this is essentially what you're looking for.

<comment><AUTHOR> I was more interested without any add-ons.

<comment><USER3> I'm not quite sure I understand why you wouldn't want to use an add-on. I can certainly see that the flip side is undesirable. Do you think it makes sense for hacker news to solve this same issue (read it later) when there are many external options to solve the issue? If your answer to this is yes, would you also support adding tweet this story buttons? What about share on Facebook, email me a copy, copy to slack, print to google print, etc. buttons? What about friending users, following them, private messaging? Should hacker news allow images in stories next? If it adds images, then perhaps advertising would be ok?

What are some of the reasons that you read hacker news beyond the particular stories? How do you find the interface? Is it uncluttered? Does it get in the way of the content at all?

In my opinion hacker news is fine as it is, though I mostly hit it via [http://hckrnews.com](http://hckrnews.com) instead of the main site.

</comment></comment></comment><comment><USER4> Safari has a feature called "Reading List" that does exactly this, but for the entire Internet in a generic way instead of only as some specific feature on this one website tied to an account.

<comment><USER5> Plus it can save articles offline for when you are away from Internet access. Much more useful than just a list of bookrmarks IMO.

</comment></comment><comment><USER6> You really want a generic solution to this. "Open in new tab"?

<comment><USER7> Bookmarks?

</comment></comment><comment><USER8> Is anyone aware of a tool that will allow me to search through my browsing history? I'm constantly reading things, forgetting where I read them, and then wanting to remember what it was I reading yesterday, the day before, or earlier.

<comment><USER9> [http://fetching.io/](http://fetching.io/) is a tool I once used but had issues when we did a local or cloud option with no way to pull my cloud data to the local while also not being willing to pay for cloud one out of beta. The dev seems like a good guy and if I were to try it again I would use it.

</comment></comment><comment><USER10> All posts you have upvoted are available via 'saved stories' in your profile.

<comment><AUTHOR> What to do if you do not want to upvote a post but want to read it later on.

Read later on need not be tied with voting

</comment></comment><comment><USER11> I use readability for that. Firefox has "pocket" and Safari the "Reading list".

</comment><comment><USER12> Wallabag is a good tool for this (similar to Pocket, ReadLater, etc.).

</comment><comment><USER13> actual bookmarks are probably better.

<comment><AUTHOR> bookmarking every individual post?

<comment><USER14> Whether you are bookmarking or "saving for later" there is surely no way to avoid having to "Save" the individual articles.

<comment><AUTHOR> Down vote was regrettably someone slipping on the payment and blaming me.

A save would be good and would stay within the login of news.ycombinator.com</comment></comment></comment></comment>


Facebook Reportedly Wants to Tighten Its Grip on Your News - <AUTHOR> http://www.huffingtonpost.com/2015/03/24/facebook-hosts-news_n_6931532.html

<comment><USER2> Genuinely a bit scary</comment>


Complexity Explorables - <AUTHOR> http://complexity-explorables.org/ <comment><USER2> This looks like an interesting site. But rather than posting a home page, it would be better to find the most interesting thing or two on the site and post those instead. Then there's something meatier to discuss.

We've found that when people post lists, which a home page is a kind of, discussion tends to be about the lowest common denominator of the list items ([https://hn.algolia.com/?query=by:dang%20denominator&sort=byD...](https://hn.algolia.com/?query=by:dang%20denominator&sort=byDate&dateRange=all&type=comment&storyText=false&prefix=false&page=0)).</comment>


Video of a missile taking out the spy satellite. Welcome to the future. - <AUTHOR> http://www.breitbart.tv/html/50894.html

<comment><USER2> Very cool, but it didn't look anything like Star Trek. I want my tax dollars back.

<comment><AUTHOR> Probably looked better if you were closer to the explosion. But not too close.

</comment></comment><comment><USER3> Video of a missile taking out the spy satellite. Welcome to reddit.

Just kidding; it just seems popular on here to compare every story that isn't a 'Top Ten Ways to Use SEO to Get More Visits to Your SEO Tutorial Website' type of story with reddit.

<comment><AUTHOR> Feel free to start the discussion about the future of space exploration, the unspoken casualties of future astronauts from the increased space junk, the nature of government surveillance, etc.

:-D

</comment></comment><comment><USER4> It must have been a given that the debris would strike the ocean, regardless of which direction the impact came from.

</comment><comment><USER5> I added one of those missiles on my christmas gift list. I hope the price drops until the end of year.

</comment><comment><USER6> This clip continues the tradition on the Internet of posting videos of things exploding.

</comment><comment><USER7> looks like they learned how to use feedback loops</comment>


Police Body Cameras: What Good Is a Video You Can't See? - <AUTHOR> http://www.theatlantic.com/technology/archive/2015/04/what-good-is-a-video-you-cant-see/391421/?UTM_SOURCE=yahoo&single_page=true <comment><USER2> I was impressed by the way this article introduced the relevant issues without getting caught up in trying to give simple solutions.

Because body cams will capture footage of victims and associates and bystanders, as well as perpetrators and officers, there's an inherent tension between protecting the privacy of everyone in a video and allowing those in the video to see the captured footage of themselves. Every "simple" solution I can think of (including all of the ones described in the article), I can easily envision scenarios where that proposed solution would seem to be inappropriate.

I suspect the way we handle police body cam videos will be a point of contentious debate for another decade or more.

<comment><USER3> That doesn't make any sense to me. Video of bystanders? So what? Shouldn't we be outraged about other public cameras as well that the police use to catch criminals then? Don't people who film the police also film "bystanders"?

I think at the very least if the videos are kept secret until judicial review, then the police officers should be _forced_ to keep them on all the time during work hours. The videos should also be automatically uploaded somewhere where that police department can't control what happens to the videos.

<comment><USER4> This is important.

There was a case here a few years ago where someone accused the police of assaulting them when they went in to report something (misconduct by a police officer from my vague memory). The police station had cctv cameras, but when the court asked for the video, the 20mins around the time claimed by the victim was "missing due to technical difficulties" \- curiously the _only_ missing video in the preceding 18 months or any subsequent time.

If the police get to collect and only use the video when it suits them, I'd like to see "presumption of innocence" not apply (to police) when normally expected bodycam footage is missing.

<comment><USER5> I posted this link else where in the comments too:

[http://thefreethoughtproject.com/police-cadet-turns-cop- turn...](http://thefreethoughtproject.com/police-cadet-turns-cop-turning-body- cam-pummeling-victim/#Xf7oUQvQH1rdESvr.99)

</comment></comment></comment></comment><comment><USER6> Police body cameras dont, an wont matter as long as old corrupt judges LET GO murderers recorded killing people.

I mean what does it take to put a cop in prison when a video of him strangling someone to death is not enough?

<comment><USER7> Welcome to the world the public employee unions have created; where once your employed its damn near impossible to fire you, let alone get you charged with a crime.

A great article on how hard it is to fire a cop because of the rules police unions have managed to get into place. [http://reason.com/archives/2012/10/19/how-special-rights- for...](http://reason.com/archives/2012/10/19/how-special-rights-for-law- enforcement-m)

<comment><USER8> I agree that public servant unions generally have too much power. However, I'd like to hear more about your theory about how police unions have leverage over judges.

Firing someone is much different from not throwing out a court case against them. I can see how police unions have a lot of leverage over the executive branch, but I'm not sure how they extend that leverage over the judicial branch.

<comment><USER7> Well lets return to the Atlantic for an article on how.

[http://www.theatlantic.com/politics/archive/2014/12/how- poli...](http://www.theatlantic.com/politics/archive/2014/12/how-police- unions-keep-abusive-cops-on-the-street/383258/)

You have to be accused of a crime before a Judge gets involved. That was the whole point I was making. The unions do their best to keep the officer from ever being charged. Got to love the down votes on my previous post, ignorance is of the power of these unions are why we have the problems in the police we do today.

Even politicians run scared as some city unions have put up billboards next to homes of politicians who dare challenge them.

<comment><USER9> How does the union have any control over who gets charged? They don't other than through the fact that the union reps are also police officers and can exert influence over one another.

It would be far better if a completely independent quasi-citizen/law enforcement organization were required to review use of force by police, and empowered to charge them. Also, having local DA's prosecute cops looks to be a disaster, as well as having the normal grand jury in the loop. Maybe a second grand jury is needed, but made up of poor people instead.

Unions may be far from perfect but your arguments aren't convincing or even particularly relevant. Crying about the downvotes just makes me want to use mine. Maybe the downvotes are because your tone is too trollish.

</comment></comment></comment></comment></comment><comment><USER10> This illustrates exactly why having the gov't do something is a much different thing than when private citizens or groups do something, and why the gov't often ends up with a solution that "doesn't make sense".

I have to wonder if, in the end, what what we'll end up with is universal surveillance, not imposed by police, but imposed on ourselves. It will just be assumed that everyone and every building will be recording video all the time. At that point, it won't matter if police are recording or not.

</comment><comment><USER11> Is there good reason for the videos to be public record? Why not have our judicial system decide/review police video on a case-by-case basis, rather than having them be public records?

A defendant should be innocent until proven guilty -- and those videos apply just as well. Is the police video for or against you? The court should decide.

If the video is "missing", a outside authority should investigate and weight should be given to the possibility that evidence was tampered with by the police. The public should demand this just as we have body-cameras.

<comment><USER12> There's a real-world problem seeking a solution, video that is verifiably stored (in multiple places) and encrypted but accessible via the judiciary when a court order allows it. It's not that the pieces aren't there, but rather that someone would need to package it well and sell it to local governments.

<comment><USER13> I can say as a matter of fact that the body camera system being implemented by the LAPD works exactly as you suggest. This is one of the reasons why it's taking so long to implement. Many people don't realize how important it is for a system like this to be implemented properly the first time.

</comment></comment></comment><comment><USER14> A lot of police work takes place in public areas, where there is no expectation of privacy and anyone is able to take pictures and video.

There doesn't seem to be any reason not to make all footage from public areas generally available.

<comment><USER15> What if you were being raped in a park and policemen came to assist you.

Would you want that footage to be publicly available?

Likewise, would you want everyone who ever hated you to have access to that footage to use however they want? Once the cat's out of the bag...

Edit: Other fun situations:

1\. You're attacked by someone and can't run, but have enough experience/training to subdue them; the cops show up later and the video doesn't show you being attacked, so you look like the aggressor.

2\. You're attacked and can't defend yourself or fail to such an extent that people would look at the video and laugh at you.

3\. You're on video doing something incredibly out of the norm for you, whatever the reason.

4\. You're on video in a PLACE that you wish other people didn't know you frequented. A strip club, a gay bar, a church, a vegan grocery store, a pot dealer, etc.

5\. You're on video doing something that your friends/family would react negatively to. Let's say you're a doctor and someone has a heart attack at Political Rally Green. You're up front and on camera for everyone else to see, including your family, who are all diehard Red supporters.

<comment><USER16> All of those scenarios can happen with ubitiquos CCTV, and whether or not it is released is entirely up to the owner of the camera.

<comment><USER17> Ubiquitous CCTV would be a lot more unpopular if people looking to build general purpose people-tracking databases, create hit-lists of visitors to abortion clinics, gay bars or synagogues or make thrilling real-life-rape compilation videos found it easy to persuade owners of the footage to share it with them though.

CCTV would also be even more unpopular if it came with sound and instead of recording largely uninteresting ongoings in public spaces, it was used to record intrusions into other people's houses at particularly stressful times and record their stuttering non-answers to very intimate questions and accusations they're often ultimately proved to be entirely innocent of.

</comment></comment></comment></comment><comment><USER18> Nice, balanced article on an emotional topic.

I think most people would agree that the video should come into evidence if someone ends up dead. Also, most people would agree that videos should not all be released publicly. But there are a lot of difficult situations between those two extremes.

Even if the rules about releasing footage are quite restricted, I think body cameras will influence the behavior of police. Not always for the better necessarily, but I think they will reduce the number of fatal police shootings.

<comment><USER19> How do you envision body cameras making police behavior worse?

<comment><USER20> Fundamentally, they are people. Maybe even more importantly, crime doesn't just happen nonstop all the time everywhere. How many of us spend time at work not working? If every one of your smoke breaks, trips to hn, and other assorted breaks were recorded, I'm sure a damning case could be made against you the next time you're up for review. You don't think that would have political implications? I can't think of all the out comes that could have.

Likewise, I'll tell a personal story. I tend to drive fast. I've not had many tickets but I've had a few. Two really cool police gave me warnings a handful of years back instead of tickets; not just a warning but they reminded me of the car seat in the back, my family and suggested I slow down to be safer. It had a dramatic impact, I'd just get pissed off and pay a ticket but the warning, that they chose to give, stuck with me more and I've slowed down. Could that be done by a robot police officer that never takes breaks and follows the law literally and letter by letter? What if those cops had a record of giving certain races warnings but came down hard on other races?

im not against body cameras, especially in the current world of paramilitary style police, but it seems like there is a need for some human wisdom on a case by case basis here. Simple fixes could easily have some bad outcomes.

</comment></comment></comment><comment><USER21> This is a much better article: [http://www.salon.com/2015/04/24/we_must_disband_the_police_b...](http://www.salon.com/2015/04/24/we_must_disband_the_police_body_cameras_arent_enough_only_radical_change_will_stop_cops_who_kill/)

</comment><comment><USER5> And if officers can turn them off when ever without accountability then what's the point? We won't have accountability, we'll have accountability theater.

If this cadet (not an officer) hadn't (probably) thrown his career chances out the window, the officer involved would never have been held accountable and probably would continue to do it again in the future: [http://thefreethoughtproject.com/police-cadet-turns-cop- turn...](http://thefreethoughtproject.com/police-cadet-turns-cop-turning-body- cam-pummeling-victim/#Xf7oUQvQH1rdESvr.99)

And, as others mentioned, as long of departments just hand out paid vacations, prosecutors refuse to press charges, and judges let officers go, video cameras won't matter.

</comment><comment><USER22> If the victim/complainant/whatever was the one with the camera, you'd still get most if not more of the benefits of accountability. So how can we make that happen instead? Simple - have the police there in two distinct roles: 1) a cop; and 2) your own personal film crew. They'd film it and perhaps even hold it "in trust", but you'd own it. Such a system would empower citizens a lot and contribute almost nil to the scary mega-state.

We're currently experiencing a shift to authoritarianism by the backdoor with NSA and friends, and in such times cheap and effective solutions such as this, which achieve the stated goal and no more, should be championed I think.

</comment><comment><USER23> I only skimmed the article but the discussion on how police body cam footage is released should be had.

On the one hand, I would like the footage to be fully released but what about instances similar to people being swatted[0]? Surly there should be limits in place but can we really trust police to be ethical?

Hopefully more people comment but surely there will be more of these types of articles written in the future as body cams continue to roll out.

[0][https://www.youtube.com/results?search_query=swatted](https://www.youtube.com/results?search_query=swatted)

</comment><comment><USER24> this is what subpoenas are for. Let the court force them to provide it.

and if the camera "turns out" to be on the fritz, they can provide the IT support ticket, complete with dates and times entries were made.

<comment><USER4> My approach? If the cop's camera suspiciously turns out to be "on the fritz, your honor", all the cops evidence loses it's "magic cop assumption of reliability", and they fail to establish any "balance of probability" in a purely he-said/she-said situation. (even _with_ backdated IT support ticket claims - make it in the individual cop's interest to have working, reliable gear - penalise him personally/professionally if he "lets it slide", just like he and his colleagues penalise you if you let your licence or insurance renewal "slide".)

</comment></comment><comment><USER25> I think this made the HN front page the other week, but Seattle PD actually hosted a hackathon with the goal of getting good auto-redaction technology in place so that they could default-release body cam footage: [https://www.techdirt.com/articles/20141222/14345929507/seatt...](https://www.techdirt.com/articles/20141222/14345929507/seattle- pd-holds-hackathon-to-solve-body-cam-footage-redaction-problem.shtml)

</comment><comment><USER26> >"If you just put a swirl blur on somebody's face, it's not very difficult to unswirl that blur, and then all of a sudden it's un-redacted," Shaw said.

Then use a REAL BLUR.

</comment><comment><USER27> HN turning into Reddit one post at a time.

<comment><USER23> Straight from the HN Guidelines: "If your account is less than a year old, please don't submit comments saying that HN is turning into Reddit. It's a common semi-noob illusion, as old as the hills."

A lot of the posts here end up on Reddit and vice versa. Big part of this I suspect is due to the fact that most people here use both sites pretty regularly, I surely do.</comment></comment>


Ask HN: How do you backup/restore/repair your windows machine? - <AUTHOR> As I'm now self employed rather than relying on the enterprise I feel the need to have a decent backup and recovery strategy for my business machines. I'm aware that Mac's probably have this covered and I can't see this being an issue with Linux ( can easily start from usb drive or cd etc ) but I'm a bit more confused from a home windows user perspective.
Most machines I've bought don't have a Windows disk, everything is pre-installed. I can't create  a recovery disk as I don't have a cd/dvd burner and therefore I can't load from the disk I don't have ;-) Assuming I can at least get to the bios menu I suppose there is a recovery option and I can repair using a disk image which I can store on an external hard drive or usb. Am I thinking along the correct lines.
Obviously data will be stored on external locations and probably cloud as well. <comment><USER2> You need to plan for losing your main partition and any other partition on the same device, i.e. you cannot rely on recovery partitions.

I suggest a combination of booting suitable disk imaging tools from a USB pen drive (both for creation and restoration of your disk images) and storing disk images on a large external USB drive or on a network server, so that the former is small, disposable and practically read-only and the latter doesn't need to be bootable.

</comment><comment><USER3> Most machines with Windows pre-installed also come with a separate Microsoft Reserved Partition and/or a recovery partition.

Of course I always keep a printed copy of the register, just in case!!!

<comment><AUTHOR> I've forgotten about the reserved partition and you've reminded me of when this was last a problem for me. I had a multi-boot set up with GRUB and managed to make the reserved partition unusable somehow and never managed to recover it. This meant I could work with Linux but not recover Windows</comment></comment>


Vote all you want. The secret government won't change - <AUTHOR> http://www.bostonglobe.com/ideas/2014/10/18/vote-all-you-want-the-secret-government-won-change/jVSkXrENQlu8vNcBfMn9sL/story.html <comment><USER2> "As I was saying, she stumbled upon a solution whereby nearly ninety-nine percent of the test subjects accepted the program provided they were given a choice - even if they were only aware of it at a near-unconscious level." \-- The Architect</comment>