Uncle Bob on DHH: Monogamous TDD - <AUTHOR> http://blog.8thlight.com/uncle-bob/2014/04/25/MonogamousTDD.html? <comment><USER2> Uncle Bob, dazed, comes out swinging. Struggles to land punches, but DHH definitely has Bob's attention.

There are cost/bene's for unit tests. There are cost/bene's for integration, etc. etc. etc.

Cargo cult behavior and adherence gets you to where DHH makes his statements. Inexperience with Uncle Bobology leaves you unable to cogently decide upon structuring effective, manageable tests.

Clients' and consumer unwillingness to pay up for tests that increase LoC by factors of 2+ mean devs need to be effective at balancing the ship cadence and the overhead of tending the test base.

You can't blindly accrue meaningless or value-little tests. You can't always just refactor code written to be ultimately testable.

Uncle Bob seems to pretty much only talk about tests. DHH made a larger argument about the practicality without merely expressing simple boredom or uninsightful consideration of the value of testing.

UBob doesn't even tread into the crux of the matter, which is that code style and system architecture bent to the needs of testing becomes a ball of mud (though "testable") faster than code written without this consideration.

<comment><USER3> "UBob doesn't even tread into the crux of the matter, which is that code style and system architecture bent to the needs of testing becomes a ball of mud (though "testable") faster than code written without this consideration."

Exactly that

Which makes me question Uncle Bobisms, because it reeks of lack of _practical_ experience. DHH shipped a framework that's used by several people, providing value.

The best measure of software is _value to the user_. However, some people think software is meant to have the nicest structures, the greatest coverage, etc. Which are nice things to have _but they come after_ (in matters of importance, not in time) shipping a software that solves the user problem.

<comment><USER4> I think that there are lots of ways you can criticize Uncle Bob, this article, his works etc. But saying he is inexperienced is a pretty big stretch.

<comment><USER3> Not so much him, but the ones who repeat what he says as gospel.

<comment><USER4> You are also trying to associate TDD with religion in an attempt to make it seem bad. This is one of the criticisms in the posting and it seems sort of fair.

<comment><USER3> And then he ends with the phrase " If you aren't doing TDD, or something as effective as TDD, then you should feel bad."

NO

People should feel bad for wrong things, not by not following some methodology.

This is what cults and religions do, they make you feel bad for not following what they preach.

So yeah, if you don't want to be associated with a cult, don't act like one.

<comment><USER5> You need to read that statement a bit closer.

" If you aren't doing <a method to verify quality day-to-day work>, or something as effective as <a method to verify quality day-to-day work>, then you should feel bad."

The point is that if you're not doing TDD, you should be doing something that's as effective (or more) as TDD. Otherwise you're just doing shitty work.

IOW, you can disagree with Bob about TDD being the most effective way to verify quality, but you still need to verify quality.

I'm not sure about you, but I think people that do shitty work should feel bad. That's not cultish, that's just basic professionalism.

<comment><USER3> People have been verifying software since software was created.

Manual verification is indeed more complicated, slow and prone to failure but it's not worthless as the TDD people paint it, not TDD is the holy grail (it has _a lot_ of deficiencies that seem to be ignored by the TDD people)

Also, UBob is lashing other testing DHH proposes in the text, but guess what, it's meant to test what TDD doesn't reach.

You can have 100% coverage of your tests with TDD and still have a bug.

<comment><USER5> "Manual verification is indeed more complicated, slow and prone to failure but it's not worthless"

Manual vs. automated is a whole other discussion, rather separate from TDD.

Manual test scripts are not worthless, but are certainly an indication your project is either (a) very small scale or simple or (b) going to take a very long time to complete and be prone to regressions.

TDD is about the benefits derived _when_ you write your test case before your code, and also the design implications of doing so.

"You can have 100% coverage of your tests with TDD and still have a bug."

Obviously. But the probability of your codebase having defects goes down drastically with higher code coverage.

You could take the new radical approach of "don't test, just ship", but that requires a very specific organizational culture and risk profile.

</comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER6> The first half-dozen of those paragraphs were just him saying words, none of them really had anything to do with the subject at hand. Kind of like a very poor attempt at strawman arguments. "DHH accused us of being violent extremists burninating the countryside! I have not heard of any of that happening so it must be him using pejoratives."

<comment><USER7> I'm not quite sure what the name of the fallacy is, but I've seen this "technique" used often before. Make a lot of noise about the specific word or words being used, rather than arguing a valid counter-argument yourself.

If the author had left out the first 8 or so paragraphs, this might have been worth reading and sharing. As it stands? I don't see why it's nearing the top of the front page.

