Computer Science from the Bottom Up - <AUTHOR> http://www.bottomupcs.com <comment><USER2> On the first day of the first course as a CS major, the prof said something like "in this course you'll learn how computers work from the bottom up", turned to the blackboard, and wrote Maxwell's equations. We laughed, and he said, "You're laughing because I got it wrong, no? You need quantum mechanics for transistors".

We actually ended up starting at logic gates, flip-flops, and latches. But the joke was a great reminder that your floor is someone else's ceiling.

<comment><USER3> I once taught a class "Software as a Second Language: Computer Programming for Non-Majors" at UCSB/CCS. The audience very rapidly "why?"'d me down to "I honestly don't know, class dismissed: come back next week". I came back with a box of 12V relays and restarted the class from logic gates up, building a toy architecture with a usable machine language. Of course, I started at magnets (as given magnetism I can explain pretty easily how a relay works), but had to tell people that not only would you have to trust me that magnets worked at all, but that it isn't even clear that anyone knows how they work anyway (but for those curious, the Physics students in the class would likely be happy to talk about it ;P).

</comment></comment><comment><USER4> _This_ is bottom-up:

[http://www.charlespetzold.com/code/](http://www.charlespetzold.com/code/)

[http://www.nand2tetris.org/](http://www.nand2tetris.org/)

I've only read a little bit of the 2nd book (IIRC I stopped reading and lost interest when I found a very obvious and repeated error), but all of the 1st one. The 1st one is _highly_ recommended.

IMHO the trend of teaching things in CS top-down doesn't encourage understanding of how computers actually work, which turns out to be quite important in many situations, especially debugging and knowing the limitations of what computers can and cannot do. I believe that a lot of the problems with software today (bugs, inefficiency, overcomplexity) can be eliminated or at least reduced greatly via a deeper understanding of these basic concepts, since the majority of programmers seem to have only a very vague idea of e.g. memory, number representation, CPU operation, etc.

I think CS should start at the lowest level above EE, with binary representation of data and basic digital circuits (without e.g. going into the physics of how transistors work.) Have students build basic CPUs and write/enter programs for them and run them manually to see computation happening at this level. Then proceed up to Asm, C, and higher-level languages to write more complex programs, maybe even a simple operating system, accompanied by some of the more theoretical material (e.g. algorithmic complexity), continuing to keep the theme that there _is_ a practical use for learning these things.

<comment><USER5> Well, people could easily lose interest if they come into the field wanting to be able to make computers do cool stuff, and they're stuck with circuits and binary for a while before even being able to do that. Those are fine coming later after learning at least some amount of higher-level code in which you can explore the potential of what you can make happen with programming. Being able to see some of your code make a simple game work or something; I feel like that's an important step. It's easy for us, already fully immersed, to say that beginners should or would be interested to know all of the logic gate-level mechanisms, but it's going to be off-putting for most.

<comment><USER4> I consider it a "learning to walk before running" type of thing. It may not be interesting to a lot of beginners, many of which probably want to immediately start doing something "interesting", but these are the fundamental basics that anyone claiming to have a CS degree should know.

Starting with higher-level languages tends to breed more misconceptions, because the students get used to seeing things "seem to work like this", and having only a vague, superficial understanding, it is much harder to unlearn these than to learn the truth in the beginning.

It's also not as if things like logic, data representation, and the sequential nature of programs don't matter at higher levels --- whenever one uses conditional statements and loops, a good grasp of boolean logic is essential. Why numbers have a finite range, floating point values aren't exact, etc. all depend on knowing how data is represented. Not knowing these things will at best make it difficult to reason about code, and increase the chance of introducing bugs; at worst, it can lead to security flaws.

</comment></comment></comment><comment><USER6> _" from the bottom up"_ and the _first_ chapter is called _" General Unix and Advanced C"_? This book may be useful, but I would look for another name (I wouldn't even mention computer science, but that may be because I agree with Dijkstra that that isn't science or about computers). I also think a generic computer science book shouldn't only use Linux as example OS.

Also, if chapter 1 is about _advanced_C_, why does chapter 2 have to introduce binary and hexadecimal notation? I think the book could be improved here, too; in general, the TOC feels unbalanced to me.

<comment><USER7> (author here)

This book was created both from my experiences and the experiences of teaching 3rd year operating systems classes.

Students came in to that class having done a 2nd year class (data structures and algorithms I think) that was done with a lot of C. They really learnt "high-level" C, enough syntax to get by in the their course, but most didn't _really_ understand it -- not enough to read the source to any kernel at any rate. I don't imagine it's done like that today; this was a long time ago.

And most didn't _really_ understand binary and hex, and how it relates to code either. You'd be amazed most 3rd year students didn't know how 2^10, 2^20, 2^30 relates to kilo, mega, giga bytes.

The book needs a lot of editing, something I occasionally get to. But apart from the odd times someone posts it to here or reddit and people consider it like a text book, it's really only ever accessed by people googling for a specific topic. But suggestions are welcome and I'll consider it when I get some time.

And on the "it's not computer science". The first commit was 10 years ago and people have been telling me that ever since. It was originally dreamed up as a course I'd teach to high-schoolers over 10 weeks to prepare them better for university -- the "computer science" degree they were planning to take. Yes, the book is really more about what would be called "systems" in the outside world.

<comment><USER4> > I don't imagine it's done like that today; this was a long time ago.

Sadly, it still is in many (most?) places' CS curricula.

> And most didn't _really_ understand binary and hex, and how it relates to > code either. You'd be amazed most 3rd year students didn't know how 2^10, > 2^20, 2^30 relates to kilo, mega, giga bytes

I've worked with _graduates_ who didn't know binary, didn't understand signed/unsigned overflow and how integers wrapped around, and perhaps even more disturbingly, had never used a command line or knew how to do a lot of other things that could be called "basic computer literacy for CS students"... because almost all they were taught were mechanised steps on how to open an IDE, write some code, and click the Build/Run buttons. I think your book would be suitable for those students.

> But suggestions are welcome and I'll consider it when I get some time.

I think for the purpose you created the book, the organisation is fine; it appears to be a collection of selected topics instead of one meant to be coherently read from start to end.

</comment></comment></comment><comment><USER8> Judging from the ToC, this seems way more Operating Systems-centric than Computer Science, doesn't it?

<comment> LX-350 From the intro:

"Not everyone wants to attend shop class. Most people only want to drive the car, not know how to build one from scratch. Obviously any general computing curriculum has to take this into account else it won't be relevant to its students. So computer science is taught from the "top down"; applications, high level programming, software design and development theory, possibly data structures. Students will probably be exposed to binary, hopefully binary logic, possibly even some low level concepts such as registers, opcodes and the like at a superficial level.

This book aims to move in completely the opposite direction, working from operating systems fundamentals through to how those applications are complied and executed."

<comment><USER9> Sure, but none of that has much to do with computer science. This should more accurately be called "bottom up Unix".

<comment><USER10> That seems intentional. This seems like it's trying to be a "fundamentals of Computer Science" type thing than actual Computer Science. It's the stuff you need to learn first before you can move into actual Computer Science.

<comment><USER9> But you _don 't_ need to learn how Unix works to understand computer science. If you did, Church and Turing would've been rightly screwed.

<comment><USER11> That is like saying Socrates is screwed because he never read Kant.

</comment></comment></comment></comment></comment></comment><comment><USER12> This is a really useful resource.

I've started to do something quite similar on my blog. I've been mentoring some web developers who only know html+css, and i've been using the time to write about the whole stack.

My goal is to build a roadmap, not to write a recipe book.

I've just started, but this is going to be a very useful reference for when I need to explain some of the more complex ideas.

[http://daemon.co.za/2014/04/introduction-fullstack- fundament...](http://daemon.co.za/2014/04/introduction-fullstack- fundamentals/)

<comment><USER12> man, i really wish this went deeper into data structures and their nature, instead of just diving into binary math and c memory management specifics.

I'm not going to get as much use from this as I thought at first glance =/

does anybody know of any other good references to point people to when discussing the basics?

<comment><USER13> For Operating System, I've enjoyed _Three Easy Pieces_ :

[http://pages.cs.wisc.edu/~remzi/OSTEP/](http://pages.cs.wisc.edu/~remzi/OSTEP/)

Data Structures...well there's always Wikipedia and Knuth.

<comment><USER12> The simple english wikipedia has some useful entries on this kind of thing actually.

</comment></comment></comment></comment><comment><USER14> For someone who is just finishing CS this is great for recap. I printed the pdf and will go over everything I've learned in the past years.

Would've been nice if there was some "Theoretical CS Bottom-Up" too. From what I see this book doesn't have anything about computability, complexity, automata, algorithms, data structures, etc. Those abstract math-ish parts of CS are often overlooked by hackers, and are quite beautiful IMO.

</comment><comment><USER15> Anything claiming to be "from the Bottom Up" and starting with Unix and Advanced C instead of Assembly cannot be taken serious.

<comment><USER16> Or automata theory and turing machines, for that matter.

<comment><USER17> Probably both Turing machines and lambda calculus, just to see it from both sides of the coin.

</comment></comment></comment><comment><USER18> Is it just me or does the website have issues with character encoding? I am seeing things like "Bottom Up â€".

</comment><comment><USER19> I like the introduction with a "new" approach, even though I do not necessarily agree with it. Speaking in 0's and 1's is extremely daunting for someone who wants to learn about CS, IMHO.

</comment><comment><USER20> This is not "bottom up". Bottom up is not ultra-reductionism. Bottom up is not learning writing & literature from the sequential arrangement of ink and space(≈ taleb). Though it is technically correct to say so. Below is something very similar.

"At a purely formal level, one could call probability theory the study of measure spaces with total measure one, but that would be like calling number theory the study of strings of digits which terminate. At a practical level, the opposite is true: " \- Terrence Tao [1]

[1] [http://terrytao.wordpress.com/2010/01/01/254a-notes-0-a-revi...](http://terrytao.wordpress.com/2010/01/01/254a-notes-0-a-review- of-probability-theory/)

</comment><comment><USER21> I read through couple chapters and enjoyed it. Does anyone have suggestions on other books dealing with this level of complexity?

<comment><USER22> I haven't read any of the chapters of this, so my comparison may be a bit off, but you might check out The Elements Of Computing Systems[1]. It goes from logic gates to compilers.

[http://www.nand2tetris.org/book.php](http://www.nand2tetris.org/book.php)

<comment><USER23> I thoroughly enjoyed this book but it doesn't go into near as much detail as I would like- it gives a vague, general concept of how things work and some pointers on how to implement them, but doesn't really go into real systems, often relegating major features to "optimizations", etc.

</comment></comment></comment><comment><USER24> Where "computer science" = "computer architecture".

</comment><comment><USER25> I like it.

</comment><comment><USER26> This looks like UNIX/C from the bottom up. Not CS, not without theory.</comment>


An email newsletter that's actually worth subscribing to - <AUTHOR> http://www.veryshortlist.com/

<comment><USER2> HN e-mail listserv? Thoughts?

<comment><AUTHOR> I think it's kind of redundant, given the functionality and purpose of the site itself.</comment></comment>


Show HN: Cqrs-react-router – A Redux alternative - <AUTHOR> https://github.com/MichalPaszkiewicz/cqrs-react-router <comment><USER2> Routers can and should be independent of View technology. Here's one that works well for React but is independent of React:

[https://github.com/Rajeev-K/mvc-router](https://github.com/Rajeev-K/mvc- router)

The MVC model is well-understood, and does not require Redux. MVC does not imply two-way data binding, btw.

<comment><AUTHOR> Nice! Thanks for commenting. The reason that I tied the two together for react is that it saves quite a bit of boilerplate to let the router pass on the application service than having to manually add the service to each page individually.

However, the route and router are not necessary for the rest of the library to work and the rest of the library can be used as a plugin to use with a different router.

In terms of DDD principles - if you have decided you might need CQRS for your particular case, you might not want to spend a large amount of time setting up the routing/CQRS framework and you might want to spend all of your time on your actual business logic instead.

I am currently using this in a few of my projects and it's proving quite neat, although I may still need to add some details. I hope others can find it useful - if not, then at least this was a worthwhile experiment.

</comment></comment><comment><USER3> You should probably remove "Event Sourcing" from the description ... CQRS has nothing to do with Event Sourcing (even though they are often used in conjunction with each other), nor does your library from what I can tell.

<comment><USER4> You are right that CQRS doesn't have to use Event Sourcing... but this library DOES use Event Sourcing, although it seems the events are called "Actions".</comment></comment>


Upgrade Yosemite - <AUTHOR> https://github.com/torkale/upgrade_yosemite

<comment><USER2> > It is recommended to perform the update overnight as it requires several > hours

It requires several hours if you have a lot of files in /usr/local. If you move all your files from there to someplace under your home directory first, the upgrade takes under an hour. Yosemite doesn't put anything in /usr/local, so you can move the files back afterwards with no fear of stomping on anything.

<comment><USER2> PS: I reported this to the author, and it has been incorporated into the article.

<comment><AUTHOR> Thank you for that :)</comment></comment></comment>


The big question about driverless cars no one seems able to answer - <AUTHOR> https://www.washingtonpost.com/news/the-switch/wp/2016/02/17/the-big-question-about-driverless-cars-no-one-seems-to-have-an-answer-to/?wpmm=1&wpisrc=nl_most-draw4 <comment><USER2> Who is responsible when someone hacks the car and crashes it?

Cars already exist that can be turned off remotely. Further automation makes remote control even more powerful. It's unlikely that the source code of these cars will be available for audit, let alone modification. Ultimately drivers will be giving up control of their own cars to the manufacturer, hackers, or governments.</comment>


The Case for Buying a House with Friends - <AUTHOR> https://www.theatlantic.com/family/archive/2019/12/how-buy-house-friends-without-going-crazy/603538/ <comment><USER2> I think the main financial barrier is that you can't really own half a house. You can have everyone on the mortgage but then you're all 100% responsible for the all the payments which would scare the bejeezus out of me because in this scheme you're almost always buying a house that no single person/family in the group can afford.

I realize that I'm a little financially paranoid but I made sure that when we bought our house that we could afford our mortgage on a single salary and trying to scale this up sounds like a nightmare.

<comment><USER3> It helps to be in the same place as the other person(s) and time bomb the agreement. For us, it's:

Roughly similar salaries at Microsoft/Amazon

Same age

Significantly overlapping friend groups (which increases house utilization and happiness)

Ability to buy the house outright with reserves

Significant levels of trust

ARM mortgage guarantees that we're going to sell in 5-7 years, so if either of us want out we can generally wait it out in the worst case.

It's not an ideal scenario for everyone - I'm very lucky to be where I'm at. But it's very satisfying,and we're fortunate enough to not have to worry about the same financial concerns as others.

</comment></comment><comment><USER4> I've already told my friends about this. If you're co-renting, might as well co-buy it and co-sell or transfer it.

<comment><USER5> What's the plan if someone falls behind in payments, one Gets married/wants to move in with their SO Or there is a falling out

<comment><USER6> You just need a contract detailing the conditions of what happens in case of dispute up front.

<comment><USER7> A contract won't pay the mortgage. It won't clear the title. Basically, in business contracts only come into play when relationships are bad. In a good relationship, discussions of the contract are "Why didn't you do that?" "Doing it is not part of the contract." "Oh, OK."

</comment></comment></comment></comment><comment><USER8> one buys the house and separates the levels into flats selling those to the friendly parties. It's common.

<comment><USER9> that wouldn't work with most properties in residential zoning in the city I've been in... codes won't allow adding a second kitchen where I'm at even.

<comment><USER10> I'll never understand zoning laws. 9/10 it's just NIMBY complaining that your house is better or worse than theirs.</comment></comment></comment>


Being an excellent robot (Erica Goldson Graduation speech) - <AUTHOR> http://zenpencils.com/comic/123-erica-goldson-graduation-speech/ <comment><USER2> I find that hilarious.

Particularly "While others would come to class without their homework done because they were reading about an interest of theirs, I never missed an assignment", "while others sat in class and doodled..." and "while others were creating music..."

This seems remarkably naive. The doodlers did not all become artists, many were just bored or uninterested. The ones missing assignments were probably not reading books that fascinated them, they were probably playing video games or smoking/drinking somewhere out of sight. The musicians probably did have more fun than you.

But none of these people had life any more figured out than you. And if you're the sort of person that _can_ excel at anything they put their mind to, just because they want to, then the world is yours to do with as you please.

That doesn't make you a robot, it makes you a god.

<comment><USER3> >The doodlers did not all become artists, many were just bored or uninterested.

In fact, the doodlers were likely attending to the lecture, e.g. [http://www.time.com/time/health/article/0,8599,1882127,00.ht...](http://www.time.com/time/health/article/0,8599,1882127,00.html)

<comment><USER4> This is not so much motivating, as in saying doodlers actually doodle to absorb content without letting the mind wander. I don't attend to classes for absorbing content (books are fine for that), I do to think deeply about the subject as it's exposed and interact with the teacher with questions, making the exposition richer. This just confirms the doodler stereotype.

</comment></comment></comment><comment><USER5> What I see in this brief (I haven't seen the actual talk) is an understandable fear to get out of the education system.

Let's face it, from kindergarden to the end of college, what we have is a set of "levels", a fixed path with very very few points where you can actually decide something. The natural step is to reach the next level and keep doing roughly the same. More tests, more lessons... etc

BUT, when that system ends, there is a void. The adult world is not "a fixed system" or "the next level in the game", but a whole chaos, full of options, opportunities, uncertainties. And that freedom can intimidate, specially if someone has been focusing in excelling in the educational system and has the perception (not necessarily that's a real thing) that none of that is useful, that other people already have links (which a lot of people will form) with this new and weird "life outside academia"

I mean, it's a great thing, but I can totally understand that it's scary at first.

<comment><USER6> This is true. I think society has gotten better at stretching out the shelter over time. It used to be undergrad + law school, then figure it out. Now it's undergrad + banking/consulting/TFA + MBA + McKinsey, then figure it out.

Or for the lucky who were REALLY into programming, we knew early on that grades didn't matter as much so long as we learned enough to be valuable, since it's a field that's a relative meritocracy.

My experience, though, was the folks not handing in homework assignments were doing it out of laziness, not alternative studies.

<comment><USER7> > since it's a field that's a relative meritocracy

I couldn't _know_ this, I could just sincerely _hope_ it's true, for all the years I played with programming, neglecting my duties as part of an educational system. I believed that I _can_ become good at this thing called programming and I believed that it _will_ be enough.

Almost twenty years later I'm still astonished that my childish, naive belief was indeed true. That in this field it is much more important what we can do than who we are.

Or maybe it was just luck and I'm deluding myself...

<comment><USER6> There are politics in technology like every field, but... It's a field where things work, or things don't. And very hard problems get solved, or they don't.

In Marketing, there's always a way to spin a result. In HR, the results can be too long in the future to hold someone accountable.

Sales is perhaps the only other that comes close in being a meritocracy. There too the pedigree doesn't matter as much.

</comment></comment></comment></comment><comment><USER8> I think this is just the other extreme of unschooling. The focus is on blindly excelling.

I "went" to high school. I graduated with a 95% average. In high school, there was a tie between me and some blonde girl to get valedictorian. I told my physics teacher that I didn't even care and to give it to her because for her, it was a huge point of self-validation. I got 100% in physics and calculus because I loved the subjects. I spent my summers studying calculus. Excelling was a by-product.

Through high school, I played sports, wrote music and had sex with girls. I did well academically too, even though (or because?) I stopped attending classes during high school and never went to class in university.

I graduated university from a top 10 university on the dean's list and I ended up making hundreds of thousands of dollars every year by taking my own route.

I love what I do and I loved every minute of university.

The problem I think is as she says herself: she focused on excelling, not on doing what she enjoyed. Maybe her parents are to blame. I don't know. But this is not at all a strike against the school system.

The school system is broken. But IMO, this is not why. It works very well for the 5% who enjoy academic pursuit.

<comment><USER9> > I stopped attending classes during high school

You got away with that? Count yourself extremely lucky.

<comment><USER8> Why wouldn't I get away with it?

<comment><USER10> Public High School students in the US can't miss more than a pre-declared maximum number of days per year and often face consequences if they miss class after they've been verified to be in attendance that day.

Truancy is taken seriously in the US.

<comment><USER8> I guess my mom had a talk with the school.

</comment></comment></comment></comment></comment><comment><USER11> I think this shows incredible insight for a 18 or 19 year old. Going against the grain will certainly provide more resistance, but if she moved that way after this speech, I think she's already an 'artist', at least in the Seth Godin sense of the word.

Is the new absolute standpoint a little naive too? Sure. And a little bit of a big jump from where she was? Sure. Binary Search algorithm on figuring out her 'self', and she's got a real early start on it.

</comment><comment><USER12> The only hard part is knowing what you want to do with your life and how to make a living from it. Being top of the class certainly doesn't hurt your chances at success, if anything it instills dedication and discipline necessary to achieve whatever you decide to do next.

School is just a really long training level. It's not as fun as the game, but make the most of it and the game will be much easier to play.

</comment><comment><USER13> "students are put through the same brainwashing techniques in order to create a complacent labor force working in the interests of large corporations and secretive government, and worst of all, they are completely unaware of it"

I'm not so sure they're unaware of what they're doing. Don't most people go to university to "get a job"? Which typically means a 9-5 corporate cog paid to do the corporations bidding for most of your waking hours. That's actually what people _want_ out of their four year piece of paper. Most people have already accepted and acknowledge that university isn't required to perform these jobs, but it's required to acquire these jobs, so they go through it.

There will be few who are there for the education itself, and perhaps go on to research positions for much lesser pay than the successful corporate cogs. But it's no mystery that the vast majority are there to willingly become part of the complacent labour force.

</comment><comment><USER14> See also: [http://school.neocities.org/](http://school.neocities.org/)

</comment><comment><USER15> This is a great!</comment>


The Esoteric Files Archive - <AUTHOR> https://github.com/graue/esofiles

<comment><USER2> Fascinating repository. Digital historical preservation is unfortunately neglected compared to where it should be. It will be unfortunate for historians 100 or 1000 years from now when the vast majority of our interesting (to them) data is lost.</comment>


Is Steve Jobs Big Brother? - <AUTHOR> http://opinionator.blogs.nytimes.com/2010/06/01/is-steve-jobs-big-brother/

<comment><USER2> This is getting ridiculous.

Apple is NOT trying to oppress or control people. They're not even trying to rip people off; that's not how they work. People are upset because Apple makes something amazing that masses of consumers want, but they won't let developers/publishers put just anything on it.

Bloggers/writers/opinionators: if you don't like the decisions surrounding the iWhatever, don't buy it, or write your software/distribute your content on some other platform, but for goodness' sake stop comparing Steve Jobs to an oppressive political figure.

Get some perspective.</comment>


Getting an Internship as a Middle Schooler - <AUTHOR> https://medium.com/@tjhorner/getting-an-internship-as-a-middle-schooler-37f636fb7482 <comment><USER2> All about situation. Growing up in a smaller suburban town makes such possibilities impossibilities.

<comment><AUTHOR> I think TJ lives in a smaller suburban town...</comment></comment>


Deleting Uber is the least you can do - <AUTHOR> https://medium.com/@dhh/deleting-uber-is-the-least-you-can-do-30c0601103ea <comment><USER2> Unless the perception of the culture at Uber changes _dramatically_ I strongly suspect Uber managers (and possibly engineers) are going to find having Uber on your resume is a strong negative indicator when they leave to find new roles. It's not fair to suggest everyone there is part of this culture we're reading about but organisations are frequently cautious and hiring someone who _is_ part of it, and believes what goes on at Uber is normal and acceptable, could be quite damaging for any hiring manager. That means they won't even give you an interview. Everyone at Uber really needs to be fighting this reputation _hard_.

<comment><USER3> > I strongly suspect Uber managers (and possibly engineers) are going to find > having Uber on your resume is a strong negative indicator when they leave to > find new roles.

Many people at Uber never need work again.

<comment><USER2> In theory, but in practise they have to keep working, and it has to be at Uber because they can't afford to leave.

[https://techcrunch.com/2016/04/29/handcuffed-to- uber/](https://techcrunch.com/2016/04/29/handcuffed-to-uber/)

<comment><USER4> No one at Uber is in a position where they are unable to leave and find additional work. They may have to give up their lottery ticket, but the handcuffs in question don't exist if employees choose not to exercise their options.

</comment></comment></comment></comment><comment><USER5> While Uber (probably) had it coming, it's still annoying that the Internet as of late has turned into scores of "famous person writes a long virtuous post proclaiming how some other famous person is less virtuous."

I want my Internet back.

(Stopped using Uber after they changed iOS app location tracking choices to only "Always" or "Never," instead of original "While using the app")

<comment><USER6> I feel the same way - not because either side is necessarily wrong, but because these kind of articles are grossly simplified. Uber is not pure evil, or pure good.

Even the #DeleteUber hashtag originated from a misunderstanding: [https://www.axios.com/uber-didnt-deserve- deleteuber-22258932...](https://www.axios.com/uber-didnt-deserve- deleteuber-2225893201.html)

Certainly the article about sexism in the workplace is deeply concerning, but that doesn't suddenly mean Uber is a force for pure evil in the world and has done no good for anyone. It means, like many organizations (especially ones that are growing aggressively), they have serious internal problems. Travis immediately responded to the article, and I have no doubt that he is against rampant sexism occurring in the company. What would be the motivation for him to allow it to continue happening?

<comment><USER7> I don't know anything about Travis or Uber directly except what I've read. But I've read enough to know something is really wrong.

>What would be the motivation for him to allow it to continue happening?

Because the company got where it is with exactly this culture. Look at AIG in the 2000's -- huge portions of the company lying about their finances, leading to the ouster of their CEO. Only to be followed up by a huge bailout in the 2008 financial crisis under the new CEO. The culture was poisoned, it comes from the top down - everyone in management is cutthroat because that's the only way to survive. And it's pretty much impossible to change.

I worked at a company that was purchased by AIG - American General. My executive level boss was dishonest - lied about people working for her, and lied to other executives. She made her way from a low level executive to a Executive VP once the company was bought by AIG. Once you've got a toxic culture, that's how the company works; and I think there are a lot of companies like this.

</comment></comment></comment><comment><USER8> If you were outraged by Trumps "locker room talk," I don't see how you can stand by an entire company culture dedicated to protecting serial harassers and silencing their victims. Gross, this company is just gross.

<comment><USER9> Is outrage really a viable option any more for driving policy change? Seems like the last election proved that all you're doing is pissing away organizational energy.

<comment><USER10> I don't see how you could look at what happened and how it was systematically brushed under the rug, then at what has happened since the article was published, and come to the conclusion that anything BUT outrage would drive a change at this company.

</comment></comment></comment><comment><USER11> I'm 50/50 on this. I _am_ offended by the shady practises coming out around Uber, and would like to vote with my feet as it were - but in London UK, Uber has no real alternative. Lyft doesn't operate at all outside the US as far as I can tell - and I'm unaware of any other taxi firms which operate the same model here.

So I'm left with using offical "Black Taxis", which don't have one central app to get hold of them (I think there are four different ones last time I checked), and the darlings of silicon roundabout will point out they cost a lot more than an Uber does for the same journey.

<comment><USER12> The same is true for Amsterdam

<comment><USER13> Why exactly do you need Uber in the city with arguably the best bike infrastructure in the world and no hills, whatsoever?

Oh, bad weather?

As far I recall Amsterdam has absolute stellar public transportation and if that doesn't cut it an occasional taxi ride is probably a valid option.

Oh, there's no app (which I doubt)? What about, like in the old times, just give the dispatcher a ring?

To each his own and you're responsible for maintaining your moral compass.

I for one never used and never, ever will use Uber. No matter what. This company is morally so reprehensible that I could never justify throwing any money on them.

<comment><USER14> I live in Amsterdam and mostly bike around, but sometimes you need to get a car for whatever reason.

Uber's much cheaper. I've had a car from the airport into the city go as low as 17 EUR, usually around 25. Hailing a taxi costs at least 40 EUR.

It's also very convenient to know the location of your arriving taxi for knowing when to leave a party and leaving out several minutes of explaining the route to the driver.

It's also not uncommon for taxi drivers here to drive you a much longer route if they think you're not a local and don't know where they're going. It's happened to me, and several of my friends. Never happened with Uber.

I've also found service with Uber to be much better. The first time I tried it here in Amsterdam the driver offered me a bottle of water and asked how I was doing. That had never happened to me once here in Amsterdam. The customer ability to rate drivers does wonders for service over traditional taxi companies.

</comment></comment></comment></comment><comment> temp-dude-87844 Why would I delete Uber? They're using VC money to subside transportation for thousands; money is literally leaving their pocket and going into those of part-time drivers who ferry my and others' butt around the wastelands of America's suburbia. Their managerial track record is well documented, they've ignored laws from the beginning hoping to wait until the tides of regulation shift into their favor, helped by lots of time spent lobbying and intimidating. They have shown that no holds will be barred to spread the wings of Uber far and wide so they can ruthlessly crush local taxis and any less- funded competition. But at the end of the day, Uber isn't someone you vote for with your wallet, it's someone who gives you more service than the money you put in.

We already knew before the harrassment allegations that the management may be full of skeezy types, but Uber is one of those rare ventures where punishing the company legitimately doesn't punish the company at all, but rather solely its employees, drivers, and riders.

So turn your outrage into something productive, not knee-jerk reactive. For example, _donate to some organization that stands up for the rights of harrassed employees._ Ponder about whether this is something that could happen to you, or if you'd be capable of this abhorrent behavior. Start a conversation. Think really hard about whether you'll use your influence and social pull to sway people around you or on the internet, and the message you send. Comparing your movement to #DeleteUber perhaps isn't such a good idea, given the whole damn thing was most likely an embarrassing misunderstanding that was vilified by people assuming the worst. Are you sending a reasoned, if impassioned message, or just riling a mob?

<comment><USER15> > money is literally leaving their pocket and going into those of part-time > drivers who ferry my and others' butt around

I think its really just your pocket - the passenger. I think Uber has "democratized" the process of becoming a taxi driver. But I doubt it's made things better for taxi drivers. Maybe one could have argued that it had in the early years of Uber - 2 or 3 years ago. But I think the driver's are feeling the pinch now. There's an oversupply in busy areas. Uber also gets new drivers "hooked" by sending them a lot of fares early on after they signup.

</comment></comment><comment><USER16> I know I'm in the minority but I actually never installed Uber because everything I read about the company's tactics and leadership disturbed me, from day one.

</comment><comment><USER17> >I don't think it's a coincidence that both Peter Thiel and Uber CEO Travis Kalanick have been chummy and beyond with Trump.

Travis has been chummy and beyond with Trump? What's beyond?

<comment><USER18> In Travis's case, what's "chummy" in the first place? Agreeing to serve on a forum and stepping down before it ever met?

<comment><USER19> You mean he was forced to step down by the pressure users put on him [http://www.cnbc.com/2017/02/03/schwarzman-uber-ceo-forced- to...](http://www.cnbc.com/2017/02/03/schwarzman-uber-ceo-forced-to-quit- trump-council.html)

<comment><USER18> Yes. The piece I wanted to clarify was that it occurred before any meeting.

</comment></comment></comment></comment><comment><USER18> It seems worth noting that "Trump surrogate" Peter Thiel (who somehow damns Uber by association) is not only _not_ involved in Uber, but is a major investor in Lyft (as is Carl Icahn).

</comment><comment><USER20> Uber is the solution to taxi drivers using dirty tricks (i.e taking the long way, turning the meter off), but also comes with it's own dirty tricks (surge pricing).

<comment><USER21> I don't understand how charging market price is a "dirty trick". When the demand curve shifts, the price must also shift to meet the supply curve, otherwise you will create a condition where there is not enough supply.

This concept applies to any perishable good, including seafood, hotel room nights, flights, concert/show prices...otherwise how should the limited resource be distributed? And how can production of the resource be stimulated if the prices don't shift to meet the supply curve?

<comment><USER22> Sometimes what they charge you is not "market price" though. On my last trip my Uber driver took me via a huge curve and the charge ended up being ~ 40 dollars more than the projected value. I've filled out a form explaining the situation and most of the 40 dollars were immediately deducted from the fare on submission.

I don't know whether the driver made a mistake or took me on a "trip" deliberately, but if I was in a normal taxi, I would either have to pay, or fight with the driver.

Not defending the company culture, but the app does protect the consumer from some level of undesirable taxi driver behaviour.

</comment></comment></comment><comment><USER23> It seems that Silicon Valley loves to hate people who have a different political opinion than theirs - like Peter Thiel and Travis Kalanick.

Regarding the "strange year at Uber" post, it's absolutely shocking for me to see smart people jump at conclusions based on a single point of view - her.

I'm not saying she's lying, but hearing just one side of the story is never enough.

If the same post would've come from an ex employee of Facebook, which didn't supported Trump, I'm sure people would've had second thoughts regarding its true veracity.

But if it's something negatively related to Trump, it must be true.

I'm not a Trump voter, I'm not even American and this witch hunting that takes place against Trump's supporters is quite suspicious, even when looked at from Romania where I'm located.

<comment><USER24> No, they love to hate powerful assholes, and we need to stop pretending that right wing libertarianism is a harmless 'alternate perspective', when it's the political platform of protofacism - in other words, the political platform of the contemporary asshole.

<comment><USER23> So, it's either left wing, socialist perspective, or a wrong and harmless one?

That's not a very tolerant position, is it?

<comment><USER24> You go ahead and fondle your strawman.

</comment></comment></comment></comment><comment><USER25> I skimmed through the article fast, so here is what I gleaned:

1\. Donald Trump is bad, Thiel is bad for supporting him.

2\. There are problems at Uber

3\. ... ?

4\. Lets punish ALL shareholders, and YOURSELF, by not using the service.

5\. ... ?

If some law has been broken, I would prefer that the guilty person(s) be held accountable. I am not sure why I have to pay more for taxis at this time

<comment><USER26> Worldwide, riders pay 41% of the cost of transportation with Uber.

[https://motherboard.vice.com/en_us/article/uber-true-cost- uh...](https://motherboard.vice.com/en_us/article/uber-true-cost-uh-oh)

"Investor reports reveal riders only pay 41 percent of the full cost of each ride, with investors footing the remaining 59 percent."

That is reason enough for me not to use it. It's bankrupting whole industries/families/incomes with VC capital.

<comment><USER27> But this is exactly why I do use it (or did, until this latest stuff came out) -- if some clueless VC wants to burn their unicorn giving me subsidized rides, I'm more than happy to supply the fuel. And let's be honest: the taxi industry is/was just terrible.

<comment><USER26> No, not all taxi industry is/was just terrible worldwide. That might be the case for some regions or even large countries, but you're oversimplificating things.

</comment></comment></comment></comment><comment><USER28> I did it this morning. A service rep sent me an email later to confirm I was marked for deletion. I wonder if they have a human read through all of them.

</comment><comment> d--b I'm usually not a big fan of DHH (talking about silicon valley hubris?), but this is a good read.

</comment><comment><USER29> I'm glad someone realizes what unbounded capitalism looks like. Whether we must somehow punish Uber for doing exactly what their investors and shareholders want, but yet neglect those exact companies that uber competes against, is a rabbit hole stance to take

<comment><USER30> Are you just giving up on improving working conditions in the industry then?

</comment></comment><comment><USER31> I can only assume that the creation and sharing of this article is meant as a political act, since there is no way that this will move the growth needle.

If you want to change Uber's culture for the better, you need to persuade those that work within it and have klout to use it. In order to do this, first you'll need to believe that there are good, kind-hearted people that work there and that aren't happy with what happened.

Telling a small number of people to 'delete the app' or pointing the finger at everybody that works there isn't going to do any good.

</comment><comment><USER32> What are the alternatives to Uber in Canada? Even a basic feature set (request a taxi with calling a number/hailing on the street) would be worth considering in these circumstances

</comment><comment><USER33> Seems to be people are finally realizing Uber isn't much different from some of America's other large businesses that seem to have little regard for ethics.

</comment><comment><USER34> So what's the _most_ you can do?

</comment><comment><USER26> Deleting Uber or just never ever sign up.

</comment><comment><USER35> For writing an article that's ostensibly about Uber, DHH sure does seem to be hung up on Donald Trump.

</comment><comment><USER36> If this is what it takes to convince you not to use Uber, don't bother deleting Uber.

<comment><USER36> As I'm being downvoted, I'll elaborate:

You shouldn't delete Uber because DHH tells you so. You should delete Uber because you find their practices immoral.

Over the years there have been enough articles about Uber that could justify calling them immoral and deciding to boycott their service. You don't have to wait for a "celebrity" to tell you what to do.

On the other hand, if you are only convinced because DHH says it, you might not actually believe that they're bad and just join the protest to feel morally justified outrage and show off your virtuousness -- in which case it is probably dishonest to do so.

In other words you shouldn't join a protest because someone people talk about using their initials does it, or because your peers think everyone should do it. You should protest because you think something is worth protesting.

Personally I totally agree with DHH that Uber is worth protesting, but I agree because I've observed Uber's behaviour over the past years and come to that conclusion myself. If you haven't you should read into it and determine whether you agree or not.

And if you disagree, you should think about why that is, too. If you want to be think of person that agrees with these things but don't, that should be a cause for personal reflection. Simply joining the bandwagon doesn't help with that, even if it helps the protest.

</comment></comment><comment><USER37> DHH just couldn't help himself and had to mention President Trump. Yawn.

<comment><USER38> DHH couldn't help himself and had to virtue signal; there is not enough information out yet, and everyone is calling for Uber's figurative head to roll.

</comment></comment><comment><USER39> I feel like there is a "sacrifice for the greater good" mentality growing. Think about how many civilians the US govt killed in the middle east just so we could have decently priced oil. I think that mentality is bleeding into other areas, like Uber. The thinking goes: "We are the only ones working to solve transportation in ten years, so its okay if we are sexist today."

</comment><comment><USER40> Surprise, surprise. Most of the big companies are evil. You can either go full stallman style or be very reasonable about buying/using services from these companies.

<comment><USER27> False equivalence. Most big companies do _not_ have the sort of culture I read about in that Fowler piece.

</comment></comment><comment><USER41> I really dislike posts like these. The truth is that Uber makes the lives of millions of people better and that's why it's valued at $66B. There are far worse companies doing far worse things helping fewer people.

I mean, what is the end cause? shutting down uber? teaching it a lesson? will it really help reduce sexual harassment in the workplace? or are you treating the symptom instead of the disease?

This is just a rant against the so-called "Silicon Valley culture".

<comment><USER42> So I should support companies that actively endorse sexual harassment cause there are "worse ones out there"?

Also, saying market cap is a metric of "doing good" is a ridiculous proposal.

The end cause is drawing a line.

</comment></comment><comment><USER43> Correction: I read Susan's blog post about her year at Uber here: [https://www.susanjfowler.com/blog/2017/2/19/reflecting-on- on...](https://www.susanjfowler.com/blog/2017/2/19/reflecting-on-one-very- strange-year-at-uber). It turns out that this consultant _can_ survive without Uber. I deleted it and deleted my account as well.

Leaving my original post up for accountability.

\---

Uber is kind of like Windows: they are #1 in their markets, so they are many people's #1 target.

It bothers me more that we haven't heard more about the goings-on at Lyft. Compared to all of the attraction that Uber's gotten, Lyft is squeaky clean. That can't be right.

From a practicality standpoint, there's no way I can delete Uber. I travel every week and use ridesharing services often. There are several times in which Uber is the only service that has cars on the road or the difference in wait time is pretty stark. When it's 12AM and you need to be up at 7AM that morning, every minute counts.

<comment><USER44> Lyft has the same legal and regulatory issues as Uber, they just don't seem to have as many sleazy people. Most companies are not ever in the news for employing terrible people, so I don't think it's that hard to believe.

Honestly the worst thing I've seen from Lyft is this blog post[0], in which they celebrate someone, driving at 9 months pregnant, who decided to pick up another passenger when she went into labor instead of going straight to the hospital.

[0]: [https://blog.lyft.com/posts/2016/9/6/chicago-special- deliver...](https://blog.lyft.com/posts/2016/9/6/chicago-special-delivery)</comment></comment>


Cookieless Analytics – A Tool Comparison - <AUTHOR> https://lukas.grebe.me/digital-analytics/Cookieless%20Analytics%20a%20tool%20comparison/?ref=hn0qk7 <comment><USER2> You should also check [https://nibspace.com](https://nibspace.com), it's a slightly cheaper alternative

<comment><AUTHOR> Thanks! I'll add it to the list.</comment></comment>


Ask HN: Does mounting servers parallel with the temperature gradient trap heat? - <AUTHOR> Heat rises. Is heat trapped in the rack? Would mounting servers sideways (vertically) allow heat to transfer out of the rack?
Many systems have taken the vertical mount approach approach over the years: Blade servers, routers, modems, and various gaming systems.
Horizontally-mounted: parallel with the floor
Vertically-mounted: perpendicular to the floor <comment><USER2> My guess is that vertically mounted is better, but heat flow in moving fluids is very difficult.

When there are no fans, there are some empirical rules that give an approximation of the heat flow, but are applicable to very specific cases.

If there is a cooler and a fan inside the racks, my guess is that nobody know.

Note that a big fan on the side may also help to change the air between the racks faster and increase the heat flow. Some motherboards have a fan that sucks fresh air from outside the case and send it directly to the cooler.

Probably the only way to know is to try it. If you have a few spare boards you can try the different configurations. if you measure the temperature in each case and take a few photos, it can be an interesting blog post.

</comment><comment><AUTHOR> Thermodynamics [https://en.wikipedia.org/wiki/Thermodynamics](https://en.wikipedia.org/wiki/Thermodynamics)

Are engine cylinders ever mounted horizontally? Why or why not?

<comment><AUTHOR> > _Heat rises._

Warmer air is less dense / more buoyant; so it floats.

"Does hot air really rise?" [https://physics.stackexchange.com/questions/6329/does-hot- ai...](https://physics.stackexchange.com/questions/6329/does-hot-air-really- rise)

\- Water ice floats because – somewhat uniquely – solid water is less dense than liquid water.

> _Is heat trapped in the rack?_

Probably.

> _Would mounting servers sideways (vertically) allow heat to transfer out of > the rack?_

How could we find studies that have already tested this hypothesis?</comment></comment>


Labor Dept disburses $10M to grant applicants for technology-based learning projects - <AUTHOR> http://www.wjhg.com/home/headlines/37462584.html

<comment><USER2> This would be very useful hacker news if it was posted before the grants were given when you could still apply. Its just history now.</comment>


Something Deep Inside Pluto Is Replenishing Its Atmosphere - <AUTHOR> http://www.wired.com/2015/08/something-deep-inside-pluto-replenishing-atmosphere/?mbid=nl_81915 <comment><USER2> Ug. Article is terrible. I quote: "Considering that Pluto has been around for more than four billion years, the odds are pretty friggin' slim that humans would meet the dwarf planet during its brief phase of atmosphere-having. No, something is replenishing the supply. Scientists, you got some 'splaining to do."

What is this, third grade. Here's the actual science: [http://iopscience.iop.org/2041-8205/808/2/L50/pdf/2041-8205_...](http://iopscience.iop.org/2041-8205/808/2/L50/pdf/2041-8205_808_2_L50.pdf)

<comment><USER3> > What is this, third grade.

What are we, in a retirement village?

As long as the science is good, I don't care how it was written. Could we at least get the reporting to be factual before we worry about proper style.

And I thought it was kinda novel unlike the research paper which is a pretty hard read for someone not researching this topic.

<comment><USER4> > _As long as the science is good, I don 't care how it was written._

That's a bad attitude to have. Sloppy writing messes the science the same as sloppy measurements. Science is not some inate quality, it stands by how well it's communicated.

<comment><USER5> I can't help it but.. do you have any science to back up that this no-nonsense style is harmful? I much prefer it to the style of long, winding sentences full of jargon and old, uncommon words.

My feeling is that the former is more encouraging of critical thinking, since the errors stand out more. The latter style can make you think that maybe it is just me that is too stupid to understand. What the more complicated style has going for it I guess, is that it can exclude the uneducated, and it may also serve as behavioural cue to put you in a scientific state of mind. Clothes are known to do this [0].

Personally, I still prefer the casual style.

[0] [http://spp.sagepub.com/content/early/2015/04/02/194855061557...](http://spp.sagepub.com/content/early/2015/04/02/1948550615579462.abstract)

</comment></comment></comment></comment><comment><USER6> Wired editors should investigate a valuable technique for clarity of expression: scientific notation.

<comment><USER7> It's journalism. It's not about accuracy or clarity, but the impression it makes on the reader. All those zeroes make a bigger impression.

<comment><USER8> And I thought analogies in scientific journalism were annoying. I certainly prefer them to this.

What's biggest:

      7000000000000000000000 grams

      700000000000 gigagrams

      70000000000000000000000000 milligrams

      The mass of Ceres

      The mass of the water currently in the Pacific Ocean

      The mass of the Earth's atmosphere

      The mass of Mt Everest

<comment><USER9> 57900000000000 refrigerators

[http://recoveringphysicist.com/23/journalistic-units-of- meas...](http://recoveringphysicist.com/23/journalistic-units-of-measure)

<comment><USER10> Well then! It's settled.

</comment></comment></comment></comment></comment><comment><USER11> -> Pluto has been around for about four billion years, and according to the best math, it should have lost about 7,000,000,000,000,000,000,000 grams of nitrogen (give or take a zero) since then.

What is "the best math"? Is it better than "the good math"? I get the whole writing for pop-sci thing that's in vogue right now, but being cavalier with significant figures or being imprecise with language leads to a shallow understanding of the topic presented. Especially when writing about space, where it's already difficult to convey the scale of what's described.

<comment><USER12> I'm not debating the whole "cavalier with significant figures or being imprecise with language" bit, but "the best math" seems to mean "the most likely guess given current information."

</comment></comment><comment><USER13> Unreadable.

</comment><comment><USER14> Aliens.</comment>


New technique aims to edit man's DNA inside his own body – The Verge - <AUTHOR> https://www.theverge.com/2017/11/15/16656140/gene-editing-therapy-hunter-syndrome-sangamo-clinical-trials-zinc-finger-nucleases <comment><USER2> I worry about funding for gene therapies. Pharma companies like recurring revenue and a successful gene therapy would likely be a single treatment.</comment>


Ask HN:Can I force a fortune 500 company to do business with me if I own stock? - <AUTHOR>

It has always puzzled me to know if I own stock of a big company and myself own a business, can I use that to make the Big company do business with my not so big business?Would I need to buy more shares? How much is enough? <comment><USER2> Think about how this would scale... Anybody could setup some lame business, buy a few shares of stock in a handful or large organizations and 'force' those companies to do business with them?

Sorry, but if you think this through, it's not even remotely logical.

</comment><comment><USER3> No. Owning stock in a Fortune 500 company generally doesn't even give you a vote, because those are "privileged" shares, or even a share in the profits of the business (dividend).

Even in the case of a smaller company, operating according to how joint stock companies are theoretically supposed to operate, this would generally not be legal. The board and officers have a fiduciary responsibility to all the shareholders, and they are not supposed to do something that benefits one shareholders other interests while costing the others through inefficiency.

In a system where all investors where roughly equal, the loss from cheating company the one company should roughly equal the benefit of the other, and crime would not happen often.

</comment><comment><USER4> If that were possible, commerce would run with the efficiency of a nepotistic fiefdom.

Even if you held a controlling stake, the other shareholders might accuse you of having a conflict of interest, and funneling funds to your private coffers.

 _Forcing_ is usually a bad idea in relationships; private and professional.

</comment><comment><USER5> Yes, if you own a controlling interest in the company you could probably make it do pretty much anything within the law that you wanted (sucks to be a minority shareholder sometimes) but then, if you did own the majority of shares in a big company you are, by definition, a big player yourself.

</comment><comment><USER6> Shareholders and the Board appoint people (aka management) to run a company. Management has a fiduciary duty to do what is optimal for shareholders (maximimize value). If your company will help management do that, they may choose to work with you.

Owning shares has no direct influence as far as I can tell. Of course, owning a lot of the company might give you a voice they'll listen to.

</comment><comment><USER7> Do you own a controlling stake?

<comment><AUTHOR> No, but what if I did? Would that be different?

<comment><USER7> To be fair, this is outside of the realm of my knowledge, but I think so due to the following:

Situation A: You own 10% of a company, and so does Joe Schmoe. You tell the company to do business with Anvil Corp. Joe Schmoe tells the company _not_ to do business with Anvil Corp. Who wins?

Situation B: You own 51% of a company. You tell it to do business with Anvil Corp. The other 49% says no. Who wins?

I say this is outside of the realm of my knowledge because I'm no sure about Situation B (I mean, I could see you still not winning in that situation given your conflict of interest; it sounds like a question of corporate governance).

Taken to the extreme, one could buy one share of stock in a company and force it into transactions with another; since this would be hugely beneficial to that person, and since I don't see it happening in reality, I conclude that it's not how things work.

Purely speculating here in order to give you things to think about, since there were no comments; sorry if I'm totally wrong.

<comment><USER8> I assume there have to be limits to what a 51% stockholder can make a company do. Otherwise I could do this move:

1\. Find a company with $100 million in assets

2\. Buy 51% of that company for, say, $60 million

3\. Force the company to pay $100 million for, say, a nicely framed copy of my autograph.

The company dissolves, I pocket my $40 million, and the other 49% shareholders get annoyed. I assume this is why there are various complicated laws governing what companies can actually do, and why they're obliged to work on maximising shareholder returns rather than anything else.

In answer to the original question, though: No, of course you can't, what on Earth made you think you could?

<comment><USER7> Absolutely agreed that it can't be as simple as proposed.

I'm just saying that even if it _were_ that simple, well, you'd still have to own 51%.

<comment><USER8> Of course. The OP is apparently off his damn rocker.

</comment></comment></comment></comment></comment></comment><comment><USER9> In which way doing business with you will help them?</comment>


How to Turn Down Freelance Work Gracefully - <AUTHOR> http://www.christopherhawkins.com/2015/09/how-to-turn-down-freelance-work-gracefully/ <comment><USER2> Being mainly a web programmer, I get a lot of very bogus inquiries (like re- implementing multi-million dollar websites in a day) and requests from companies doing projects that look very very painful if not outright doomed. I tried several ways of letting these people down gently, and only one actually works in all cases - even though the turn-down email is often a bit of a lie, sorry to say.

The problem with the whole " _I don 't think this is a good fit_" angle is project owners will then try to convince you why it _should be_ an excellent fit, and they're often not wrong. If you advertise yourself as, say, a full- stack web app developer, it's difficult turning down someone asking you to help out on a generic web app.

The second thing I tried is reasoning with people by letting them know why _I personally_ think the project is a bad idea, or is not salvageable. Unsurprisingly, it's almost impossible to do this without insulting them, or without inviting responses like "well, then maybe you're just too incompetent for this".

So the only thing that actually works in my experience is: " _sorry, I 'm fully booked at the moment, so I can't take this on_". The beauty of this approach, even though I recognize it's morally questionable, is that it's an entirely realistic reason. In fact, it's the exact same response I send out when I am indeed fully booked. You leave that person behind with a neutral impression, and they still feel good about their project (which is important because I could be very wrong in my judgement of it).

<comment><USER3> Udo, that's not a bad approach, and I've used it myself. But I always felt bad for outright lying. At least by saying the project is a bad fit, I can say I'm being honest.

Now that I've said this, I'm sure I'll end telling someone "uh...I'm all booked up" before the week is out. :)

That said, IMO the word "No" is a full sentence, and when clients do as you describe, trying to forcefully argue why it _should_ be a good fit, I simply hold to my original rejection and don't participate in that discussion.

They may want very badly to initiate a game of tug-o-war, but unless I agree to pull on the other end of that rope, it's not happening. :)

I agree 100% with you about the pitfalls of giving a personal critique of why the project is a bad fit/poor idea/not salvageable. That's just bad news.

Also, those bogus inquiries you mention? OMG BANE OF A FREELANCERS EXISTENCE. Not a single week goes by where I don't have an interaction like this:

Small Biz Owner: "I have an app idea!"

Me: "Of course you do."

Small Biz Owner: "You have to sign an NDA before I'll tell you!"

Me: "Straight-up 'no'."

Small Biz Owner: "OK, then...my idea is 'Twitter, but for law enforcement officers'! And they have to pay for it! It's GUARANTEED to make millions!"

Me: "OK, we can build & launch it for $10k."

Small Biz Owner: "What?!? That...ten THOUSAND? That's preposterous!"

Me: "It's guaranteed to make millions, right?"

Small Biz Owner" "Yeah, but...can't you do it for equity?"

Me: "Get out of my office."

(note: the above exchange has been hyperbolized for comedic effect)

<comment><USER4> > But I always felt bad for outright lying.

You are always fully booked, even if your doing very little, because this project is not enough to make you move your current schedule around to accommodate it.

<comment><USER3> That's a pretty healthy way to look at it!

Did you have that outlook on day one, or did it take some number of years in the freelancing game to come around to that outlook?

<comment><USER4> Actually I don't freelance. This just came to me as I thought about it. So probably the answer is after some experience without realizing it.

It's not all that different than a new project as an employee, though you may have less control over your scheduling. If you hand me one project it takes all my time When you come back with another project and ask me if I'm busy the answer is yes, I am 100% dedicated to this project. Taking anything else on takes time away from that so I have to look at what I'm doing and weigh if its important enough to reduce the amount of work on the other project.

</comment></comment></comment></comment></comment><comment><USER5> The most important thing in my point of view is that you should always "OWN" the project and work like as your own. This is what I learned from my career

<comment><AUTHOR> I often promoted myself as a "CTO for hire" with that sort of attitude. Definitely helps.

<comment><USER3> "CTO for hire" sounds like pretty unforgiving work! It's a good thing you keep strong boundaries, it's wild out there.

<comment><AUTHOR> I actually got a lot better response, in that my opinion was valued higher. Compared to being considered a mere code monkey.

</comment></comment></comment></comment><comment><USER6> You think it's bad in tech, try putting 'legal' or 'attorney' into you profile.

"I need a TOS document for a social media website that is binding in all jurisdictions. 50$"

or..

"Our app needs a privacy policy that will protect us from lawsuit in China and Europe. 100$"

I don't turn them down anymore. Rather, I unless I have an ethical duty I don't respond. It always ends in an ugly argument.

<comment><USER3> You know, my first career aspiration was to be an attorney. Seriously.

And now I learn that I didn't even dodge a bullet by becoming a developer instead? Heartbreaking. :)

</comment></comment><comment><USER7> Two things:

1\. When I talk to someone about a new project, I do it in person or on the phone, not email. This is important.

2\. The first call is always to see if the work would be a good fit, and I'm clear about that. If the client or the project isn't a good fit, I just say so. "I'm not the best guy for this work right now, you might want to talk to so and so".

<comment><USER3> That's pretty reasonable. Although I didn't explicitly SAY so in the article (and I really should have), the "Listen to them" step is intended to be via phone or in-person.

Regarding #2, is it always clear to you on the spot if a project isn't a good fit? That's kind of awareness is rare, IME, and kudos to you for having it!

A lot of the freelancers that I've mentored need a bit of time & space to ponder and re-play the tape in their head, so to speak, before they can come to that conclusion.

<comment><USER7> I hadn't really thought about it, but yes, I generally know right away. I sometimes need a little time to assess the project's scope or technical detail, but personality wise, I know almost instantly if the client is going to be a problem.

Clues:

Does the client respect your time? Texting me at 11:00 PM to talk about your project isn't going to work. Bad. Do not let the client intrude like this. It will drive you mad.

Does the client want to defer payment because they're talking to a big customer who needs to sign on? That's utterly unrealistic. Bad. Clients who are about to sign big customers are well past the dev hiring stage. This speaks to poor business management skills.

Does the client have leave a wake of unreliable developers in his path? If so, tread carefully. One is ok- there are a lot of flakey devs out there. Two is not. I once had a guy ask me if I could asses his previous dev's work as support for a small claims case. Um. no.

Does the client want to offer equity instead of cash? This is almost always bad. People who know what they're doing generally have some cash to get started, and generally prefer to use it. You _might_ find a good client doing this, but it's very rare in my experience.

Does the client want to talk about entrepreneurship or does he have something to build? I get a lot of talkers. See the part above about respecting my time.

Has the client actually thought about what it is he wants?

Does the client have wildly misplaced sense of the technical scope of his project? Just say no.

Does the client come off as lacking in confidence? This isn't horrible, but they tend to be short lived, one off projects.

Can the client communicate clearly? This can be a real problem if they can't.

Does the client want you for crunch time because he planned poorly? <\- Reread the last 4 words of this sentence.

Does the client want you to work with some cheap overseas code because they blew half their budget on what they thought would be a good deal and don't realize they have to start over now?

The theme is people in over their heads. Sometimes it's just not going to work, and if you pay attention, you can tell pretty easily.

<comment><USER3> Right! Those are all perfect examples of the mental process that goes on when evaluating a client. I often manage to go through that process myself on the spot, but there are many other times when I don't or can't.

And more importantly, new freelancers rarely have the ability to make those evaluations on the fly.

I sense that this is not your first rodeo! :)

<comment><USER7> I've been at this a while ;)

But I think even new freelancers need to just trust their gut. If it sounds flakey, it generally is.

<comment><USER3> Speaking as someone who mentors a number of new freelancers, often the LAST thing you want them to do is trust their gut! :)

<comment><USER7> I might take for granted that I have an MBA, and worked quite a bit in other fields before I started freelancing. Might be entirely different for a younger person just starting out.

</comment></comment></comment></comment></comment></comment></comment><comment><USER8> Very nicely written, and a good template, too. If you use it too much, it could fall flat, but even a personalized sentence of "I really think that [disrupting the fish-taco industry by serving Gungans instead] is a great approach!", if you can be sincere, is another way to help the whole thing be remembered fondly by all involved.

<comment><USER3> Oh, man. I _dream_ of the day a client comes to me with a project as interesting as a Gungan-targeting fish-taco stand website!

Also, thanks for the compliment! That e-mail template took forever to iterate into what you see today. :)

</comment></comment><comment><USER9> I just respond to people and kindly tell them why I'm unable to accept the work. Most people can appreciate everyone having limited time and resources. Doesn't an e-mail template (even with modest customization) seem impersonal? Maybe I'm getting old.

<comment><USER3> nerdy, you're right that it's not the most personal approach. However, that's kind-of the point; rejecting work can sometimes result in the rejected party initiating a more heated exchange than is good for either party.

By maintaining the arms-length that an e-mail provides, it helps the freelancer (especially one who is new, uncertain of herself, or who hasn't learned to hold boundaries yet) to avoid getting sucked in to anything.

Plus, it provides a paper trail for later when the client comes begging back and the freelancer wonders "now, why did I turn this project down? Oooooh, right, they wanted to gnarfle the garthock, and that feels unethical."

So, while you're right in that it _could_ be handled more personally, my experience tells me that it's often better for all involved if it's just a weensy bit _less_ personal.

</comment></comment><comment><USER10> The template sounds very passive-aggressive, and the excessive length of the template makes the receiver feel like the freelancer has something to hide.

<comment><USER11> That's a strange way to look at it.

It shows gratitude, explains the decision in a straightforward manner, provides helpful referrals, and keeps the bridge intact.

Do you have another option?

<comment><USER10> A moody client could see it as insulting to their plans or project.

<comment><USER3> You're right, a moody client could. That said, I don't live my life or run my business walking on eggshells, concerned with what the moody might do or say or think. I don't recommend anyone else do so, either.

When I craft interactions, I do so using a "reasonable client" standard, not a "moody client" standard. I can bear no responsibility for whatever negative interpretation a moody client may choose to assign to my words.

My responsibility as a professional is to communicate in a clean, honest, and not-tone-deaf manner. Now, if I fail on any of those three points, that's on me, for certain. And when I deliver a piece of communication that comes up "green lights" on those three points, it's on the recipient if they have a negative emotional reaction.

<comment><USER10> Someone pasting that template to a client is doing the opposite of "honest" communication :)

<comment><USER3> I disagree. For whatever reason - the tech, the client, etc - the project is a bad fit. The e-mail says so as politely as possible, and moves on.

Looks like you & me are from different planets perspective-wise, my friend. :)

</comment></comment></comment></comment></comment></comment><comment><USER12> Why not outsource and pocket the difference?

<comment><USER13> Because part of the reason you might not want to take the job would be because of the people you'd have to work with.

<comment><USER3> Ding! Ding! Ding! We have a winner. Very astute, s73v3r.

Client projects can be more like marriages than most freelancer are aware of, or would want to admit if they were.</comment></comment></comment>


Benchmarking Usability and Performance of Multicore Languages [pdf] - <AUTHOR> http://arxiv.org/pdf/1302.2837v2.pdf

<comment><USER2> How popular are Cilk, TBB, and Chapel in industry?</comment>


How To Survive a Ground-Up Rewrite - <AUTHOR> http://onstartups.com/tabid/3339/bid/97052/Screw-You-Joel-Spolsky-We-re-Rewriting-It-From-Scratch.aspx <comment><USER2> The trick to making a rewrite work is to only rewrite what you know how to rewrite. What I mean by that is a lot of people will be working on a project and will at some point say to themself "This project is really hard, I can't get anything done, I have no idea what is going on. My only solution is to do a complete code rewrite". If this is your mindset going into a large refactor, you are bound to either fail, or end up with a system that is just as badly composed as it was before.

On the other hand, if you're saying to yourself "This code really sucks, they wrote their own complex CSV parser, I can rewrite this to use the CSV library in the standard lib" and things like that, no matter how big the task may seem, it'll work out in the end.

<comment><USER3> That's a good point. It's actually hard for me to recognise when it is bad code and when I am just feeling NIH syndrome.

<comment><USER4> The important thing to realize is that it's _all_ bad code.

Our job as engineers is to prevent those criminal routines from murdering one another by carefully confining them into their prison modules and never letting them get too rowdy.

I am the Code Warden, and within these bytes my word is law!

</comment></comment></comment><comment><USER5> One thing to pay attention to is the never-quite-done migration. For example, i worked on a deep refactoring (near rewrite) of a room reservation system where the data model needed restructuring for faster querying (but with identical data). The migration was done by making the old data model automatically write to the new from triggers, and then migrating the read code to point to the new. Ofcourse, once the performance bottleneck from the read code was solved, suddenly migrating the write code seemed way less important. Higher priorities intervened, and the code is still in a halfway state two years down the road.

Another danger i ran across were moving goal posts. Long rewrites will typically be interrupted to extend the old system with new features, which increase the effort to rewrite.

<comment><USER6> I don't know the specifics (obviously) but this reads like creating a better index on an existing table.

The gross part is (I'm guessing, obviously) that now each write to this data store incurs an additional write and some cpu load on the data store servers (you mentioned it was done via a trigger). But now the value of finishing the migration that you started is just recovering this extra write and cpu.

<comment><USER7> And as an aside I'd _strongly_ advise against using triggers in almost all cases. They tend to result in systems where things happen by "magic" rather than in well understood ways. If you're tempted to write a trigger, use a stored procedure instead and invoke it explicitly.

</comment></comment></comment><comment><USER8> There is one common mistake that teams tend to make when deciding on a rewrite: committing to the rewrite too early.

Here's some ways to do a rewrite well:

Set up the rewrite as an alternate, competing product and let the two compete in the marketplace. This requires having the resources to support developing two such products at the same time using separate teams for each, which is not something many companies can afford. The advantage to doing it this way is that it gives the rewrite time to mature before it's fully replaced the old system. What most people tend to not realize is that mature software with fundamental flaws can often be superior to immature software on a better foundation. Real-world use is orders of magnitude more effective as a QA process than any sort of in-house testing, and always well be, products that have been tried by fire and made the cut should always be respected no matter how horrible their underlying code is.

If you look at a lot of the major switchovers in software you'll see this sort of trend fairly often. For example, consumer Windows took several generations and almost an entire decade to fully switch over to the NT core.

Another good way is to rewrite piece-wise, in place (refactoring). There are lots of different ways to do this regardless of architecture, ultimately you're essentially creating a bubble of new code that grows and grows until it completely replaces all the old code. The advantage of this is that it takes much less effort than a full rewrite and you can do it incrementally and slowly. Often it's easier to mature each new component in isolation than to try to mature an entire new product.

And, of course, there's the hybrid approach. Work component-wise in an "add + deprecate" fashion. Create the new component, have it work in parallel along with the old component, and then deprecate the old component and work toward moving client code to the new component.

<comment><USER9> > This requires having the resources to support developing two such products > at the same time using separate teams for each, which is not something many > companies can afford.

This is definitely the ideal situation, but as you said most companies do not have the resources to greenfield a separate project. Additionally convincing the higher-ups that its worth it is a difficult task.

> Another good way is to rewrite piece-wise, in place (refactoring). There are > lots of different ways to do this regardless of architecture, ultimately > you're essentially creating a bubble of new code that grows and grows until > it completely replaces all the old code.

> Work component-wise in an "add + deprecate" fashion.

Everywhere that I have worked this has been the route we've taken. We isolated the old behavior until we were able to fully ween clients off the product (or perform a data conversion and completely use the new code).

<comment><USER10> _most companies do not have the resources to greenfield a separate project_

Well no, sometimes they have the resources but don't want to spend them, then they end up spending more overall because they botch the replacement.

</comment></comment></comment><comment><USER11> Having been the person responsible for migrating data from an old system to a shiny new one, I wish I had read this a few years ago. However, since I will be embarking on rewrite from scratch project in a couple of weeks at a new position, I am glad I read this now. Migrating data is hard and should be given the same level of importance as the back-end or front-end development. I remember vividly the cycle of "sleeping" with my laptop next to me churning away over night, waking up every hour to check the process and having it fail at odd times. As the author said, make your migration process repeatable, testable and logged. Good luck.

</comment><comment><USER12> Over the years, I've noticed that many programmers who want to re-write, just aren't comfortable modifying other people's code, or it wasn't written in their favorite language. So, they are critical of the code and urge for a re- write. These people generally make bad programmers. If you have people on your staff that want to re-write this program, or switch to this framework (because it's what they are used to), then watch out. That's a bad sign.

Competent programmers can maintain other people's code, those who cannot want to re-write everything. Train wreck in progress. Run from these people, or fire them if you're in a position to do so.

<comment><USER13> I've come to a situation in the past, where there would be endless lines upon lines of PHP code intermixed with random static functions and HTML markup.

I'm talking 40, 2000 LoC files that all called the database whenever they felt like it, all echoed out data and modifed each other in wierd ways.

I spent about two weeks trying to untangle the mess and threw the towerl in at day 15. We just rewrote it using a PHP framework that not only let us query the database using a sane ORM, but also gave the project STRUCTURE and added mantainability value.

Sometimes a rewrite is the best cure. ;)

</comment></comment><comment><USER7> _We have a pattern we call shrink ray. It's a graph of how much the old system is still in place._

Immediately brought to mind the first large shop I worked in out of school (about 1992) where they had a big chart on one wall titled "Punch Card Elimination" with a downward trending line. I was actually shocked that a large, multinational manufacturer was using punch cards for anything, particularly when my project involved building cutting-edge (at the time) client/server systems that included wireless handheld devices on the client side. My introduction to the counterintuitive world of enterprise IT: you will often see opposite ends of the technology spectrum in use, simply because the value proposition of eliminating the old was never high enough before.

</comment><comment><USER14> > If you really are committed to just rewriting the entire thing from scratch, > I don't know what to tell you.

What about when what you're rewriting is basically an intensely-overgrown prototype that was never meant to run in production in the first place?

You're _supposed_ to completely rewrite those, aren't you?

<comment><USER15> It ceased to be a prototype when it went into production. No dissembling can change that fact at that point, all the caveats of how and what you can rewrite take effect whether you like it or not.

</comment></comment><comment><USER16> Data migration becomes a lot easier the closer to "raw" data you store. The farther away you are, the tricker it will be to write those migration scrips. And, if what you're storing is rolled-up enough, you may not even have the information you want/need any more. Note that the source data doesn't have to be what you're serving queries from; it could be an archive with batch scripts to re-process that's only dusted off in case of disaster/migration.

</comment><comment><USER17> This was great. I don't really code but I have been trying to migrate handcoded websites to Wordpress since dinosaurs ruled the earth. I still haven't figured out what I need to do to pull that off satisfactorily. Copying pages requires me to then strip out html. I feel like I have never wrapped my brain around getting the new navigation to really work even though navigation problems (with an overly long and growing list of pages) was one reason for the migration.

I am wondering what sorts of info I need to go looking for to get this finished. I have thought about it before, contemplated asking around, and realized I didn't even really know what questions I needed to ask.

I also found this, which struck me as helpful but not quite what I wanted to read about: [https://www.linkedin.com/today/post/article/20121226171356-6...](https://www.linkedin.com/today/post/article/20121226171356-658789-doubtliers- dangers-learning-from-the-exceptional?trk=mp-reader-card&_mSplash=1)

<comment><USER9> I've always just dumped the Wordpress database using the export tool. After I have the data I rewrote the template.

Most of the time the Wordpress template is so wonky that its better to just rewrite it (especially if you're migrating away from Wordpress in the first place).

<comment><USER17> No, migrating _to_ WordPress. But thanks for replying.

</comment></comment></comment><comment><USER18> A lot of this rings (painfully) true.

In the past, we used subsets of data to test our migration tool. Always. ALWAYS, there was something bizarre in the the excluded subset that caused the migration to break.

<comment><USER6> Additionally, if your data is highly graph-structured and not trivially shard- able, merely selecting a valid subset can be complicated.

</comment></comment><comment><USER19> If you want more insight into the "Unhappy Rewrite" here's some of my lessons learned, though I've learned a lot more in the 2+ years since I wrote it. [http://dev.hubspot.com/blog/bid/58082/Leads-API-Lessons- Lear...](http://dev.hubspot.com/blog/bid/58082/Leads-API-Lessons-Learned)

</comment><comment><USER20> Rewrite are bad, true. But sometimes unavoidable. Really.

When you have a PHP project where there's a mix of procedural function (the code is at the top and the html at the bottom, so it's easy to split right ? Hum and those includes, what do they do exactly ?), ... classes (We used classes to put our functions in so we do OOP, right ? Err... no) and parts of a heavily customized Wordpress. Plus two-three half started in-code reorg/rewrite that went nowhere because the devs jumped the ship.

You're told you have to I18N the whole spaghetti meatball soup. You try a few weeks and then see you're going nowhere and start to realize that you're doomed to a rewrite. Oh, and you're a team of two. Sometimes you really have to. And migrating data .... such a pain in the ass ! Test encoding I'm looking at you ! At of hand int code (would not call that enum) I'm looking at you too.

But. It's not always the case. And right now I'm starting the reorganize and refactoring a project that was already in a descent shape. And it's much more interesting, less straining and business owner have more visibility on the work done and are happier.

So yes, whenever you can, incremental rewrite is the way to go. But never say never. There are contexts where doing a rewrite is just plain necessary because the code is in such a bad shape you just can't add any feature anymore.

<comment><USER21> Voted you up because you basically just described the situation I'm in now.

While successfully in production, the web servers were crashing multiple times a day (still Apache-modphp). So, I started to work on the PHP upgrade from 4-5 to get onto php-fpm + Nginx to stabilize the site. Lo and behold, the legacy db abstraction code (poor man's ORM) was not playing well with later PHP releases so I started down the path to patch what I could.

I successfully upgraded PHP, fixed a few of their outstanding issues, but I was weeks into this project and had not completed any of the new feature sets on my plate yet. Looking into the horizon I imagined months of wrestling with legacy code and the deeper I went (there was a SOAP layer I hadn't even looked at yet, they wanted REST/JSON) the more worried I became.

We evaluated a bunch of options and opted for a re-write. We're still deep into it but there is light at the end of the tunnel and I'm pretty sure it will be worth it in the end.

</comment></comment><comment><USER22> Incrementalism is sometimes called Burkean or Oakeshottian conservatism in political circles.

The analogy used is of a ship at sea. Replacing the ship in a single step, while it is underway, is impossible. Replacing too many planks at once is foolhardy. (I thought the analogy was Oakeshott's but I can't find the original source).

So instead you replace the planks one at a time. Yes, this is tremendously slow, wasteful and frustrating. But when the ship is a system on which you utterly rely, there is no other safe path.

Hayek expanded on the problems of pure rationalism more generally; it's a trap we as a profession tend to fall into. We substitute _our_ preferences (for a tidy, orderly system) for an appraisal of actual reality. Real systems have accumulated complexity that cannot be wished away. Worse: the complexity is often essential and not merely accidental.

</comment><comment><USER23> Thank God I've never HAD to do a complete re-write of anything.

What the author describes sounds like a complete nightmare.

On the projects I've worked on, I would like to think that a rewrite will not be needed.

If it does, it will be because we've now understood the problem space so well that we can start from scratch and avoid all the 'pivots' that happened in the original code base.

</comment><comment><USER24> We fought off a complete re-write for a critical component in one of our products for many months due to knowing the amount of effort/complexity required, however in the end it was not the best decision to delay. The decision was to work on product features rather than fix the known scalability issues as we believed we still had enough headroom. We grew faster than expected and ended up in a position where we had exhausted most of our software optimisation options, database tweaks and even hardware options with upgrading to SSD's, RAM etc. In the end the component was re-written around the clock by a few engineers to leverage redis and msmq in a couple of months and it solved all our problems thanfully - a very stressful time. Lesson learnt. It was a difficult call when managing a limited set of resources deciding where to focus the attention.

</comment><comment><USER25> To all the people telling stories about rewrites they have been involved in, I am curious if the code you were rewriting had tests?

If so, do you rewrite those tests? Or do you keep them, no matter how ugly they are, because new code still has to pass all the old tests?

<comment><USER26> I've done a few rewrites, in all cases they were projects that were written entirely by junior developers (company took a while to learn the costs of cheap developers) and with absolutely no tests whatsoever.

If you're rewriting a project then you're probably going to have to bin the unit tests. If you're rewriting it's because you want to make some drastic structural changes and unit tests are just too tightly coupled. Integation tests on the other hand can be an absolute godsend, you can swap out the entire stack and they'll still provide just as much value as before.

</comment></comment><comment><USER27> If you are starting with some new language or technology that you are not very fluent at, and months later you land in that same project with a wider experience in the language, would you rewrite that code?

</comment><comment><USER28> I dread to think how many complete rewrites have never seen the light of day.

Get your data source in order, then refactor in small achievable projects from there. Better for motivation and better for end users.

</comment><comment><USER29> If you're reading about surviving a ground-up rewrite when you're supposed to be _doing_ a ground up rewrite, you're doing it wrong. Read about design patterns, focus on your core business, and stop trying to focus on the "five things to make your rewrite successful".

</comment><comment><USER30> Flagging for sensational, link-baity title.

edit: unflagged after modifications

<comment><USER31> Ok, hadn't thought of that, but see your point.

I think the content is really good, so title changed -- don't think the author will mind (he had two alternate titles for the original post).

<comment><AUTHOR> I updated the HN title as well. thx

<comment><USER30> Fine, fine....I'll unflag :)

Thanks for taking the time to update it.

</comment></comment></comment></comment><comment><USER32> A ground-up rewrite is a sign that things have been done wrong. If your software and infrastructure are modular, you can rewrite pieces without tearing down the whole system.

Ground-up rewrites are occasionally necessary, always difficult, and often hideously political. There's no binary right answer on this question. Sometimes it's the only answer, but that's a terrible place to be.

My shortest job tenure ever (108 days in the winter of 2011-12) was in a company where I was brought in to fix the cultural and social collapse that had followed a badly-thought-out "rearchitecture" led by a 25-year-old CTO's protege who (a) was on his first real job, having burned out of college and landed in retail, and (b) didn't know what the fuck he was doing. I'm still deciding whether I should share that story, in full, with the world.

<comment><USER20> You should. Cathartic. Just don't be too specific and don't name names.

<comment><USER32> I've given the generally relevant pieces on my blog, with varying degrees of cover. However, naming the specific company is what I've been debating over the past year. Thus far, I've chosen not to do it.

The reason I'm hesitant is that good engineers (who don't deserve it) might suffer more than the management (which does). I learned the hard way that whistleblowing often hurts the more vulnerable good guys first.

It's a startup of about 100 people. I could demolish this company's reputation with a few keystrokes, but the executives (who deserve it) would probably be just fine. It's the engineers who'd suffer-- having a disgraced company on their resumes-- and I hate that that's the case, but such is life.

What happened is that there was a "War of Three VP/Eng's". There was an unofficial VP/Eng (call him Dan) who did a really good job. However, with _four_ product pivots in three years (the CEO was an idiot, but kept being able to raise capital because of family connections) there were legacy and code-quality issues. Top management threw Dan (even though he was a true 2.0+ engineer) under the bus, and the CTO pulled in a 25-year-old protege (call him Tony) who was fucking _terrible_. He knew basic programming, but this was his first white-collar job; story was that he'd burned out of college and was in retail before the CTO "rediscovered" him. Tony's quite intelligent and he can talk with the best of them, but he's technically mediocre and a genuine psychopath.

Dan had engineer support; Tony had management support but engineers disliked him because he was an obvious case of an incompetent protege. Tony's "rearchitecture" fucked the company badly. I was brought in as a 3rd VP/Eng (and actually promised the title, at the 6-month mark) to resolve it.

There were good engineers on both the old and new teams, and resolving the technical disagreements was easy. But in March 2012 it was clear that my real reason for being hired into the company was to give management a credible excuse to toss away half of the old team. I either had to sign a bunch of documentation that'd be used to justify Pincus-type moves against 11 of my colleagues, or give up my contention for the VP/Eng role since (apparently) that's just want managers have to do. I chose the latter-- really didn't want to be managerial in such a toxic company-- but Tony convinced management that if I was throwing in the towel for VP/Eng, I should be shown out entirely.

This wasn't only out of ethical altruism. I did the right thing for good reasons, but I also had no choice. If I signed the papers and gotten a bunch of undeserving engineers fired (or at least put through humiliating PIPs that would probably involve equity clawbacks) then I'd lose credibility and Tony would win. Tony (angling for CTO once the existing one burned out, which he did around the time I left) teamed up with management to set it up so that I would be the one getting dirty in the Pincus move. He could be the good guy CTO and I'd be the bad guy VP/Eng, the rubber glove used for evil work and thrown away. It'd be career suicide because no engineer would work with me after that.

It wasn't the rewrite that killed that company. The rearchitecture was a symptom of psychopathic management and a really horrible CTO-protege-cum- unofficial-VP-Eng. Still, it makes me extremely skeptical every time I interview with a company and hear, "We're throwing out all the old code" because I know how politically fucked-up that often is.</comment></comment></comment>