<comment><USER8> You don't know the name, because he's not using a logical fallacy. He's addressing DHH's rhetorical device of loaded words. ([http://en.wikipedia.org/wiki/Loaded_language](http://en.wikipedia.org/wiki/Loaded_language))

<comment><USER9> See also the pleasingly named Weasel Words.

[http://en.wikipedia.org/wiki/Weasel_word](http://en.wikipedia.org/wiki/Weasel_word)

</comment></comment></comment></comment><comment><USER10> It's funny to see Uncle Bob take offense at being called a fundamentalist and then follow with this gem:

> If you aren't doing TDD, or something as effective as TDD, then you should > feel bad.

"Fundamentalist" is hyperbole, which is par for the course in blog posts that want to attract traffic, but the sentiment is real, and Uncle Bob perfectly demonstrates that the qualification is justified. Like most extreme advocates, he's trying to get us to believe in something based on faith instead of facts.

"If you don't do it, you should feel bad".

Last time I heard that was in a church.

<comment><USER11> Yes, I caught that too. Bob definitely comes off as very insulted, and the post is largely emotion rather than facts.

Personally I am so tired of hearing lines approximating Bob's statement (if you don't do x you should feel bad) that I can no longer consider anyone whom utters them credible. It is provably false (Linus has no reason to feel bad), and a disservice to the entire programming community.

There is no silver bullet, stop acting like there is. Different things work for different people.

That said, while I agree that DHH came off pretty extreme (I don't think TDD is bad, just the overzealous proponents), I am glad that he did. It is really nice to have another very public figure speaking with equal passion and in utterly concrete terms to present to people whom are struggling with some degree of impostor syndrome over their dislike of TDD.

</comment></comment><comment> bulte-rs > If you have a test suite that you trust so much that you are willing to > deploy the system based solely on those tests passing; and if that test > suite can be executed in seconds, or minutes, then you can quickly and > easily clean the code without fear.

My spider sense always starts tingling when someone says something like this. Blind trust in an automated test-suite is a nice thing to strive for. But even for projects in which I have every confidence that the test suite is complete enough to actually trust it I'm still hestitant to "insta-deploy-on-pass".

Call me cautious, call me chicken, whatever... I'll not drink this flavour of kool-aid

<comment><USER12> I think it's dangerous to rely solely on a _unit_ test suite to guarantee the correctness of your program. Each unit-tested component may pass its own tests, but that doesn't guarantee that by interacting with other (present and future) components it won't exhibit any bug. I guess immutability would go a long way forward in realizing this guarantee, but I've never had the pleasure of working on a software where each component was truly immutable and independent of each other.

<comment><USER13> Very true. Here's an example of a bug that has bitten me more than once, has everything to do with immutability, and isn't reasonably within the scope of traditional testing tools:

A crucial class writes files to a certain folder. The test sandbox provides such a folder, and the class knows to use that folder when it's running in test mode. Obviously, the production environment is also supposed to provide that folder. But oops, it doesn't!

The tests exercised writing a file to disk, the tests were all green, and the system crashed anyway.

</comment></comment></comment><comment><USER14> There's something I really don't understand about all this uproar. TDD is build test first, write software later.

So people against TDD aren't against test units. They are against testing FIRST, writing software LATER.

We all agree that testing is part of the solution, how and when are the subjects of discussion.

<comment><USER15> While this is true, DHH in his article largely dismissed not merely testing first, but unit tests altogether, explaining that he prefers to focused on system tests. This set the tone to many subsequent reactions.

But there's no reason to tie TDD and unit testing together. Many people who dislike TDD swear by unit tests and most of their testing code is unit tests. They merely prefer to think of TDD as a much too extreme form of unit testing that turns out to harm more than it helps.

From that point of view (which I share), DHH's rant is puzzling. It's like that meme with Michael Phelps' mom. He's against TDD! Yay! Down with unit- testing! Wait, what?

"Less emphasis on unit tests, because we're no longer doing test-first as a design practice, and more emphasis on, yes, slow, system tests." Huh? How does that follow? How about, let's not do test-first as a design practice, and _still_ retain emphasis on unit tests? Because they catch plenty of bugs, because they exercise more functionality than system tests will, because in dynamic languages they protect you from silly type errors, because they make refactoring merely unpleasant instead of a horror show...

<comment><USER16> This may be a confusion due to overloaded words. In rails you often write tests against a real instance of a database using fixtures to load data, and roll back the state after the test.

Many TDD type people will shout at you "those aren't unit tests, you must write an abstraction layer that allows you to separate your model from the database". DHH is conceding to their definition of the word. He's advocating tests of the units of logic in your model, but not isolating it from a database with an abstraction layer. Therefore, not unit tests.

</comment></comment></comment><comment><USER17> This post makes me somewhat sad, I think testing is one of the least understood and most important part of being a professional software developer, but through university and still to today its easy to find people dismissing it as unnecessary effort and I think a part of that is down to 'advocates' who turn everything into an argument of semantics.

I posted after dhh's post "I think we should just stop calling them "unit" "integration" or "system" and just call them "tests", there isnt a useful distinction"

This post has almost 0 content and vaguelly handwaves about testing being good in between 90% of seemingly willfully misunderstanding what dhh said.

<comment><USER18> Testing is just another tool, and should be used when appropriate. I don't have a lot of automated tests for my application, but it is an in house app, so I get immediate feedback from users if something isn't working. I do have a set of tests for certain parts where it seemed to be appropriate and saved me a lot of time when refactoring.

I was keen to put in a lot of automated tests a couple of years back, but it was proving extremely time consuming to generate fixtures that made the tests meaningful (and management decided there were more urgent tasks). Looking back on it, it would have caught a few bugs, BUT not that many considering the effort generating all the fixtures and tests would have taken.

<comment><USER17> I agree that its a tool to be used when appropriately, I wasnt going to follow up talking about how advocates are often too adherent to dogma with 'everything ever should be tested'

But I still think comparative to how essential it is to a huge amount of projects, the lack of understanding and maturity of the tools is lacking, on all projects I work on, tests and test infrastructure is the major bottleneck.

</comment></comment></comment><comment><USER19> I was surprised at DHH's love for capybara. I've always thought the capybara tests as the most cumbersome, unreliable and generally superfluous tests in our suites. They are at best slow and hard to maintain.

Together with our move from big backend rails apps to big client side apps I think we should also be moving our integration tests to the client side.

There's some great testing runners in javascript, you almost don't notice it's not rspec, and I think it could be much more intuitive then the in my opinion awkward Capybara.

No bad feelings towards the Capybara people by the way, it's great software that ostensibly has taken a lot of effort to develop. I just hope we can move to a different solution.

<comment><USER20> At PetroFeed (the app I'm building) we started out with a Capybara test suite to exercise our client side code. I've found Capybara tests were hard to write, difficult to debug, and brittle; often flapping on our CI server (or worse locally). We began to deprecate them in favour of js tests. The results have been fantastic.

</comment></comment><comment><USER21> This is not an all-or-nothing proposition. Unit tests have their place in protecting against regression and validating known invariants. Granted, by not starting with a test for every bit of functionality, it's not really TDD, but why can't we balance practicality with perfectionism?

I think that DHH was implying that blindly following the TDD methodology may lead to worse code that's riddled with architecture simply for the sake of testing.

I feel that using TDD for one or more subsystems may make sense. For the entirety of a large-scale application under tight shipping constraints? I haven't seen it work - but that's not to say that it doesn't.

What's important is that we test our code. If you need some strict guidelines to keep you in check, then perhaps TDD is perfect. If you know that your can get significant coverage from integration testing, then it's probably sufficient. If you find a bug, and put a unit test in place to make sure it never happens again - then you're likely on the right track.

</comment><comment><USER22> So DHH is in favour of integration tests and distrusts mocking.

Google is in favour of integration tests and distrusts mocking. [http://googletesting.blogspot.se/2013/05/testing-on- toilet-d...](http://googletesting.blogspot.se/2013/05/testing-on-toilet-dont- overuse-mocks.html)

What's to be said for TDD and mocking?

<comment><USER4> I think you are making a false dichotomy. I am very, very pro TDD and very, very against mocking.

The problem is that certain architectures are very hard to test without resorting to either mocking or integration tests. In those cases you have to weigh which is better, writing painful integration tests (or not having test coverage at all) or changing the architecture, or in certain exceedingly rare cases mocking.

<comment><USER22> Possibly, but I also think I am accurately summing up DHH's article [http://david.heinemeierhansson.com/2014/tdd-is-dead-long- liv...](http://david.heinemeierhansson.com/2014/tdd-is-dead-long-live- testing.html) and UncleBobMartin's reply where both talk about TDD mocked tests passing in seconds.

<comment><USER4> I guess mocking or not mocking was not my take from either of their articles. I thought they were both about test scope. Mocking is one way of limiting test scope but there are others.

I'm ok with different readings of the articles as long as TDD doesn't start automatically being associated with mocking.

<comment><USER22> You'll have an uphill struggle if you want to stop TDD being mocked ;)

<comment><USER4> Well played.

</comment></comment></comment></comment></comment></comment><comment><USER5> After these essays and the scuttle on Twitter, to me this whole debate is not about TDD per se, it's about how far you take "architect for testing".

Purists like to create a pure in-memory application or domain model with no framework or external system dependencies, with adapter layers to isolate such dependencies. Some call this a "hexagonal" architecture, after an essay written by Alistair Cockburn, where your core code exposes ports to the various external hooks, whether a GUI, REST API, database, notification system, etc, and your TDD drives against these ports.

The benefit is that your core unit tests run very fast and allow you to move very quickly with the core code, and to refactor things quickly. The drawback is that your end-to-end integration and acceptance tests tend to be brittle since they often wind up being deferred to late in your iteration or release.

DHH on the other hand built a pretty popular set of patterns and frameworks (ActiveRecord and Rails), and really doesn't see any value with a codebase isolating itself from those things. Layers of indirection defeat the productivity benefits of these patterns and frameworks, and also give a false sense of comfort with the quality of end-to-end integration.

For example, to some, unit testing with a database in the mix is a no-no. To others, it's fine if you can make it fast and predictable (eg. Swapping in an In memory SQL store with test data). Another example is TDD from the UI through Selenium, Watir or Capybara.

Uncle Bob is saying actually he's fine with such dependencies if you can meet the speed and reliability targets of a pure model. And if you can deal with the coupling you've introduced.

To me, TDD is about whether you write your tests before your code, and that each test is isolated from other test contexts. As long as you setup and tear down your context quickly and reliably, you can include whatever dependencies that make sense as part of your daily development activities. Your level of coupling to a framework is a tradeoff of productivity today vs future proofing.

The clear "wrong way" practiced by some inexperienced TDDers is to not design a hexagonal architecture at all (ie. don't build clear APIs and SPIs and test outside in!) and to mock every external dependency, testing from the inside of your application out. This bakes implementation details into your test cases and makes everything brittle.

</comment><comment><USER23> There is too much conflict of interest here. TDD is a software trainers' bread. It doesn't age and it is better to learn with someone experienced.

I would be more interested to hear what is his opinion about design-by- contract and strict functional languages such as Haskell and OCAML.

His constant reiteration that TDD is the only way is a bit tiring now.

<comment><USER8> You should listen to his Clojure talks. Apparently he's moved the bulk of his development to Clojure.

<comment><USER23> Clojure is dynamic. Dynamic typing generally requires even more unit testing. As far as I understand strict static languages such as Haskell can eliminate the need for certain classes of unit tests.

</comment></comment></comment><comment><USER24> "I have yet to see any test-driven developers flying airplanes into buildings..."

When a blog begins like this...

</comment><comment><USER25> Great music comes from great musicians, not a mediocre musician following some kind of magical methodology. Great birdhouses are build by great woodworkers, not crappy woodworkers using a fancy $1000 drill. Great software is created by being written by great software developers.

If you're good enough to write a test suite that is so well done that all test pass means with 100% certainty that your project is 100% bug free, then you're probably an experienced enough developer to write that project without any tests and still have it work well.

I think TDD works best as a lesson.. If I were a college professor, I'd have my students write a class project where they had to do TDD. It teaches the students to only write code if there is a reason for writing it. Just like once you learn how to ride a bike you take off the training wheels, once you learn how to write software, you can leave behind TDD.

<comment><USER26> Woodworkers don't maintain a birdhouse with millions of moving parts for thirty years. Orchestras do not swap out musicians in the middle of the movement of a song.

Good unit tests (I don't particularly care about TDD itself) also serve as awareness, organization, and communication tools.

</comment></comment><comment><USER27> I'm trying to understand, or "get on board" the TDD (or even just hardcore testing, TDD or not) bandwagon, but my brain is resisting.

It seems logical to me that one difference between a fully testable implementation and one that is not, is that the non-fully-testable one would (or could) have larger blocks of code, where logically relevant portions are physically together, whereas, the fully-testable one would have to break up these larger chunks into smaller methods such that each piece can be individually tested, so in the event of refactoring, your tests can tell you not only that there is a problem, but precisely where that problem is.

Can someone comment on whether this is true or not?

And if this is true, would there not be at least some costs (support & "readability", at least) associated with that?

<comment><USER28> I would half agree. A fully testable implementation being broken up into blocks that are testable is pretty much a truism. In order to construct software that is testable it must be done in a particular way. So the granularity of testing forces the size of testable modules of a system.

However, it's not about logically relevant or longer blocks of code. It is more about coupling. In untestable code the coupling is usually high, one cannot modify one part of the system without affecting another. I believe that this is why programming to an interface rather than an implementation is a very important concept.

So let's imagine a look at the "extreme" end of the spectrum of TDD with unit tests where they practice ping pong pair programming (programmers trade off writing tests and passing them) the code will likely look different. The "testable unit" is now not only the size of a unit test (constrained to a single class in OOP languages), but the ping pong aspect ensures that these code would be added in a time limit between tests (just try hogging the keyboard for half a day!). This doesn't mean that methods won't become long, it just means that the human constraints around the problem will force it to become a certain size.

There are some costs, but usually smaller classes are far easier to understand and maintain. After making a codebase testable you'll usually find that the code goes from procedural to object oriented.

</comment></comment><comment><USER29> DHH criticises "good tests" and "being testable" as meaningless goals; he characterises TDD practitioners as being fixated on testing _qua_ testing, completely focused on testability and associated metrics (coverage, ratio, speed) in their own right, as if they blindly believe those things to have intrinsic value.

That's inaccurate and unfair. Testability is useful precisely because it's an effective, tangible proxy for other properties of software that are harder to anticipate or recognise: things like modularity, composability, reusability and so on.

Tests are useful on many levels, but at their most basic they provide a second client for your implementation, encouraging you to think harder about what each part of your software is doing and how it's doing it. They give you an opportunity to step outside of your immediate goal and look at your software in a different way, from a different angle, with a different set of priorities. This gives you more visibility on the decisions you're making, and that's almost always worthwhile.

If it's a nightmare to isolate a piece of your implementation in order to test it, what does that tell you? Directly: it's not very "testable". Indirectly: your design is perhaps a bit tangled up, and you probably could work harder to separate concerns and isolate dependencies and think carefully about how the pieces interact and what they individually mean, and it might be difficult to compose those pieces in different ways later. Would you have noticed those problems anyway? Probably, but going through the exercise of writing tests is one way of increasing the chances of noticing them sooner, while you still have a chance to do something about them before they become too baked-in.

In my experience TDD _can_ lead to better designs, because it provides a simple, learnable, repeatable discipline that makes it more likely that you'll notice design problems sooner. (There are other design benefits too, but I'm trying to focus on the least contentious one.)

Some programmers may be proficient enough at spotting these problems early that they don't get any benefit from "testability", and some may exert enough control over their software's user-facing behaviour that they are able to dodge complexity at the requirements level, but for the rest of us it's a useful litmus test for avoiding messy, knotted code. Being testable doesn't make an architecture good, but good architectures tend to be easier to test.

I haven't seen any sensible person say that TDD is a wholesale replacement for thinking about the design of your software, so it's misleading to argue against that idea as if it's representative.

(cross-posted from [http://lists.lrug.org/pipermail/chat- lrug.org/2014-April/010...](http://lists.lrug.org/pipermail/chat- lrug.org/2014-April/010036.html))

<comment><USER30> _That's inaccurate and unfair. Testability is useful precisely because it's an effective, tangible proxy for other properties of software that are harder to anticipate or recognise: things like modularity, composability, reusability and so on._

The whole point of DHH is that the correlation between testability and other desirable qualities is not always positive, you have to make tradeoffs. Taking testability to the extreme you can end up with a ton of anemic classes with hardly any correspondence between the class breakdown, method signatures and so forth and the actual domain, which for me personally is the number one goal right after satisfying customer requirements.

<comment><USER29> I agree, but you're projecting; DHH hasn't said anything that nuanced.

He doesn't explicitly touch on "other desirable qualities" of designs (other than the meretricious goal of "clarity"), nor how they relate to testability. He just makes fun of testability without exploring what it means, how it can imply those qualities, and how to decide which tradeoffs to make.

That's a shame, considering how many people pay attention to what he says. He has the opportunity to promote a more thoughtful and consistent approach to building software, but doesn't seem interested in exploiting it.

<comment><USER30> Might be it's not in the blog post, but he gave a keynote at RailsConf about this and that's pretty much what he said:

[http://www.justin.tv/confreaks/b/522089408](http://www.justin.tv/confreaks/b/522089408) [http://www.justin.tv/confreaks/b/522101045](http://www.justin.tv/confreaks/b/522101045)

<comment><USER29> We just disagree, then.

To pick a tiny, arbitrary example from the keynote, he criticises this method[0]…

      def age(now = Date.today)
        now.year - birthday.year
      end

…as opposed to his preferred version…

      def age
        Date.today.year - birthday.year
      end

"Is [the method with the parameter] better? Is it simpler? Is it clearer?" He makes fun of it as though the second version is obviously simpler and clearer, presumably because it uses fewer characters/parameters/concepts, but in reality it's not obvious. It depends what you want!

The first version makes it "clearer" that the method's result is date- dependent, which makes it "simpler" to understand how it will behave as part of a larger system (e.g. is it cacheable?); this is a win for composability. If you want to call it from inside another method, you'll need to get a date from somewhere — maybe you'll already have the appropriate date to hand, or maybe you'll choose to pass that responsibility onto your caller in turn, or maybe you'll decide that this is the right place to reach for Date.today. Either way, you get a chance to think about it, and to be aware of how another part of the software is going to behave without needing to go and look at its source code. (This argument is essentially "referential transparency is good".)

Now, it's entirely plausible that you don't care about that benefit, and you'd rather have a shorter method that works in the easiest possible way without regard for referential transparency, because your system is small, or this method is hardly called anywhere, or everything else in the application is time-dependent anyway so you don't need to be reminded of it. That's fine too! But DHH doesn't go into any detail on the tradeoff; he just makes fun of the version that takes an argument, because it's testable _for the sake of it_ , and why would anyone bother with that?

He doesn't seem interested in exploring the situation, or in interrogating what testability implies in this case, only in laying out his prejudices as if they're indisputable common sense. They're not.

[0] Since this is just example code, it'd be churlish to point out that it's not the right way to calculate someone's age in the first place.

<comment><USER31> First method works just fine if I want to calculate what was his age last year, and what will be his age at the year of 2021. The second method doesn't, so these are not even functionally equivalent.

</comment></comment></comment></comment></comment></comment><comment><USER32> > To my knowledge no one seriously teaches abstinence only sex education.

If only this were true!

<comment><USER26> Bob clearly addresses this argument. Did you have something more substantive to add?

EDIT: I'm not trolling. Bob said that serious people do not advocate that nobody have sex. They advocate sex but within a monogamous relationship. I think it's a good point that deserves more than a "Nope!" in response.

</comment></comment><comment><USER33> It's a shame that the first half of this article detracts so much from what is otherwise an interesting and well argued point in the second half of the article.

I have mixed feelings about Robert Martin. On the one hand I admire him a lot for coining the SOLID principles. And I think he is probably right about many things. On the other hand, I also think he goes overboard sometimes (especially when it comes to the S in SOLID: The Single Responsibility Principle), and I don't think it's wrong to call him a fundamentalist.

One thing I really admire about DHH, is his "show me the code"-attitude. For all the people who criticise Rails for not following the "correct" architecture principles, I have yet to see someone put their money where their mouth is at, and show us a what correctly architected web framework looks like.

It's probably not entirely fair, but Robert Martin makes me think of the adage: "Those who can, do. Those who can't, teach".

<comment><USER34> That's definitely not fair as, at a minimum, it is disparaging to the profession of teaching which is a skill and art unto itself.

</comment></comment><comment><USER35> Ignoring all the drama, the best arguments I've seen for TDD come from the book, "The Practice of Programming" by Kernighan and Pike. The entirety of Chapter 6 is dedicated to testing, and is the least dogmatic and most useful guide to developing tests for programs I have ever seen.

I think this is what happens when the authors actually come from a place where they have prior experience developing complex and novel systems. By novel, I don't mean writing another web app framework, just in a new cool language. I mean doing something that didn't exist prior to you doing it.

This is why there is so much one can gain from looking at the writings of people who made their living off actually developing complex systems, there is a wisdom that comes from experience, and an authority that comes from actually doing that you cannot replicate no matter how many clever blogposts or books you write.

</comment><comment><USER36> This whole TDD discussion reminds me of the "Safety Third" episode of Dirty Jobs.

Testing is definitely and activity that needs to be kept in mind (i.e. "Safety Third" or near the end, Rowe mentions that it's more like Safety Always). It shouldn't be overdone to the point that you cannot get your objective done.

In reality, there are lots of projects with insufficient automated testing. Preaching about the TDD might sound great until you find out that putting the test there would easily mean nothing gets done. Everyone would love to be able to stop all work and put tests in, but that just ain't gonna happen.

Also the preachiness gets to people - it isn't like people don't know they should write tests; it's just they also have to balance other objectives.

This lead me to think that Uncle Bob kinda misses DHH's point.

</comment><comment><USER37> Is it really necessary for Uncle Bob or DHH to resort to such theatrics when making an argument about software engineering practice?

I think this is an interesting topic and have some insights to share, but the dialog is so immature and ridiculous that I do not really want to participate in it.

Note to all readers: TDD is not something you are obligated to become strongly opinionated about. Generalization: As a software developer you are not obligated to be strongly opinionated or snarky/hyperbolic about anything in order to be credible.

In my case, I use TDD for certain classes of problems b/c it saves me time and results in a faster, more accurate development cycle.

<comment><USER22> Did you find DHH's piece 'theatrical'? Although it led with a one-line joke, I thought it was a solid article sharing experience.

</comment></comment><comment><USER38> I just recently began practicing TDD... my only problem so far: >1\. We spend less time debugging.

I often spend more time debugging. I mainly work with C#, and in Visual Studio (2012) when I try to debug unit tests, it fails at the Assert when the call in the Assert throws an exception... It won't tell me where the exception was thrown in the actual code. Is there a simple way around this that I'm missing?

Edit: It seems to be working now, not sure why it was not doing what I expected before.

<comment><USER27> Maybe relevant?

[http://stackoverflow.com/questions/5152265/what-can-lead- thr...](http://stackoverflow.com/questions/5152265/what-can-lead-throw-to- reset-a-callstack-im-using-throw-not-throw-ex)

<comment><USER38> I'm not throwing an exception though, I'm talking about like a simple nullreferenceexception in the code, or something similar.

Edit: I got it.

</comment></comment></comment><comment><USER39> The irony is Bob opens with "you have to wonder if the rest of the post can recover its credibility, or whether it will continue as an unreasoned rant." but then follows with exactly the same tactic "but since 911 has taken on the connotation of violent extremism. I have yet to see any test-driven developers flying airplanes into buildings while repeatedly hollering: "Kent Beck is great!", so I must entirely reject the connotation."

</comment><comment><USER40> "To my knowledge no one seriously teaches abstinence only sex education."

Yeah. Right...

[http://www.policymic.com/articles/86149/the-creepy-way- fathe...](http://www.policymic.com/articles/86149/the-creepy-way-fathers- across-the-country-are-controlling-their-daughters-virginity) be

</comment><comment><USER41> Don't like UBob or DHH. Tepid response to a tepid article.

</comment><comment><USER42> What if I decide to write my Capybara tests first? <troll />

</comment><comment><USER43> DHH is a really good programmer and he can probably get away with things many others could not

</comment><comment><USER44> This is just begging to be FJM-ed. If only Ken Tremendous knew anything about TDD...

</comment><comment><USER45> Uncle Bob was interesting 10 years ago. But the world moved on from what he's selling. Some people bought his product, other's didn't. The truth is gray and we need to decide for ourselves which rules to follow and which rules to sometimes break.

Can we please not upvote this any more? Let's keep this sort of thing as an interesting footnote to programmer history, like Joel is now.

<comment><USER46> So what you're saying is that best development practices somehow grow old and die? I'd love to hear what the alternatives are if you think what Uncle Bob and Joel preach is obsolete.

<comment><USER5> Much of what Joel preached is pretty opposed to Uncle Bob.

I would put Joel's opinions and advice as "somewhat interesting" on a scale where Bob Martin's advice on Agile, OOP, and testing "defined a generation of developers".

<comment><USER22> Whilst the nursery generation may have been defined by Bob, and needs GC, the perm gen like Joel ;)

<comment><USER47> ...huh?

<comment><USER22> Generational Garbage Collection.</comment></comment></comment></comment></comment></comment>


Confessions of a Disney World castmember - <AUTHOR> http://www.boingboing.net/2011/01/12/confessions-of-a-dis.html <comment><USER2> lol was mostly funny, but the end was a bit of a letdown.

I can imagine that it takes a special type of person to exist within that Disney ecosystem.</comment>


Ask HN: Launching a US startup in China - <AUTHOR> Any insights and recommendations from those that have been down this path?<p>What about Chinese accelerators [1, 2]? Would this be useful guidance to better understand the relevant market(s) and tech culture?<p>[1] https://blog.ycombinator.com/yc-china-qi-lu/<p>[2] https://www.reuters.com/article/us-usa-trade-china-startups/in-silicon-valley-chinese-accelerators-aim-to-bring-startups-home-idUSKCN1II0UG <comment><USER2> You could be more specific about the nature of your product. The wording is confusing.

If you want to build a China-only consumer product from scratch this is likely impossible as a foreign entity. Some specific industries will be laxer. But most pop consumer Internet is off-limits [0].

If you're introducing a somewhat established product and just want to broaden your customer base, then there are ways. But again super tough. Like the article you linked mentioned, many Chinese join venture schemes are just conduits for IP theft.

Generally my best guidance is to be very careful about risking any money in China. (lost quite a bit myself)

There's no publicly available information as to how YC China is structured legally. But they mentioned it's going to be China-first, investing on Chinese terms in Chinese companies. So likely the accelerator operation is going to be like any other in China. The creative part is how YC can maintain ownership over this structure.

[0] And despite what some will try to tell you, as an individual you also cannot own or hold stock in plain a domestic company. And all the crazy workarounds only start making sense once you're already very successful and are still super shady.

</comment><comment><AUTHOR> Also interested in the same info on Japan, thanks!</comment>


Show HN: Transfer data over sound - <AUTHOR> https://github.com/rraval/pied-piper

<comment><USER2> Cool! It sounds a lot cuter than I expected it to.

There's gotta be some amazing application for this...</comment>


Show HN: Relaunching my algorithmic stock picking website - <AUTHOR> https://portfolio.construction/blog/2019/01/relaunching <comment><AUTHOR> Any feedback welcome! And if you have questions happy to answer and it will help guide me towards what blog posts to focus on next :)</comment>


Mixed-use developments may actually reduce housing affordability - <AUTHOR> https://phys.org/news/2018-02-mixed-use-housing-social-diversity.html <comment><USER2> > "Making mixed-use neighbourhoods was done with the best of intentions for > our health, happiness and the environment, but as communities become more > attractive places to live, demand to live there increases costs," said > Markus Moos, a professor at Waterloo's School of Planning. "Walking to a > nearby fancy coffee shop is nice, but the premium people pay for that luxury > means the barista can't afford to live near their job.

Feels like clickbait and a statement of the obvious - of course well thought out and walkable developments will attract a premium when compared to less walkable and useful developments. If we want people to not be priced out, we need to build enough to meet the demand and redevelop existing stock to match the current trends.

And you know what, we'll still be rebuilding neighborhoods to match the then current trends 100 years from now. That's the entire point - if the city doesn't adapt to what people need/want overtime, areas that reflect those preferences will become unaffordable, whereas areas that do not reflect those preferences will decrease in value.

<comment><USER3> Or everything will increase in value because of less supply than demand.

</comment></comment><comment><USER4> Isn't this exactly what you would expect from something pleasant and rare? If you just want to make an area more affordable, you should make it less pleasant.

The answer is to do this more, until it's not special, and during the process subsidize. In fact, if mixed-use areas are inherently more livable, build more public housing projects around a mixed-use format.

> The study of Toronto neighbourhoods found that the increased cost, which was > _further heightened by the retraction of government support for affordable > housing in mixed-use areas_ [...]

<comment><USER5> This makes sense to me. The luxury apartments of yesterday became the affordable apartments of today.

If we want more affordable living spaces, we need to build build build.

<comment><USER6> _The luxury apartments of yesterday became the affordable apartments of today._

Most affordable housing activists either don't understand or outright disbelieve that such filtering is possible. They're also somewhat impatient, so they want to see brand new yet affordable housing get built.

Unfortunately, because urban housing was uncool for decades virtually all urban housing tends to be either very old and run-down, recently remodeled and expensive, or recently built and expensive. There are no decent-yet-affordable 20-30 year old downtown apartments/condos.

<comment><USER7> I guess you could call people living in unsafe substandard housing, paying upwards of 60% of their income on rent, and homeless... "impatient" for this to change. If only they knew it was good for _society_ to be more "patient" about their substandard housing.

<comment><USER8> Increasing funds for public housing might accelerate a solution. Stonewalling market-rate development doesn't make anyone better off (except existing owners).

Since we find affordable housing through (effective) taxes on market rate construction, blocking it yields lower total affordable housing production.

</comment></comment></comment></comment></comment><comment><USER9> The fantasy is that low income people without cars will be attracted to mixed use developments where all their needs are in one place. But middle and upper income people want that too, and that drives prices up. We own a condo in the Philippines with retail downstairs and a mall next door and prices have tripled in the 6 years since we bought. In traffic congested Manila mixed use is not just a luxury, it's a necessity.

<comment><USER10> It's a myth that some particular kind of development will increase affordability.

It's plainly obvious that an increase in the supply of available housing increases affordability of housing and a decrease similarly decreases it. And similarly with demand.

Not everything has it's price determined by the blunt cudgel of supply and demand but things that are needed to live clearly do.

<comment><USER11> That's not obvious. NYC has a lot more available housing than somewhere upstate and is a lot less affordable.

More housing means more people, but prices might even go up.

<comment><USER12> More supply might lower prices, or it might lead to "induced demand" that eventually makes prices creep back up... Maybe even higher than before. So you're both right. The deciding factor which way it's gonna go is basically "location, location, location."

<comment><USER13> And where is that hypothetical "induced demand" coming from? Some other city that now has more affordable housing due to the people leaving town.

Either way, when you legalize housing and build more houses, you end up with more houses. That makes getting a house easier, for someone, somewhere.

<comment><USER14> > Some other city that now has more affordable housing due to the people > leaving town.

Indeed. Contrast New York City and Buffalo.

</comment></comment></comment></comment></comment></comment><comment><AUTHOR> Link to paper: [http://www.tandfonline.com/doi/full/10.1080/01944363.2017.14...](http://www.tandfonline.com/doi/full/10.1080/01944363.2017.1406315)</comment>


Pairs of Celebrities Born/Died on the Same Day - <AUTHOR> http://blog.computationalcomplexity.org/2009/07/pairs-of-celebrities-diedborn-same-day.html

<comment><USER2> The weirdest pair of celebrity deaths is Mother Teresa and Princess Diana.

On any other day Mother Teresa's death would have been _the_ news item, as it was it was barely a footnote.

Isn't there some variation of the birthday paradox hidden in here somewhere ?

</comment><comment><USER3> May be, don't die on Jan 1st as well. People are in hangover, and party mood in general. They don't want a party-pooper! However, if you want to be born (again!) on Jan 1st, you are most welcome ... join the party!

</comment><comment><AUTHOR> Favorite part: "What is the probability that three of the US presidents died the same day? Prob=1 since they did."</comment>


About the Penny Arcade Job Posting - <AUTHOR> http://forums.penny-arcade.com/discussion/185114/about-the-penny-arcade-job-posting <comment><USER2> This post confirms that the job posting is exactly what it looks like: an exploitative horror-show

* He speculates whether the job is worth a "lower salary" (and, given his admitted inexperience in the workforce, he probably has no idea what a market salary looks like)

* "The ping-pong table is NOT a benefit"

* He's on the "bottom of the goddamn ladder" and "reminded every day" edit: I'm getting a lot of flak for taking this out of context. This is a post on his employer's public forum, that they tweeted out on their corp accounts. It's not a stretch to read between the lines because this "joke" is so awkward and forced. I cannot imagine that it didn't have a double meaning. In other words, "ha ha only serious"

* He wears "four hats," and does the job of "two people" so they can run "lean."

* At some point his burnout was so bad (and so visible), his employers asked if they could "send [him] anywhere"

It's really a little strange to read this post. It's obvious that he really, really likes his coworkers and really, really hates his job. He describes horrible things with soft, feel-good terms. The author seems to hope applicants go into it with open eyes: the new hire will be crapped on and underpaid while he keeps a laptop next to the bed to handle early-AM change requests. But your coworkers are really fun!

<comment><USER3> He fairly specifically says that interpretations such as yours are wrong. He specifically says:

* No, the conditions are not awful...I love this company

* No one here has been scammed into working as hard as they do, and the implication that we're all blind fools with low self esteem for being here is honestly insulting.

* There won't be any taking advantage of starry-eyed young twenty-somethings.

He explains why he's leaving directly and clearly, (including "No, I did not burn out.") and that he likes working there. You're assuming he's lying, which you can't know.

<comment><USER2> He says the conditions are not awful, then describes awful conditions. He says he's not leaving because he burned out, and then describes when he burned out.

He very obviously loves the company, but it's not a healthy love.

<comment><USER4> Awful conditions _for you_.

<comment><USER5> For a human being

<comment><USER6> Yes, because you know what is best for all human beings. This line in the post was directed at you:

> _That's like saying everyone would be fulfilled by getting married and > having 2.5 kids._

Not everyone has the same utility function.

<comment><USER7> I tend to be a fairly relativistic, each-to-his-own person, so when things like this come up, I generally nod my head in agreement.

I don't think I can do that here, though. You're totally right in that people have different utility functions, but I believe that there are some things that are just objectively bad and unhealthy, and whether or not you _think_ you enjoy them or "like" them, they are still bad for you, and possibly bad for others.

I don't want to live in a world where it's ok for a company to create a position like this guy was in, and have that be the _norm_. No, it's not like that, but the more we apologize for companies that do that, and the more we say, "oh, it's ok for _that_ person to work in those conditions; if you don't like it then pick another job", the easier we make it for companies to think that those kinds of things are ok for everyone.

And then there's the wage issue. Bottom line: if you are working the jobs of more than one people, you should be paid more than one person. This guy took a pay cut to do more work. That's certainly a reasonable thing to do if compensation comes from other (healthy) angles, which appears not to be the case. The job posting for his replacement explicitly says they're cheap-ass bastards who aren't going to pay what you are worth or what the job duties merit.

That's not just a company _I_ don't want to work for. That is a company with staffing practices that are actively harmful to individuals and the industry as a whole.

edit: @wvenable puts it so so so well a bit below: "I guess I'm old and tired of my peers devaluing their own skills and time."

<comment><USER6> I agree that there is a point at which allowing the market to decide on fair compensation breaks down. Hence minimum wage and policies against discrimination, etc. I just don't see how one could possibly make an argument that this is the case here. The job pays enough to live well on, and while it does involve performing tasks typically associated with different _roles_ , I don't see any indication that it involves doing more than one person's _job_. His description of the time involved doesn't sound _that_ far off the norm. The main argument seems to be that the position is under-compensated, but I don't see any reason why in this case the market shouldn't be allowed to determine that.

Basically this whole issue seems to be a case where a significant part of the compensation is non-monetary (essentially, working at PA), and people whose utility functions assign that compensation zero value are getting bent out of shape about the fact that there exist people whose utility functions assign that compensation high value. (For the record, I'm in the group who assigns it zero value.)

<comment><USER7> I'm not talking about wage-slave conditions here. This isn't something that needs to be protected by a minimum wage or a government entity.

This needs to be protected by applicants valuing their time. I guess I read the current guy's description differently than you did; to me, it seemed his multiple-job job required significantly more time than the norm.

I think I distinguish between forms of non-monetary compensation as being good and bad (or healthy and unhealthy, if you prefer). Again, this is all relative, but I think at least on a base level we can probably find common ground here. Accepting lower pay because a place to work is "cool" falls squarely into the unhealthy pile for me. Perhaps it temporarily raises your happiness level (which _is_ of value!), but it's fleeting, and, well, temporary. Accepting lower pay because you're underqualified and the job will be a bit learning experience for you seems reasonable, as would accepting equity in lieu of pay (e.g. a recently-started company) if you think it might be worth something later to compensate. These sorts of things can have lasting impact on your life and are actually useful.

As I said, I just worry that things like this can inspire other companies to do similar things. Right now it's fairly easy to get a job at a good company if you're a developer with some chops. Demand is high and supply is still not quite meeting that demand. But what happens if that changes? If there's a strong culture of paying people market rates and avoiding my-company-is-cool type compensation in lieu of cash, perhaps people can expect a reasonable wage standard when the market is more competitive. But every company that tries to feed applicants some feel-good bullshit about how it's ok that they pay people less because they're just so cool... well, that jeopardizes that.

Or perhaps I'm just worrying about nothing.

<comment><USER6> > This needs to be protected by applicants valuing their time.

To me, this reads as "This needs to be protected by applicants changing their utility function." Applicants _do_ value their time. Everyone values their time. They just value it differently.

Your claim basically hinges on your belief that some aspects of utility are objective. The essential point of your argument then, as I understand it, is that you want job applicants to correct their utility functions according to that objective evaluation, to help out the rest of us whose utility functions are already 'correct'.

This would actually be pretty cool, but the trouble is that you really are not going to have much luck trying to convince everyone else to agree with your utility estimates, even if they do strike you as objective. I think I would probably agree with many of them, personally, but they cannot be made normative.

At the end of the day I agree that you are probably worrying about nothing. I'm not going to claim that the market does an excellent job of setting salaries. There are a lot of irrational agents at play in that market, and the results are skewed accordingly. That said, I think this particular brand of irrationality is highly unlikely to be a driving force.

</comment></comment></comment></comment></comment></comment></comment></comment></comment></comment><comment><USER8> Nothing seems to contradict what anyone has said about this job:

* "It is true that I am paid below market value"

* "If I had had to apply for the job with the presently listed requirements, I might not have gotten the offer."

* "Depending on the project load, I might spend 8 hours at the office and call it good, or I might stay til 10-midnight consistently for a couple weeks."

Just because the person who currently does the job feels this is a great thing and all the people applying for the job feel it's a great thing doesn't make it great.

I guess I'm old and tired of my peers devaluing their own skills and time.

</comment><comment><USER9> They're rock-stars looking for a digital roadie. The roadie doesn't care he's abused because he's "with the band".

They need to admit to themselves that they didn't treat the previous guy right for the kind of work he put in.

Honestly, given PA's history I'm not surprised by this whole situation. They seem like a great bunch of guys who suffer from some serious Aspie-myopia about how life works for everybody outside of their club, and they've had to fight enough trolls and lunatics online that they can't sort out the legitimate criticism from the noise anymore, so when they screw up they just double-down.

<comment><USER10> Why is it "Aspie-myopia"? People with Aspergers are entirely capable of understanding that other people have different thoughts, expectations, emotions, minds. They sometimes (it's a spectrum which means that not all have the same symptoms) have difficulty understanding others' mental state from body language and other direct social clues but they understand that people have different opinions.

You are spreading misinformation, and potentially insulting people in a throw- away portion of your otherwise good point. You don't need to be on the spectrum to be myopic.

</comment></comment><comment><USER11> Nothing about this job seems equitable. There appears to be literally 0 reward for making added sacrifices and taking on the additional duties called for.

Financial gain? Nope. World class technological challenges? Still no. Work life balance? Obviously not. Solving meaningful problems? No. Name recognition or industry stepping stone? Maybe, but highly mitigated by the fact that any serious applicant would be qualified for more valuable positions elsewhere.

Is this job squarely aimed at die hard PA fan-people? What about them as an organization is particularly exciting?

<comment><USER12> Im personally not interested, but PA is something of a cultural zeigiest in the same demographic as most of the people who would meet this skill set. They are a big name in gaming, running PA, PAX(the largest video game expo out there), and the childs play charity. They are considered leading commentators in gaming, being both insightful and involved with gaming for over a decade.

<comment><USER13> They have zeitgeist in the gaming world, not the software engineering world. They aren't doing anything remotely cutting edge software wise. I don't see why an engineer would think it's such a special place to work, other than just because they like video games, and by extension Penny Arcade.

<comment><USER14> Now if xkcd needed a dev...

</comment></comment></comment></comment><comment><USER15> The one (and only) problem I had with the posting was this line:

>Salary: Negotiable, but you should know up front we're not a terribly money- motivated group. We're more likely to spend less money on salary and invest that on making your day-to-day life at work better.

That immediately jumped out at me. That came off so off-putting. If you're not a "money motivated group", that means you pay more, right, RIGHT? No, of course not. Again, the author probably didn't mean for it to come out the way it did, but it felt so sleazy, like they were trying to put one over the applicant. "We can't pay you a lot because we're not about money here". .. urgh.

All the other stuff about work-life balance and multiple roles, I didn't have a problem with. This job is made for a single 20-something guy or girl who wants to hang out with the penny-arcade crew, not someone with kids and a spouse.

<comment><USER16> Probably intended it to be more of a comment on the size of the budget and the percent allocated for the position than the size of the salary relative to the market. That said, having been involved in a similar set-up, being the lone guy holding up tech for a large organization is a type of hell I wish on no man.

</comment></comment><comment><USER17> * If you want to work 80 or more hours * Prepare to have a laptop and some way of connecting to the internet with you at all times. Want to go on a hike somewhere there's no reception? Sorry, you can't. * They pushed out the launch, came and visited me in the hospital, brought me delicious Asian snacks and lent me a Vita to help pass the time.

So 80 hours of work a week -- or more. Inability to travel or enjoy wilderness or even visit family if they don't have reception. And if you're in the hospital, maybe they will visit and lend you something relatively cheap that you can return later.

</comment><comment><USER18> So you like working for less-than-market rates and have no life other than work? Want to work for me?

I suspect the answer is a flat, "No." Unless I was running a successful media company like PA there's nothing in it for you. What about it being PA makes it okay then?

Unfortunately I'm not surprised by the job posting. In non-unionized media companies the labor relations are generally very poor. A friend of mine used to work in such a post-production audio studio as a junior engineer. They paid him practically nothing and waited as long as they could to pay his invoices. In return he lived to work for them and never received credit for anything.

In contrast his sister worked in a larger post-production effects studio where the workers were unionized. She still has a job there afaik and is quite happy. Her brother left his gig when he was up to his eyeballs in debt and couldn't handle the hours anymore.

It sucks but that's the free market for you.

<comment><USER19> He says what made it okay in his case:

"This job meant security, a huge opportunity to go out of my comfort zone and learn, and countless other 'soft' benefits I couldn't think of. And I got to work with people I truly enjoyed."

<comment><USER18> I can't really speak for him but my junior audio engineer buddy liked his job too. It's still a _craptastic_ job that ultimately goes no where. You don't retire from a job like that: you quit, move on and tell people about your glory days down the road when you have a real job.

</comment></comment></comment><comment><USER20> the job he describes is at LEAST $125k/year + benefits + location and schedule flexibility i.e. work from home if you want, and you can leave to pick up the kids at 2pm. as long as the work gets done. possibly stock or options - depends on the company, but quite honestly i don't even view that as 'real' compensation for 90% of all cases.

i can't even begin to know what the fuck a 'volunteer' Enforcer is, especially for a profitable company. quite frankly it sounds like the typical 20 foot pile of horse shit that only the games industry could come up with. and i've seen some really _mind-bendingly exploitative_ behavior after being based here in LA for a decade.

anything significantly less than the above salary + benefits, and you are being ripped. off. by. people. who. know. better.

i know this because i have several senior devops guys on my staff who fit that description and have been with us for over 3 years. this is also what I used to make as a senior engineer before i started up my company as an owner/executive.

people should be FAR AND AWAY your most expensive resource. with a few notable types of exceptions, if you pay your people less than your hosting provider or your rent or marketing, you're doing something very, very wrong, and it will catch up to you in some way or another. see: penny arcade job post.

<comment><USER21> _i can 't even begin to know what the fuck a 'volunteer' Enforcer is, especially for a profitable company. sounds like a 20 foot pile of horse shit._

Why don't you try using Google and looking it up before angrily speculating?

The Enforcer system is what the use at Penny Arcade Expo. It's a volunteer system to help run the event, and in return you get to attend things when you're not on the roster. It's no different to all sorts of roles, be it grad students being a student volunteer to attend a conference (and if you want to talk about underpaid, grad student is where it's at) or teenagers picking up trash after the Glastonbury Music Festival.

No-one is being pressganged into being an Enforcer, it sounds like a pretty sweet gig to me.

<comment><USER20> [http://en.wikipedia.org/wiki/Penny_Arcade_Expo](http://en.wikipedia.org/wiki/Penny_Arcade_Expo)

that's funny, i didn't see "non-profit" or "charity" _anywhere_ on this page. you guys should consider updating it.

i am angry because there is an ongoing, systematic monetary devaluation (and hence social devaluation, dot com billionaires notwithstanding) of all technical roles _by people in our own industry_. it pisses me right the fuck off and the games companies are at the forefront of the fuckedupedness and loss of dignity.

you chain this fucking guy to a pager and pay him peanuts and harass him to the point where he needs to resign and then flippantly post another job posting with such unbelievably thinly veiled condescension and arrogance, and it's about time an industry called you out for it.

<comment><USER22> How is the Enforcer system related in any way to technical roles?

Since you didn't seem to get it, the Enforcers are people that 'volunteer' for parts of the event in exchange for free tickets to attend the rest.

<comment><USER20> no, i don't think you get it.

a for-profit enterprise should not be asking for volunteers for anything. that is a moral position i take.

second, the loss of dignity and monetary devaluation was referring to his day job. the one that he ostensibly makes a living from.

<comment><USER23> A for-profit enterprise should feel free to ask for volunteers whenever they feel like it, and would-be volunteers should feel free to ignore them if it's a bad deal.

Why do you hate freedom? Think someone's going to _steal your job_? Are you one of those union members who freak out if someone is setting up at a convention center and _plugs in their own laptop_ or _moves their own chair_? :P

(Now if they're fraudulent and misrepresent the volunteering, that's another matter.)

</comment></comment></comment></comment></comment></comment><comment> mkr-hn It's almost as if people with no knowledge of the situation didn't know what they were talking about and speculated angrily instead.

<comment><USER24> ... And they got it _right_. The employee confirmed what was in the job posting and what people had issues with (so many different roles, ridiculous hours, low pay, etc).

It's not that hard:

Want a programmer? Hire one.

Want a web developer? Hire one.

Want a system administrator? Hire one. Hire two if you have any type of 24/7 on call requirement (it's not remotely reasonable to expect one individual to be on call 24/7 365).

Then unless you want to get sued, set reasonable expectations of hours (2x full time is not reasonable).

<comment><USER8> I disagree. In a small company, everyone takes on multiple roles -- so why can't a single person be a programmer, web developer, system administrator? I've done that job many times.

The only issue is if the workload is more than one person can handle. In this case, the work sounds like it's only slightly more than a one-person job and it's unfortunate he's not paid accordingly.

<comment><USER25> Generally you are required to take on multiple roles at a small company because there is no other choice. There are no funds to hire the proper people to do it. It's either do it or go bust.

Penny Arcade is not a small company in that sense. They definitely _could_ hire the right 4 people to work there, but instead they want to just pay 1 person to do that job.

While I am sure you were competent enough to do 3 jobs, you are probably not as good at all 3 as someone who focuses primarily on one of those roles. But you forget this is for 4 jobs, and they want 1 person to do all that within their regular bounds of a job where they expect you to be on call 24/7\. Oh and they want to pay you below market rates to do all 4 of them. I think that is what every is angry about.

<comment><USER8> Lets just remove pay from the equation; because everyone should be paid appropriately for their work.

There seems to be a disconnect here between the amount of income/profit of a company and the size of the company. It doesn't sound like there is enough work for 4 people full time. There might not even be enough work 2 people full time all the time.

And while you might be right that I'm probably not as good as someone focusing on a single job that's irrelevant. I was competent enough to get the job done.

</comment></comment></comment></comment></comment><comment><USER26> It was a great response until he got to the 80 hours thing.

Why would you take a below market wage to do twice the work? Is there equity in penny arcade? Some kind of lucrative upside we don't know about?

</comment><comment><USER27> He doesn't seem to dispute that he basically gets paid less than someone who does all those things should...

So what I'm missing is whether there's a legitimate reason for him to be paid below market considering the Penny Arcade seems quite successful.

Though as one of the many people who's accepted supposedly below market pay, I can somewhat relate.

<comment><USER10> That sort of depends on your definition of "legitimate", but in my opinion, no.

I am fully aware that I make below market pay. Almost everyone (except for my developer co-ops, who I need to pay above market to be competitive in the local market) at the not-for-profit I work for does. It's not something that it hidden but our revenue comes from government money and membership fees that is best applied towards fulfilling our mandate so from a community perspective standpoint there is some degree of necessity.

There are other compensation factors though. There's some amount of profile enhancement (in a smallish pond), I've learned a ton, I get to work with a huge number of startups, I get to participate in any of the company-run events I want (and there's a lot).

To me, those are legitimate reasons for me to accept a salary under market value. But if we were a for profit the equation changes dramatically.

Salary is not the be all and end all for all (arguably most) people, and if it's within a certain percentage of market value, then other factors of compensation do make it worthwhile. Maybe you could get 10% more working in grey cubes but you wouldn't be working with those people, you wouldn't be part of a significant force in the geek culture world, and for some those trade offs are worth it.

What makes it stink for me is that I feel like PA could afford market rates, and they're not entirely because they know they don't need to be competitive in that regard, and to me that feels exploitative. They have a huge crowd of people willing to sacrifice some financial gain to be part of them, and they're going to take advantage of that.

It's reasonable from a business standpoint, I think it's even ethical, but it doesn't mean that it's a good thing.

</comment></comment><comment><USER28> Fuck this.

No, actually, fuck YOU. Everyone out there who is going all white-knight on "Oh no, this is not a good situation yadda yadda, you're being exploited, abused,... You're in such abusive relationship that you don't even see it". The job posting was worded to be terrible just to ensure only the most motivated and willing would apply.

Does this mean PA are looking for a slave? No, there are better ways to get yourselves a slave and a lot of startups are doing it without anyone batting an eyelash. Look around you: unpaid internships, low salaries that don't compute with the living costs in the area, all these talks of "sure, you start with a low salary but you'll get equity and stock-options",... This is the real bullshit happening around us every day.

All of this talk about "he's working in awful conditions" when he's describing his happiness is making me sick. Who gave any of us the Judgement Stick to impose our views on other people? The real abuse Kenneth is getting is from anyone putting words he never said in his mouth. He's doing great stuff for a great company who SUPPORTS him whole-heartedly. Why is this crowd trying to disminish his proudness of being part of a family?

We've broken the boundaries of the "9-to-5" job. We're beginning to see the myth of developers working only from the workplace crumbling in front of our eyes and I'm only expected to be at work during the day because we got a sales team whose job IS 9-to-5. Because in the end it's not about our capacity to seat 40 hours in an office but our capacity and desire to get stuff done. And some of us are burning with it, don't deny them. Yes we don't count our hours but what would be our alternatives? Go home while we're HAVING FUN? And I can't picture a workplace where I would be told "Okay, you did your thing. Go home and continue it tomorrow morning." I stay late because I like it, sometimes for the 1Gbps fiber, sometimes because there's still stuff I want to do. Yes, two people could do my job and we could share the hats. But we could also hire 50 people to share the hats and just produce even less.

Stop hating and go slap the companies who really deserve it, all the one who boast their funding, business model, clients, w/ever... and think you're being "arrogant" when you ask for a decent salary.

<comment><USER29> > No, actually, fuck YOU.

Why so angry mate?

<comment><USER28> I'm angry because for the last four days, it's been all about "the PA job posting". It's not even about "hacker" or "news" anymore. It's just about "hey look at us, we're having our weekly scandal and everyone can write a blog post to jump on the bandwagon and cash some visits".

I'm angry because this week, our splendid BBS was just a tech version of US Weekly (or The Sun-Herald if "mate" is any indication of you being Aussie).

<comment><USER30> I can see where you're coming from, though I don't quite share your anger. Let me explain:

When Snowden did his revelation that was pretty much _all_ we talked about. In fact, pretty much everywhere I go was full of the discussions. BBS, blogs, forums, you name it. We recounted where Snowden was at the time, whether he would escape the U.S., whether he would be granted asylum, and so on. The news was very high profile and (in)directly relating to the people, especially the developer community(the hackers, following your diction).

That's the nature of the high profile event. When something of interest happens you want to talk about it, do you grumble about its lack of diversity of topics? Sure, but the stuff was important and we talked about it.

I'm sure at least half of the so-called hackers, (I would prefer the term developers, but I digress) also either play a game, or more obviously, _hired_. A lot of us have been burned by bad employers and know at least a friend who's been exploited by such bosses.

PA, in this case, hits the two demographics in the center. They are one of the biggest presence in gaming industry _and_ they showed themselves as an exploitive, abusive boss still pretending to be 'the good guys protecting the small'.

To me PA stands in a very bad books because they had a track record of hypocrisy, misogyny, and more importantly, bullying. This is just another record to be added, but you see why people would want to talk about it, and when they have a place to talk about it, sharing the same interests and same demography, they talk about it.

We are all people, and a BBS doesn't define the topics.

</comment></comment></comment></comment><comment><USER24> Apparently it wasn't just a poor attempt at humor--that job is ridiculous.

</comment><comment><USER31> The initial job post, to me, was very clearly written to scare some people off, in an attempt to reduce the tidal wave of responses down to a mere flood.

If that flood of respondents doesn't treat their skills (or their life) as having any value, why should Penny Arcade?

This isn't one of those crap IT jobs someone takes out of desperation for work. This is a job that a ton of people are going to be feverishly applying for and calling their "dream job".

If their "dream" is to trade their skills and time for that level of compensation, who am I to start saying PA is in the wrong by not splitting it into two jobs?

<comment><USER19> A lot of people commenting seem to think that salary is the only form of compensation in a job, as well. I'd gladly trade a few thousand dollars a year to be _excited_ to go to work, with people I enjoy, instead of working a corporate gig where I'm miserable and working on boring projects.

</comment></comment><comment><USER32> Marco has some thoughts on this posting. [http://www.marco.org](http://www.marco.org)

<comment><USER33> That isn't his response to the kid's post, it's his response to the original job posting, and it got a lot of points being posted on its own yesterday.

<comment><USER32> That's what I meant, should have been clearer sorry. I searched on this thread for a link to it. I should have searched the actual site - obviously a Marco post would be there...

</comment></comment></comment><comment><USER34> Congrats Kenneth Kuan. If I ever meet you in person I'd buy you a beer and tell you it isn't always like this.

Realistically PA needs at least two hires here. One ops guy responsible for IT/Sysadmin, and one dev. Both can crossover as much as needed. They can share the on-call duties. Either decide to reel-in the expectations on this position or hire two people to do it right.

<comment><USER35> Ultimately they'll have to, but not because of any outrage about under compensation. This is only possible for Mr. Kuan because he built the systems he maintains. The next person is going to have to maintain systems someone else built. That will be a lot harder, and my guess is ultimately impossible for one person.

<comment><USER9> ... oh God. I hadn't even thought of that.

The PA guys were running a one-man show. This isn't going to just be "A system made by somebody else". This is going to be "An entire infrastructure made by one overworked dude who obviously had no time to document anything or make it neatly organized".

Their entire infrastructure is organized and managed _in this one guy 's head_. There will be at best a pile of notebooks and sticky-notes documenting things. Unless he suffers from a severe case of clinical OCD, there is approximately _zero_ chance that the files, the code, the database, the servers, the jobs... _anything_ is any condition to be handled by anything but That One Guy.

This isn't even a two-man job. It's a 10 man job.

</comment></comment></comment><comment><USER36> Has it been said that this guy is the reason Penny Arcade wrote the ad they wrote?

People treat us how we let them treat us, someone taught his bosses that it's OK to ask one employee to be your entire IT department. That it's OK to have them on call 24/7 and have him work a minimum of 8 hours a day (but up to 15-16h/day for months at a time), in exchange for friday lunch and the ability to play video games at work. I'm certain that the people he describes, those who leave at 5 to be with their families, each had a situation when they were pressured to stay late day after day and at some point just said, "no, I'm leaving".

Anyway, Penny Arcade's human resource management obviously sucks. But hey, they had a guy doing the work of a 3-4 person team and for cheap to boot. Why shouldn't they expect to find someone else to pump and dump?

</comment><comment><USER37> How much money does this company make? Does their corporate structure require them to file balance sheets? I mean if you're doing something like this to support the site you love, I can understand (still not agree, but understand). But if it's just to make some owner/investors rich...

</comment><comment><USER38> Erm. "..I wanted to teach but I needed money before that to put aside; and to make money I took a salary cut after Amazon job to work for PA. And then I work sometimes till midnight for weeks because they can hire more people but they won't. And you can't go hike and should be on call, always, forever and ever..." LOL what?

For the company that is supposed to be cool and racks up money from PAX... I don't have words to express my thoughts. It's a huge whirlwind, thoughts quickly appear in my head and move in circles and I can't grab any of them to display here. Just wow!

</comment><comment><USER39> Any job where one is required to be "plugged" into the internet 24/7 is a red flag. He goes on and mentions that being able to take a hike in the mountains is out of the question. If your life is work...

<comment><USER9> Reminds me of the infamous Office 365 tone-deaf infographic:

[http://www.microsoft.com/en- us/news/press/2013/nov13/11-06ge...](http://www.microsoft.com/en- us/news/press/2013/nov13/11-06getitdone.aspx#infog)

Doubly ironic given Krahulik's famous love for the Surface Pro, the flagship device of this new platform.

</comment></comment><comment><USER40> blah blah blah.

I'm leaving because I'm underpaid.

blah blah blah.

<comment><USER41> I downvoted you. I think completely justifiably. Is your type comment really appropriate for HN?

Quote from the post: >>First things first - you may wonder, how could this job possibly be so good if I'm leaving it behind? No, I did not burn out. No, the conditions are not awful. I am leaving because I have always wanted to teach.<<

<comment><USER40> This is a free country you can downvote me as much as you want but you cannot distort facts by quoting half paragraphs. And facts are that that if he was paid enough he would have stayed longer at Penny Arcade in order to later fulfill his dream of teaching.

> Doing so comfortably requires that before then, I need to put away a lot of > money to support myself when I'm getting paid a truly ludicrous wage. It is > true that I am paid below market value, but not so significantly as folks on > the internet assume. I live quite comfortably on this salary, and while it's > less than I could make elsewhere, it's not out of the bounds of reasonable > expectation. But I want to accelerate my plans for teaching. So here we are. > I love this company, but I have goals that won't be fulfilled by working > there, so it's time to move on.

TL;DR I'm leaving because I'm underpaid.

<comment><USER41> He is leaving because:

-I want to accelerate my plans for teaching

-I have goals that won't be fulfilled by working there

-I need to put away a lot of money to support myself when I'm getting paid a truly ludicrous wage ||-> indicating he is getting paid well at PA( compared to the teching job ) and was able to amass money for the low paying job when he will be teaching.

Reading is tech.

<comment><USER42> I read it as he's not getting paid well enough to put money away so he's changing to a better paying job which let's him build up his savings and then move to teaching. Which would imply that PA isn't paying him very well.

<comment><USER43> Yes, he's not really clear that 'I am quitting so I can get a better-paying job to save up for becoming a teacher', but if you parse the paragraph carefully and pay attention to the 'but's, it's what he's saying:

> I am leaving because I have always wanted to teach. Doing so comfortably > requires that before then, I need to put away a lot of money to support > myself when I'm getting paid a truly ludicrous wage. It is true that I am > paid below market value, but not so significantly as folks on the internet > assume. I live quite comfortably on this salary, and while it's less than I > could make elsewhere, it's not out of the bounds of reasonable expectation. > But I want to accelerate my plans for teaching. So here we are. I love this > company, but I have goals that won't be fulfilled by working there, so it's > time to move on.

'I live comfortably... _but_ I want to accelerate my plans for teaching'; he's not quitting _to_ teach, he's quitting to 'accelerate my plans' ie. save up a bunch of money, which implies getting a better-paying job which is not itself teaching.

</comment></comment></comment></comment></comment></comment><comment><USER44> _I think there 's a MySQL DB or two somewhere in the back_

This line scared me the most...

</comment><comment><USER45> Wow. Sounds an awful lot like the rationalizations of a cult member. The Kool- Aid is strong in this one.

</comment><comment><USER46> Sounds terrible.</comment>


Hobbits are Like Facebook - <AUTHOR> http://hobbits.arelikefacebook.com/

<comment><USER2> Background: [http://www.forbes.com/sites/ericsavitz/2012/10/04/chairs- are...](http://www.forbes.com/sites/ericsavitz/2012/10/04/chairs-are-like- facebook-uh-sure-chairs-are-like-facebook/)

Apparently, this website takes the requested subdomain and uses it to search Bing Images, showing the first result, except for "chairs" which is from the FB video.

e.g.: <http://www.bing.com/images/search?q=hobbits>

edit: Some queries, like "elf" show the default chairs.

</comment><comment><USER3> Not sure I understand yet.

<http://ffffffuuuuuuuuuuuu.arelikefacebook.com/>

<http://demons.arelikefacebook.com/>

<http://faces.arelikefacebook.com/>

<http://aliens.arelikefacebook.com/>

<http://minecraft.arelikefacebook.com/>

</comment><comment><USER4> <http://google.pluses.arelikefacebook.com/>

</comment><comment><USER5> <http://paul.graham.arelikefacebook.com/>

</comment><comment><USER6> haha nicely done

<http://facebooks.arelikefacebook.com/>

</comment><comment><USER7> Penis are like Facebook in 3...2...1...

<comment><USER8> I was quite surprised at the result. <http://penises.arelikefacebook.com/>

<comment><USER7> I was too scared to try. I wonder where they're scraping images from.

</comment></comment></comment><comment><USER9> Does anybody know who made this?

</comment><comment><USER10> haha this site is awesome</comment>


Topic modeling in 9/11 news articles - <AUTHOR> http://blog.dominodatalab.com/topic-modeling-of-news-articles/

<comment><USER2> Neat! I did some similar analysis of conducting topic modeling around tweets during the Boston Marathon bombing a couple of years back. It was pretty cool to see how topics were neatly ordered over time.

[http://blog.dc.esri.com/2013/04/18/the-evolution-of- discussi...](http://blog.dc.esri.com/2013/04/18/the-evolution-of-discussion- around-the-boston-marathon-events/)

</comment><comment><USER3> 404\. Correct URL: [http://blog.dominodatalab.com/topic-modeling-in- sept-11-news...](http://blog.dominodatalab.com/topic-modeling-in-sept-11-news- articles/)</comment>