Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: What did you learn the hard way?
241 points by donkoz_ab 5 months ago | hide | past | web | favorite | 313 comments



Worse is better

Or, to put it a bit more optimistically - usable now is better than perfect later. I've found that, if I disappear behind a curtain and spend a long time trying to make something really well-polished and feature rich, that just gives the user a lot of time to build up their expectations, and also to get frustrated by the delay. By the time you ship, they'll be actively looking for ways to find fault. When I YAGNI my way into a 80% or 90% solution and turn it around quickly, though, more often than not, they'll initially just be impressed at how quickly I was able to help them. Requests for changes will come, but they're generally small, so it's usually relatively easy to turn those around quickly as well.


> Or, to put it a bit more optimistically - usable now is better than perfect later.

This is the same principle of Minimum Viable Product. In MVP you launch the first version of your product with sufficient features, but not all, to early adopters so that you can get feedback from them.

MVP and the "Build Measure Learn" feedback loop, gives you important tools to leverage your product.


Yes, absolutely.

The language around MVPs tends to be couched in terms that pretty directly implies designing a product for external customers, though, so it tends to be harder to internalize for people who are doing in-house work, and even people who are somewhat removed from the product design process, such as many junior developers. What I've seen in is that it's common for people who are eager to impress their clients or teammates to want to say "yes" to everything. So, even if they like the idea of building MVPs in principle, in practice, their MVPs end up being pretty maximal.

Which is why I think there's value in framing the principle in terms of human-human relationships, and not just in terms of stuff like finding product-market fit. It's a more personal, relatable way of thinking about it.

The magic insight for me was when I finally realized that I could give people less than what they asked for, and they'd actually be happier than if I tried to give them everything they wanted.


> The magic insight for me was when I finally realized that I could give people less than what they asked for, and they'd actually be happier than if I tried to give them everything they wanted.

I consider that a form of art/skill that we learn through multiple experiences (and errors too).

I work closely with developers and I observed that the majority try to implement always the perfect solution that normally comes with a high cost and time to develop. Clients normally prefer a solution that is quicker to implement but that responds to 80% of what he wants.


Thank you, I think there’s generally some perfectionism on the technical side and things that are easier to address later that don’t require delays


What does YAGNI stand for?


You ain't gonna need it. The idea is that developers tend to think, "what if they need $x too? I'll just add it." Or, worse, they over gerneralize their solution. "I needed to rank 3 cart items by price, so I developed a way to rate an unbounded iterable of any type."


Great question!

1. As a younger man I done a business deal on a handshake and then got ripped off after putting in a year of work - always get it in writing!

2. Companies are not loyal to people, people may be loyal to people, but never think an organisation will be

3. I ran up some debt as a student until I figured out personal finances, which boils down to; increase income, reduce expenditure, save and invest the rest, avoid liabilities as far as possible (e.g. do you really need a car on finance)

4. Avoid getting drunk! Get tipsy, not drunk

5. You'll always get over a breakup, no matter how difficult it seems at the time

6. Sometimes you have to leave a group of friends, a partner, or even family behind, to grow into who you want to be

7. Don't wait for other people to help you in your career or life, any help you get it a bonus and be grateful, but you're the captain of the ship - push yourself forward

8. Be yourself

9. You're better and more capable than you think

10. Tell those you care about you how you feel, you never know when you might lose that chance

We live and learn!


> 3. I ran up some debt as a student until I figured out personal finances, which boils down to; increase income, reduce expenditure, save and invest the rest, avoid liabilities as far as possible

I agree with but I'll be careful. When you are young (20-30), you are better off investing the money in yourself. So I say do spend reasonably but on things that might grow you. I learned the hard way that renting an expensive duplex with a garden did wonders to my mood and productivity. You might spend more but you get in returns.

Also don't be a cheap jerk with yourself. Nowadays, I value experiences more than gadgets (like I'd go on a trip to a close city than put 12 hundreds on an iphone) but do these things. When you are old, you can still do them but being young was different. Even when in budget.

So I say be careful but don't be greedy and while interest can pile up on money you save, that trip you have done or that money you spent to go to a conference might pay up x1000.


Fully agree, great point


> 10. Tell those you care about you how you feel, you never know when you might lose that chance

This one very much! Never skip an opportunity to tell people they matter to you. Time and life is very fleeting


Indeed!


My "life lesson" happened when I was about 18. I was running a game server hosting company, everything was organic and I took it from 1 physical 1U server which I owned and co-located to about 10 servers, before I made a catastrophic mistake.

Anyway, I reached a point where my colocation fees were about 1.2k per month, I had been with my supplier from the very beginning, so from 1 server... At the peak I was grossing about 4-5k per month but generally monthly lows were about 2k, and everything had been organic, so I had no debts, and was just pumping everything back into the business. What happened was my provider offered to sell me his business for about 12k. You gotta keep in mind I was 18 at this time.

I took out a loan (my Dad was guarantor) and purchased his business. The aim was to, acquire his contracts for colocation with the datacenter and I was expecting to inherit an operating business which was turning in about 2-3k per month in normal "web hosting" businesses. All the sites were spread across about 30 servers, all of them really really old.

So, things went sour literally from day one. It turns out that he either fudged all of the sites on the billing software or they decided to just exodus on day one of me taking over. I ended up going from having healthy profit each month to operating at a deficit. Long story short it destroyed my business and nearly caused me to lose my degree at Uni from the stress of hacking away trying to save a failing business and continue with my degree.

Anyway, what did I learn?

Due diligence. Don't rush things. Don't trust people. You can really summarise this as a life lesson where I essentially ended up gifting someone 12k for "my patronage". It quickly became apparent I was his only customer and my success kept him just about ticking over, so I ended up "buying myself". I was pretty bitter about it for a long time, but I think I was just angry at myself for being so childishly naive to think someone I trusted wouldn't screw me over cause it suited him.


> So, things went sour literally from day one. It turns out that he either fudged all of the sites on the billing software or they decided to just exodus on day one of me taking over.

I don't really understand the issue. Didn't you buy a bunch of prepaid servers and server administration software for just 12k?


Nah, I already had all of the infrastructure and technology. I can't even remember the software I used for game hosting[1] , but they were the largest paid technology that provided this kind of thing at the time.

I bought him with the intention of moving into "web hosting", since at that time my business was entirely focused ONLY on providing services such as "teamspeak", "battlefield 2" hosting, GMod, Call of Duty etc, I thought I needed to diversify, because when I started "1 slot" was about 1.50-2.00 per user. Then it just started being cut throat and I ended up overselling to keep up with the competition's lower prices.

I ended up inheritting bills I could not pay at the datacenter. Old servers that weren't worth the scrap metal and obviously a loan... I started to struggle to cover the loan and ran into huge/unbearable stress from my mistakes. It was just a series of rushed decisions, head down, plough through a purchase because I thought it would help me grow, when it was the complete opposite.

I can't even remember what the billing software was, but it was something off the shelf... and was for an industry (web hosting) I really didn't know much about. Not that that mattered since I never had to support any of the customers...

Update: [1]: I researched it for my curiosity.. It was called TCAdmin. Was pretty critical to my early success, without it I wouldn't have had a clue what I was doing.


Wow that's quite the story, are you still in the hosting business?


Yes and no...

Now I help run a vacation rental/holiday rental software company -- so instead we help host people. We provide management/distribution for agencies. The original product was to just focus on a web marketing front-end software (so I suppose a little bit of "hosting" through our SaaS product). I started that business a few years after the above story.


Life, by default, is suffering.

The surprise is not the fact that there is suffering around the world, but how we managed to achieve the level of prolonged peaceful co-existence that we have today.

We should act in such a way that suffering or chaos is reduced---however small such reduction may be.

Suppose you had a choice between watching T.V. and washing the dishes. Watching T.V. means, perhaps, that your spouse will need to do the dishes. You can reduce overall suffering by choosing to do the dishes instead of watching T.V.

Given that the default path of most processes is chaos, we should always act in a way that prevents this.


Speaking of dishwashing and life lessons. When I was in college (20 years ago) and sharing an apartment with 3 colleagues, the guys were leaving their dishes unwashed in the kitchen sink. Initially I washed my own dishes after finising a meal, only to find out the colleagues happily used my clean dishes then let them dirty in the sink. I realized I'm washing them twice: once when picking them dirty from the sink, washing them so I can eat and secondly after I finished eating. So I optimized: only washed them once like all folks do: before eating.

Lesson: when in Rome, do like the Romans.

And P.S: no, you can't argue with the Romans and make 'em wash their dishes after eating.


Aww. And I though this was going to be a wonderful story about how you decided that, since you were there, you’d wash everyone’s dishes and before long you became an inspiration to your housemates that in time became a race to out-do each other with increasingly outlandish acts of kindness.

When do we get _that_ story.


no but you can do like the Romans and break all their plates.


I just kept mine in my room


Prosit!


That's a cool example. I totally agree with your underlying premise. It's about playing the long game, and working to build a life enriching enough that it's worthwhile in the face of suffering, rather than playing short games that attempt to weasel away from the places suffering might be.

One of the most interesting things to me in the past few years is that this core idea seems to exist in hundreds of different places and forms, and every culture and person has a slightly different set of abstractions for it. But there's an awesome universality to it.

A lot of times the people I know who live by the bible and the people I know who live by stoic principles are building roads to the same place, each thinking they're on a journey that only their path can provide.


This reminds me of a bit in one of Bill Burr's standup shows, where he says that if a woman wants to make her boyfriend/husband happy, she should make him a sandwich, hand him a beer, and then leave him to whatever he was doing before you came in.

I think a lot of people forget about the random act of kindness, and how it can go a long way towards making people much happier. It can be as simple as stopping to let someone cross the road, making your partner a sandwich, tidying the house, or even leaving a nice reply to a tweet.


It is really. The older you get the more you’ll observe or hear about people dying or having serious medical issues. Then there are the people getting raped or kidnapped or beaten up randomly... At this point i’m happy I wasn’t born in the middle of a war, but I’m hopping none of that will happen to me.


The other two marks of existence, emptiness and interconnectedness, are also pretty useful.


I act quite in the opposite way. Too much thinking hurts the pleasure of living in the present. If I wash the dishes and not my spouse is because in the present makes more sense for me to wash it, that's all.


Completely agree, life isn't suffering unless your perspective is that because I or someone else must wash dishes, one of us must suffer.


I learned the value of patience and moving slowly through many mistakes where I moved too quickly.

In the startup world, the default is to move as fast as you can, and it's often easy to mistake a maxim for product development as a maxim for life. The problem is that it's not good advice for many things in life. Examples:

1. Shopping. Especially big ticket items like cars and places to live. Urgency favors the seller because you don't do diligence well and you don't shop around for better deals when you're in a rush.

2. In a similar vein, negotiating. I got screwed on deals because I felt too much in a hurry to bring up issues I had. The important point here is that I could afford to wait, but I didn't want to, and that worked against me.

3. Job searching. Taking the time to line up offers will pay returns on your salary and happiness, even if in the moment you really just want the job search over with.

4. Managing people. I've had people who work for me ask "how am I doing", and in my urge to avoid the awkwardness of the conversation, I would answer some variation of "fine" even if in my mind I knew there were problems. The problem is that answers like those are very hard to take back once you give them (and especially hard to take back during performance reviews). So instead of trying to get rid of the problem fast, I eventually learned to step back and say "let me think about this, and let's talk about it tomorrow."

5. Relationships. If your goal is to find a life partner, you have a lot of diligence to do. Enjoy the honeymoon period, but don't mistake that for deeper compatibility. That comes from spending time together and requires getting through rough patches together as well.

6. Professional relationships too: on the one hand, you can't be passive in developing your professional relationships, but you can't rush them either. Respect is earned over time, so you have to play the long game.

When it comes to building products, then yeah, moving fast is an asset, but many things in life and career are marathons, not sprints, and you're just hurting your future self if you outrun your own pace.


1. Shopping. Especially big ticket items like cars and places to live. Urgency favors the buyer because you don't do diligence well and you don't shop around for better deals when you're in a rush.

I assume you mean urgency favors the seller (unless you're urgently trying to sell, of course).

Or, in general: (s)he who has the greater time constraint has the disadvantage.


Good catch, thanks!


If the ship is sinking, don't bail harder, get your butt onto a ship that _isn't_ sinking ASAP. It's much better for your mental health, and it's the logical free market thing to do....reallocating resources to more effective companies.


It's shocking how tightly scoped one's mindset gets in these situations. The hull of the boat so easily becomes the bounds of the world. Every time I jump ship, I'm shocked by how quickly and painlessly the things I once thought were life-or-death fall away.


Doing this saved my life. I went from a complete dead end to a very successful year overnight. Well over the year since I bailed and jumped on a good ship.


A few things:

1) People's words are like deep water. Pay careful attention to what people say--it's profoundly revealing (more than they realize). By listening, I've been able to identify people who intended to trouble me in some way. It's incredible, they just can't keep it inside even when pretending to be nice.

2) Actions speak louder than words (given #1, this is really saying something). Don't look for people to be who you want them to be; wait long enough for them to show themselves. And they will. ETA: You may occasionally encounter someone who is able to fool you for extended periods of time, like years. But even then they often leave useful clues as to their agenda.

3) If the product is free, the product is me!


Could you expound on (1). I have been toyed around by my former Co founder who sweet talked me into believing him. I still think I suck at understanding human behaviour and nature. Are there any telling signs that help you?


Most often I've seen it in the form of jokes. You're in the final stretches of negotiating a deal with someone you consider a friend and they make some joke about how now they're going to stop showing up to work. Red flag. You might think "why would someone say something like that?" I was negotiating a deal where the other party was guaranteed 7.5MM over the next 5 years. They made the joke because they thought they already had me wrapped up in the deal. I walked away based on that joke alone. The logic is that at some level they're trying to prepare you for what you're in for. Everyone's armor has chinks. As the deal gets closer to being done you see the real person on the other side of the table.

Another red flag is if you put something in email and they call you to respond on the phone. I treat email almost entirely defensively now. It's simply a record of things I'm comfortable being read aloud in court and a memorialization of what was agreed to in conversation. If I'm not comfortable with it being read in court it's discussed on the phone or in person.


First, an example:

Decades ago, a friend of mine at the time (female) met a guy. She was really beautiful and a genuinely nice person, so lots of guys would ask her out. She told me about a date with this one guy, and he didn't call her again. Even though she hid some of the details, I was able to ascertain the general contours of what happened and was able to figure out his agenda. How? Because of something he said to her.

She told me that he picked her up and they went out for diner, but when he dropped her off at home he became concerned about parking, wondering if a garbage truck might pin him in the next morning. At the time, she thought nothing of that. But she explained to me that she hadn't planned for him to stay overnight.

But what he said was a pretty BIG siren. It was obvious he already intended to stay the night, otherwise why would parking the next morning matter? My guess is that if she had known his agenda she would have viewed him differently and maybe been more wary.

End of story? He never called her again. She was mystified as to why. I thought: well of course he didn't call--got what he wanted!

In response to your question, wouldn't say that there are telling signs, it's more about the content of what people say as the story above illustrates.

A few other loose thoughts about understanding people:

1) It's dangerous to assume that other people think as you do. In fact, people come from a range of contexts and backgrounds which are not obvious when you meet them. They are perfectly happy to smile and nod with you while completely disagreeing.

2) People are heavily self-interested. Unless it's your mother (and sometimes even then), expect people to look out for themselves first. Someone making a show of sacrificing for you? Hmm.

3) People enjoy feeling superior to others, even in very minor things. Shrewd people know this and use that information to their advantage. (Not advising this, just saying what people do).

4) Chinese proverb: the dog that can bite doesn't bark. When people have the capability to get you, they don't have to talk about it--they do it. The big talkers generally don't have the ability (though there is the occasional outlier).

You may want to look into some books on this topic. A useful one is 48 Laws of Power by Robert Greene. Not saying that you should follow his advice, but it is useful in understanding games that people play at work.

Book link (not affiliate) - https://amzn.to/2dzBqXD


Telling signs include how they react to people that aren't telling them what they want to hear, this could be a supervisor, waiter, colleague, IT support, etc. You may need to adjust for local culture (i.e. Boston vs. SV),


Input vs. Output. Does the person talk about how they're going to act more than they actually act? One of the biggest tells for me.


I'm not sure direct advise such as what you find in books, articles or some courses actually helps all that much - not by itself. I think such advise targets the wrong parts of the brain, the ones for conscious thinking.

However, I think by far the most of "people understanding" happens in the not consciously accessible parts. So I think that the best way simply is... experience and time. What really helps is if you actually want to understand other people, if you are curious. If it's like "work", like studying for an exam, something you were told is necessary but deep inside you'd rather do something else, your (unconscious) brain won't cooperate.

There's a lot of circuitry taking input from the visual and also from the auditory areas of the brain that do a lot of subconscious processing, and they "train themselves". Book knowledge is of little help, it can aid indirectly at most. The good news is, pretty much every one of us already has quite high abilities in this area, the main problem may actually be that you suppress what your deeper brain is trying to tell you. You probably already have those magical people-understanding abilities in a pretty advanced form!

Deep inside I knew perfectly well I was being screwed over during my first trip to the US in one of those New York electronics stores - but I suppressed it and spent a huge amount (for a poor Ex-East German student) on electronics I didn't need and that were 500% overpriced :) Just make sure that your losses are small, like mine (I think I gained a lot more during that simple encounter than I lost), don't try to avoid it or fret over it when you make such kinds of mistakes due to not understanding other people (or suppressing it without realizing it). Imagine that you just paid tuition for the best university there is to understand other humans.

Another issue related to and responsible for suppressing those instincts is that actually acting on them often is more work (at the immediate point in time) than just going with the flow (and suffering later). Example in your case, but same with any relationship: You actually know it's over, and much later, in retrospect, you will know that you already knew, but actually taking the step and ending it right now is really hard. But here again no external advice to your conscious self can be of much help. Especially since only you have all the information about the specific information, so asking others who don't have all that context for advise seems to me to be a form of procrastination - you did something (ask others) so that feels good, but it should be you yourself who makes that decision since only you know what's going on and the people involved.


Personal finance.

I never took a budgeting class in high school and college, my parents lived paycheck to paycheck (still do), when I earned my first internship I was making over $1000 per pay period, that was a lot of money for someone who had only worked part time jobs for $10/hr before hand.

By the time I got my second internship I earned more than my mother, who was the breadwinner. Once I was converted to full time I had more money than I knew what to do with. It took a few months to stop making stupid purchases, learn how to budget, save, and invest. Painful lesson.


Congrats on it taking just a few months. Some of us spend years in the "lifestyle" hole before waking up and getting a grip on finances.


I eat at restaurants everyday. I know I shouldn’t but it’s hard to change lifestyle...


You shouldn't if it has negative financial or medical effects on you. I eat out exclusively, and do so for less than the cost of groceries and with fantastic effects on my health, and I'm doing so in a very high cost of living city, too.


Can you elaborate on this? I'd be very curious to see how you're managing that, unless your cost of groceries prior includes bulk shopping at Whole Foods.


Sure. My food cost per day varies between 6 and 12 dollars, on average ending up at 8. I take advantage of end-of-day sales, packaged food discounts, etc. In short, I'm able to time my food purchases so that I eat one to two meals a day in a 4 hour window between 4 and 8pm, which gives me the benefits of intermittent fasting and also provides me with caloric restriction on the basis of availability. During the week, my two meal cost is just under $10. On the weekend, most of the overstock opportunities are gone, so instead I visit a local ethnic grill which has full platters for under $10. If I get fancy and want more exotic meat, the cost goes up to $12.

Most of the foodstuffs offered on discount end up being fresh prepared salads w/ salmon, whole chicken, roasted vegetables, etc. The time cost for preparing all of these properly at home is substantial.

Given that I don't buy groceries anymore, I don't have food available at home to snack on. If I want food I need to prepare rice or some other primary grain. These dishes have a significant lag-time between the impulse to eat and the dish's completion, so this prompts me to ask "am I really hungry or just bored with what I'm doing?". Often, I'm bored. I'll pop open a new book or change up what I'm doing instead of downing 400cals. Even if I do give in and prepare a bit extra, I'm still under my daily limit by a substantial amount.

The alternative, grocerywise, costs me approximately the same amount when accounting for spoilage and time. I love cooking, but the time cost associated with shopping alone (let alone preparation) puts the expected monthly cost of preparing food at home over 11$/day for me.

Accordingly, it doesn't make sense for me to shop for groceries. I'll keep a few vegetables (cucumbers, cabbage, etc.) or soups available for moments when I'm in a pinch (sick/extra hungry/very active days etc), but otherwise I just wait.

I'll likely look at adding pure-protein home-cooked options when I start hitting the gym hard in a few months, but I've bulk purchased fish and steaks from importers and local meat packers respectively at 1/3rd of their normal retail price anyways, so I'm good to go on that front.


Appreciate the in-depth reply. I've also practiced intermittent fasting and it was the best way to crush my snacking/candy habits, which can add up $$ incredibly quickly.


Depends on your city, most urban restaurants focus more on "comfort" food than nutrition.


It’s not everywhere that you can find cheap, healthy and clean restaurants.


I was doing this for years paying well over $1.5k for food alone monthly until I lost my Bitcoin "savings" which I lost with lame trading and at the same time my company started not doing so well.

It's irritating to change but after a while you start to appreciate when you can just keep yourself within your daily cycle with work and location you're accustomed to.

I take it as a lesson to know how to soften the next hit.


Any particular advice on managing your finances that you're willing to share?


If you want to buy something and it will require you to run monthly balance on your credit card, you can't afford it. On the flip side, credit cards are a very powerful tool that should not be ignored.


For me, the most important thing was to budget. I used the YNAB app and made a line item for all of my spending. It took a few months to adhere to the budget but once I did I got the ball rolling. I also did not know how to invest, so I did some reading on IRAs, mutual funds, 401ks, etc. to better understand this. I also started paying more attention to my credit.


Sadly, after more than 20 years building software, _NEVER_ trust a business person. My faith in humanity had to have me bitten by this the hard way more than once.


I might give a softer version:

1) Never assume people will respect the value of your time and the fruits of your labor. Some people in particular are looking for related arbitrage opportunities. It isn't even necessarily malevolent, it can be just a frequent human limitation in how value is perceived. Though sometimes it is predatory to the point of malevolence.

2) Assume any future promised reward is unlikely to materialize when making your decisions (if it is not specified via contract, assume it will outright not happen). If a given course doesn't make 90% sense if a possible upside doesn't happen, then it doesn't make sense.


Also, watch out for business people disguised as tech people. They're the most dangerous of all.


all developers in New York simultaneously quit


Yeah, I'm surprised that they trust each other at all. What keeps them from bashing each other with sticks?

When I see business people smile at each other and shaking hands, I cannot make sense of this in my mind. What's the point of smiling when both people couldn't care less if the other person dropped dead on the spot.


They care whether they can get some use out of the other before either drops dead


Yeah, I get what you are saying. This might illuminate what's happening.

https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-...


there are many business people who don't engage in that. at least on main Street, where relationships actually matter.


+1 every time I say exactly the same. I have an axiom about that.

1. Do not trust “business” guys! 2. If they give you some “sweet” offer, look at the rule No.1


You are also a business person, aren't you?


Could you elaborate a bit more? I’m not sure what to take away from this.


See e.g. https://news.ycombinator.com/item?id=18133748 upthread for a story about trusting business people.


That's just a bad person, nothing to do with a business vs. a tech person.


Here's a more charitable way of thinking about this, based on my own experiences. When you're making a deal anyone (agreeing to do work, buy/sell, partner, etc.) there are two sets of motives you have to consider: what they tell you up front, and what they actually want. In your day to day, even at work, those two things are the same. But in many contexts where you would be talking to a "business person," those two things can be very different.

Lumping it all into "business person" isn't very useful because there are a lot of business people. So maybe a few specific examples can help.

Account managers and salespeople: while their stated job is to help you with customer issues, they're actually paid to sell/upsell you, and even if they're not, they're evaluated on selling/upselling you. This means they're likely to stretch the truth about the product they're selling in order to close the deal. So when you're interacting with salespeople, you can never 100% trust what they tell you, because they're not actually trying to help you.

Business development: the company they work for has an agenda. That agenda won't be obvious to you. Maybe they're asking you to come in to do a demo because they want to consider partnering with/acquiring your startup. Actually, they're spinning up a team to just build it themselves, but they want ideas. The problem is you have no way of knowing which is which.

HR: you know the common wisdom, they're there to protect the company, not you, and often that makes a huge difference.

Someone hiring you for contract work: they do want the work done, but they're trying their hardest to avoid paying. That means every ambiguity in the agreement becomes something they might try to leverage against you.

In other words, don't trust someone until you understand their hidden motive. "Business people" just tend to have more of them than your average person.


If you're a dev, don't work for a company where software development is viewed as a cost center--you want your work to be viewed as something that brings in revenue.

(Learned the hard way when I worked at a large bank.)


I agree with this full-heartedly I work for a company where my boss told me a couple months in having a dev department was a waste of money for the company, and we were lucky to have a job. The company bread and butter was software that transcribe medical records from paper to digital. What the CEO and sale force didn't tell anyone it was actually a cubical farm of humans transcribing it all since the software was horrible. The environment was so horrible every worth while dev/IT person regularly drop out as soon as there contract was over or till they just didn't show up one day. The only reason the company even keep "functioning" was out sourcing everything to India. There database was duck tape and string together in ways that only the elders understood how to pull things out of it.

If you walk into any company where different departments get praise more then others it is a sign to walk out. You will always get treated like a second rate employee in those environments.


Sounds awful! I've been working my butt off with some friends on a system to extract data out of scanned forms and documents (incl. handwriting) and I'd really appreciate hearing your thoughts about it. Couldn't find your contact deetz so please send me an email - address in my profile :)


Was this company's HQ ever in Massachussetts?


I learned this from finance:

Don't join a team that's mediocre and/or where you're the only one with your skills. When it comes time to evaluate your performance or assess how long something should take, your manager and your team will be clueless. Useless people survive by playing politics. And when you quit they'll play games you can't win.


>> And when you quit they'll play games you can't win

Can you elaborate on this? Things to avoid when quitting such a position?


In finance on the east coast, most shops have non-competes, non-disclosures, and non-disparagement agreements.

Between those 3, there's a lot of ways they'll try and coerce you into staying without paying you market rates if your bus factor is high enough. It's so bad that I've known people who have hired lawyers to help them quit one firm and join another.


I regret commenting only to basically say 'I agree', but as someone experiencing exactly this kind of situation, I just can't overstate how true this is, for so many reasons. If you can avoid it, avoid it.

A little bit more in depth:

Your work will never be fully appreciated by management, no matter how good, because everything you do is perceived as a cost that could, ideally, be reduced.

You will have to justify your work time to ridiculous extents, because the kind of management that views software development as a cost also tends to just loooove quantifying everything, no matter what or how, and then pretending day-to-day operations are a reflection of that data and not the other way around.

If you love programming, because every minute of your time is a cost, the amount of technical debt, bad-ways-to-do-things and just general complete bullshit that you'll have to deal with is nothing short of incredible. Every minute of your time is a cost, remember? Forget good design or proper testing: the quicker you finish the better and if problems come up in the future we'll deal with them, as in: WHEN problems come up in the future YOU'll be blamed and YOU'll be expected to deal with them since you 'caused' them.

Just think of that common, 'this-is-just-a-job' programmer that we all know, that couldn't give a damn about design, structure, or even basic code style guidelines, and now imagine that attitude is indirectly but constantly encouraged and rewarded. Iterate this process N times during years or decades of rushed hacky development cannibalized, hacked and re-hacked again, and huge programmer churn due to burnout, and just imagine the resulting codebase. And remember: any problems in the future due to any (or all) of this will be reduced to 'a developer didn't do his job properly'.

This was longer and more rant-y that I meant it to be. I didn't mean it as a horrible situation but a frustrating one. And of course, it's just my opinion and my experience with such companies.


I think that these days, the best large banks do not view software development as a cost center anymore. I'm hearing more and more from people in banking that banks these days are basically IT companies with added security constraints.


True and false in my oppinion.

Mandatory developments, impositions of central banks, national vat's, auditings and bussiness as usual is seen as a cost. You must do this developments. These are fixed costs and banks tend to minimize them.

New products that inovate/diferentiate one bank from another are seen as strategic and costs are seen diferently. What banks optimize in the fixed costs, banks spend in the proof of concepts.


Fair point. My particular experience was at Washington Mutual, about 13 years ago, which was not one of the "best large banks" by any objective measure. I left about a year before the collapse while they were still raking in money from shady loans... everyone there thought I was nuts for leaving.


When you tutor someone, don't tell them what to do step by step. When they ask you how to solve a problem, don't solve it for them.

It's tempting to explain in minute detail something you are good at, but if you always tell people how to do their job, they will become dependent on you.

Let them figure it out on their own.

When there's a bug in their code, point it out, but don't tell them how to fix it.

If you alwaystell people how to do stuff, they will never learn to think for themselves.


In my experience, most people who ask you to teach them don't want to learn as much as move on from this. It is frustrating, I no longer teach people. I take it seriously and it takes a lot of effort for me to teach well.


> When there's a bug in their code, point it out, but don't tell them how to fix it.

It's funny, I've learned the opposite lesson the hard way.

I used to just point out bugs, like I was a tutor hoping they'd realize the problem on their own and fix it correctly.

Unless it was an obvious brain-o (i.e. the developer knew what they were doing and just flubbed), this resulted unerringly in a "fix" that (a) didn't solve the problem, and (b) created another. I would end up coming off as a nitpicking asshole trying to guide the developer into writing correct code.

So now I just reply, in detail, with exactly what fix to apply, often including code verbatim. Call me jaded, but it works, and I've realized it's not my job to get people to learn to think for themselves. Those that want to already know how.

Related: never post example code you wouldn't want to see copy+pasted verbatim into the codebase. I can't count the number of times I've said "fix it using code like this" only to get a complaint a week later that the fix doesn't work, and seeing my pseudocode complete with foos, bars, and made up meta syntax copy+pasted verbatim.


The problem with this is:

a) it doesn't scale

(you are now doing the other devs' job)

b) it only works if you are infallible

(if there's a bug in your fix the other dev is going to say "colanderman told me to do it this way")

I know that it is tempting to just tell people what to do, but it's not a long term solution.


> it doesn't scale

It's strictly better than repeatedly pointing out the same, but slightly different, bug, in a series of incorrect fixes, before being forced to spell out the solution upon realization that the dev isn't going to get it on their own. Just skip to the end.

> if there's a bug in your fix the other dev is going to say "colanderman told me to do it this way"

So?


> When there's a bug in their code, point it out, but don't tell them how to fix it.

This is how people develop their own problem solving skills. When I was a junior developer, that was one of the skills my team leads / senior developers really focused on. Super important to be able to think / problem solve for yourself.


HR is there to protect the company, not you.


I've heard things like "if you have a problem and are unhappy, just go to HR". Nope, I'm not going to rant to them, and I'm certainly not going to talk to our in office mental health professional.


My SO is a HR Manager. I hear the constant drama first hand over dinner. My take: HR are angels after hiring and during onboarding. After that, any correspondence will be kept to an absolute minimum.


Who benefits the most from the work your SO does... employees or the corporation? As others point out, they are to be avoided at all costs! And usually play a really bad gate-keeping role when it comes to IT hiring. It's a hard thing to learn early in your career.


Are you actually asking? If so, I think you misinterpreted my post. Please re-read, we agree. If HR has anything to do with any part of the technical interviewing process, the company is already misplacing their use. I won't touch HR with a ten foot pole unless absolutely necessary.


I learned this one as well. One week after going to HR with a concern I was fired.


I’m interested in hearing more about this if you’re inclined to share.



Start each day with the thought: "if I got fired today do I have what it takes to bridge it through to the next opportunity, and would there be companies out there in need and willing to hire me".

If you can't honestly answer that with "yes" you are either accommodated, or running risks higher than you realize.


I agree 100% with this. Especially if one is the software industry, it is a top priority to keep up with the new tech.


The people you spend the most time with affect how you think and what you do.


I originally posted this separately, but then saw your post and am adding it here. What you said and the below were some of the most profound realizations for me, even though it seems so obvious, but the extremely high degree to which this is true isn't that obvious.

---

People are incredibly hard to change.

Spent half a year teaching someone programming. They told me they wanted to learn, etc. Ended up doing most of the bootcamp work for them so I could explain it to them, etc. This person had 5 day breaks where they didn't study a single thing. This also goes with "look at what people do, not what they say, or how they present themselves."

That also comes down to "don't waste time on shitty people." I used to spend time with everyone because of naivety, then I realized just how precious that time is and a lot of people just waste it.


Absolutely agree. One phrasing I heard that changed my mind a lot was "It's hard work keeping your own life afloat. Be careful who you tie yourself to. They are as likely to pull you down as you are to lift them up".

In one interpretation, that's a scary thought encouraging selfishness. In my view, it's a pragmatic description of reality, encouraging judiciousness. I still find great joy in helping others, sometimes at some expense to myself, but I now feel a lot less bad about making value judgements before deciding if such a thing is worthwhile, rather than feeling obligated to help everyone that might want it.


I agree, but not in the way that this statement is usually intended. It often goes along with “you become the average of the five people you surround yourself with”.

Unfortunately, sometimes I find myself surrounded by people who have vastly differing life philosophies than my own (relatives, friends, spouse). In that case, the disagreement in a way pushes me harder to achieve what I want to out of sheer stubbornness than if I actually was surrounded by people who thought the same way as me.


I would add to this the following. You are the person you spend the most time around. You have power to affect your own outlook in small ways on a day to day basis. Added up over a long period of time can result in real change in outlook. I'm talking really tiny things like instead of saying "I'm bad at X" say "I haven't done X well before". Sort of brainwashing yourself into a growth mindset.


How to run..

After I first started running and losing some weight, I became enthusiastic about it. Then with the notions of 'more is better' and 'no pain, no gain', I cranked up the mileage and pushed through the pain. But I learned a hard lesson when I tore a calf muscle.

Since then I've learned that form and technique, consistent and gradually harder practice, and getting expert help are necessary to really learn something. Ten years later, and over 18k miles logged, I can say I know how to run.


The thing running has taught me is to "save the ego for the race". You can show up to a meet and try to run faster than everyone, but you're only getting tired and wearing yourself down.

Consistent, deliberate training and being conscious of form is how runners get faster without destroying their bodies. Then show up to a race and let that ego run wild. Finish strong, high five people and quietly sip your beer.


I have to say the same. Especially when it comes to weight training and running. I've developed some issues with my hip and I suspect it's due to running (badly). Bad weight training pretty much wrecked my upper body. How long did it take you to recover from your torn calf muscle? That sounds intense.


It really hurt initially but it only took about 3 months to get back to running. It took years, though, to really get the form to a point that it wouldn't introduce new injuries. My coach would set a certain volume (weekly mileage) and intensity based on where I was at form-wise, and grew it over time. I went through a number of injuries during this time, but none of them stopped me from running outright. Eventually I gained enough experience to know when I was doing something wrong and how to correct it. Running should never hurt—pain is how your body communicates with you.

In the last couple of years I've learned that it's important to really focus on whole body fitness, not just what's necessary for running. Strength and mobility are key.


Tight IT band + weak glutes = culprit for a lot of hip injuries.


Tight IT band is an indication of bad form.


Not necessarily. It also tends to go along with tight hamstring which everyone who sits 10h a day is going to have without a lot of work.


True, tight hamstrings are a contributing factor, but not the sole reason for IT band issues. If rolling out your IT band is a painful experience, it's an indication that you're improperly loading your legs when running—it's a form issue.


Or it is an indication that you need to foam roll more, and perhaps work on some quad strength such as squats ;)

Running is one of those sports that people tend to think the 1 thing that worked for them is the answer for everyone. It's not that simple. People have hips with different shapes. People have legs of different lengths. People have ankle damage from previous sprains. Good form helps for sure, but if you want to claim that all running issues are related to form - I have a bridge to sell you.


Fix the problem you can see then deal with what's left

I was working for a company that made lighting equipment for touring bands. One band had decided they wanted the biggest lighting desk in the world (this was in the early 80's). We cobbled together two of the company's latest digital desks as master-slave, and it nearly worked. Two problems remained as we got really close to the band's tour starting: a weird flickering in some of the indicator LEDs in the slave, and the output level (controlling the lights on stage) would sometimes wander around unpredictably.

We had a quick look and decided that the output level thing was a major issue which had to be dealt with first. The LED flickering problem was a) minor, and b) caused by a simple clocking problem which we could deal with later. We spent 48 hours or more with no sleep, trying to fix the output level thing. Got it just about useable, but not perfect.

The tour was due to start the next day so we decided to give up on the output level problem and fix the LED flickering, so that there was only one issue, albeit a bad one. Spent an hour fixing the clocking issue so that the LED's were OK, and lo, the output problem was sorted.

If only we'd dealt with the simple problem first, then we'd have managed to get some sleep!

And before you say that was a one off and bad luck or bad triaging or something, I've used the same heuristic more than once and it's always paid


That working in a big government setting just isn't for me. Doing data/reporting stuff in healthcare, to be more precise.

After 4 long, long years drifting around in my job, crumbled self-esteem, some mild-ish depression, I finally found another job and got out.

After a few months I realized that I was just 100% incompatible for the job I was in — not that I was unqualified or any of those other words that could also be true. I was simply incompatible.

I've learned to look at things a little better/clearer since then — evaluating things through the lens of my core values and how I feel rather than through the lens of imposter syndrome.

Maybe this is useful, maybe not :^)


Could you elucidate the differences in the dynamics? I'm currently working with a company that works for the government, and I'm experiencing a lot of the same symptoms, so I'm wondering what the differences are that you see.


I was 14, just released my first text based game (think simple travian) to the world via national aggregation site (reddit of my nation at the time) got few thousands sign ups and few active players.

I hosted the project on some PHP hosting who's owner was a guy I met while playing online games. I edited and worked on the game live through some editor that offered FTP connections.

Because I was 14 I didn't have a card and I had to go to the post office to make a payment I missed it once and the dude shut my site off immediately & deleted everything. No backups. Since I was editing remotely I didn't have recent backup I had some old copy of the codebase. I never manually backed up the database, I didn't even know what backup was probably... So a game died 2 months after it was launched :(

related memory: I didn't know how to configure a cron job so I asked the dude if he can host me 1 machine open Opera on some url, right click and set "Refresh every 60 seconds" (Versions before 12.00 had that)


On the story of backups, I bought a webcam when I was young and started doing sketchs with my friends. We recorded so many videos, created our own tv shows acted like hosts and so on. later, my computer was not working well with some games, so I asked the place where I bought it to take a look. I came back a few days ago and they told me they had formatted the hard drive. I was like what? All my stuff was on there. I cried so much. Childhood trauma right here. Now I have multiple backups of everything.


That mysqldump adds "DROP TABLE IF EXISTS" by default. So if you want to backup and restore several rows, you are in trouble.

Not really the hard way because DROP TABLE isn't instantaneous on big tables. So I managed to kill the query before the table was gone.


Never write something in e-mail that you wouldn't be happy seeing forwarded to the person you're talking about.

Always keep records of what you've said and agreed, people will have a different recollection of events down the line, and a written record is very handy at that point.


I have a good one:

Give negative feedback in private email, then it gets forwarded to multiple layers of management behind your back, then a single quote from this email out of context is cut-n-pasted into your perf review few months later by management. (Happened in big advertising company that also runs search engine).


The lesson of course is not to lie in emails, but not to work with asshole managers.


A company is a company, not a family. It's about making money, not about relationships. For better or worse, it's never really personal.


Too many people spend their whole careers somewhere (lost wages, lost skills and atrophy) because they still feel like the company actually cares for them.

They don’t.


My late realisation (and at a cost) may be related to yours - your coworker is not your friend, better keep it that way.


Another related one: having friends become colleagues can be challenging.


In a recent interview I had, president of the company said "we're a team, not a family"


Before you get into a business partnership, while everyone is smiling and optimistic, put in writing how the two of you will end this partnership should the time ever come.

Things happen. They aren't who you think they are. Or maybe they suddenly decide they don't want to lift a finger, but they still get 1/2 the profits. And since it is a 50/50 partnership you can't even insist they let you buy them out.

Or maybe they are a great partner but they die in a car wreck and their spouse is a nightmare who just wants the business sold, now. Even if it wrecks your life. Be very wary of 50/50 partnerships without clear escape clauses.


Sales. You know, as probably every programmer out there you finish your product and you think that clients will start flocking in because you've build such a fucking great service. And then reality hits you in the face and you realize that the hard work just started. You have to go and talk face to face, listen to their needs, adjust your service accordingly, pamper them because they can't understand half of what you're saying, publish and then repeat.

The good thing is that once you get the grip of it you feel invincible. All the fear and the doubt you used to have while building a product disappear because now you know how to approach clients, and if you're smart enough you won't even start building a product without first having some feedback from potential clients.


Documentation is like sex. If it is good, it is good. If it is bad it is good


"Our code is self-documenting. If you need documentation then the code isn't written well enough"

-Assholes who don't know what it is like to work with mature code bases.


    "Our code is self-documenting. If you need documentation then the code isn't written well enough"

    -Assholes who don't know what it is like to work with mature code bases.
- People who don't know how to write clean code


        "Our code is self-documenting. If you need documentation then the code isn't written well enough"

        -Assholes who don't know what it is like to work with mature code bases.

    - People who don't know how to write clean code
- People who think that not only they figured out what 'clean code' even means, but that everyone else will agree, thus single-handedly ending some 50+ years of heated industry-wide debate, numerous billion-dollar attempts by some of the most talented people in the world, and troves of 8-dimensional mental gymnastics about design patterns by way of a $21 ebook, a code review and some blog posts


Not to mention thinking that clean sensible code is always an option. There will always be something. It could be a kernel bug, it could be a quirk of an external library, it could be just to get the bloody thing to link against static libraries, but there will always eventually be an issue that requires a workaround that doesn't make sense without context.


I agreed with this until my current job, when it was stated cheerfully by a guy whose code is so shit lousy that I want to do violence to him (an emotion I haven’t felt in probably ten years).

Management thinks he’s brilliant. Everybody else thinks he’s an insane asshole.

Just because you know people who can say this with sincerity and gravitas doesn’t mean there aren’t assholes.

There are always assholes.


I think the book _Pragmatic Programmer_ explains the concept of this asshole type of programmer and how to have the same results as him without being an asshole yourself


I hope you are using someone else to judge how clean your code is. (Maybe you are, maybe it is). I have come across very little self documenting code outside of a textbook. Code is a very low level medium. In the meantime a comment can help save a lot of time.


Sorry, parent poster: Gotta agree w/ above comment here. With the minor warning that the unit tests are included in this. In a good environment, I should be able to go to the tests to understand not only WHAT the code is doing but WHY it's doing it. No matter how 'mature' the code base is.


In any mature code, there is going to be unintuitive code that only exists to work around an external issue beyond your control.

Recent example: when you authenticate to OpenSSH running on macOS 10.13 or 10.14, make sure to never attempt keyboard-interactive auth after password auth, or the server will stop responding.

Somewhere you need to write this fact down, so that the next person who comes across your auth code doesn't change the order of authentication methods.

You need to document things like that.

If you have a mature code base, you'll have dozens, or hundreds of these workarounds for all kinds of issues. If you look at the code, it'll seem inefficient. If you don't document why the code looks like it does, then someone will come along (possibly you) a few years in the future and "optimise" that line.

Sure, you could have a unit test that checks whether the workaround is in place. But then you STILL need to document why that unit test is there, or someone will come and consider it pointless and remove it.


or maybe they just didn't write the code? i mean, if it's mature it likely was a result of years of effort and many hands involved. some documentation is always better than none, lack of documentation is either laziness or dogma; neither of which is a valuable mindset when working on a team for a business.


Code is harder to read than write.


Except when the documentation is out dated and has very little to do with the actual code. At that point you are better off without bad documentation than with it. I've wasted a lot of time solving strange bugs because the API had stayed the same as when the documentation was written, but the implications were totally different.


Documentation priority is inverse of volatility:

1) Why (requirements, decision points)

2) What (use cases, interactions, external APIs)

3) How (internal APIs)

4) Who (SMEs, owners, servers)

And don't waste people's time; don't document things that are obvious.


And it extends far beyond comments in source code. Don't be that person who people have to run to because he/she keeps everything in their head. It's not job security. Take some time and write things down for your future self and team members.


This is hilarious and 100 percent correct.


But if the client wants me to pretend I care enough to do it well, they gotta pay.


I've heard the variant:

If it is good, it's great. If it is bad, it is better than nothing.


Being in a leadership position in a software org usually involves going to meetings all day and telling people bad news.


Get everything in writing. EVERYTHING.


Ha, I’ve learned the hard way that: By the time you invoke a contract, the relationship is already in trouble.


This is usually true. There's two saving graces, though:

1) Just having the contract sometimes gives people pause about what boundaries they're willing to cross.

2) A contract can help you salvage things that are not the relationship once the relationship has gone south if you choose too.


Keep in mind that #1 works, even if what’s in the contract is unenforceable. Companies use this to their advantage a lot.


And along those lines, enforcing what you have in writing costs a lot of money.


I would add though:

A written agreement is only as good as the people who sign it.


1. Not to naively trust others so very easily.

Which leads to... drastic change in your personality and that leads to..

2. Being very assertive, dominant, outgoing, life of the party, charisma, worldy wise etc.

I wish I was the same idealistic person I once was. I am definitely enjoying life way better than ever before but I no longer am naive.


Can you please expand on your transition? Was it something that felt like acting at first? Did you give up “neediness”?


It isn’t the most capable person who gets promoted. It’s the person who can make their superiors believe they’re the most capable.


I've got a slightly different take, though I think they have some overlap:

Capability for a job is more than raw competence, which is why most people reject the Brilliant Asshole, even when that person is genuinely brilliant.

I've seen some inarguably mediocre workers get some great roles – and I've worked alongside of some of them. And I loved every minute. If you're cranking out 65% of the work and make the team 400% more enjoyable to be on, that's a worthy form of force-multiplication.

The best teambuilders wield this principle smartly instead of meritocratically rejecting its existence.

This is a great thing to know in job interviews, and lots of otherwise irrational-looking hiring behavior becomes sane when viewed through this lens.


You're both right. A person can be a force multiplier for the team even if their direct output is low. But I've also seen people simply bullshitting their way into better projects and positions.


Always make backups. The little bit of time it takes will be a life saver if anything transpires unexpected. Oh and don't deploy on Fridays.


Added corollary, Always test restore your backup, it's the best example of schrodinger's cat.


I never liked the "be sure to make backups" and have "and be sure to test" as an afterthought (or "added corollary" in this case :-). Most ppl ignore the afterthought.

I taught my students "You don't need a backup system. You need a _restore_ system." It changes the mindset from "Yes, we make backups every night" to "Yes, we can restore the database in x hours".

I've seen way too many companies take the "we're good; we make backups" only to fail when trying to restore.


On this same note, test your backups occasionally.

Untested backups are worse than no backups.


Disaster recovery is hard. For startups, I finally learned to do this drill: Restore the entire business to fully operational status on clean computers from offsite backups in under 24 hours. You always hope you won't need it, but...


You're spot on! Specifically I was referring to SQL data. Been bitten more times than I'd like to admit making a hasty change.

Edit: refined.


You can never get back the time you waste. I'm talking on the years scale.

The fact that it's never too late to make positive change in your life doesn't mitigate that.


Time is the ultimate luxury.


Accept all negative criticism advice as well as you possibly can. If it's just someone being an asshole it's very easy to know that and just ignore, but if it's real it's the most valuable feedback you can get.


This is not going to go well in the US or the British culture...


I'm an American and consider myself good at accepting criticism and using it to better myself. I'm not sure what you're trying to say, could you explain?


Haha, maybe not, but it still is good for you. I'm American and I concur, this does not always come naturally to us.


Think this is one of the universals. It's not that we're good at it - it's that there exist other cultures worse still.


I learned programming the hard way—by starting with imperative programming.

(Of course this doesn't apply to everyone, as I'm already a pretty mathematical person, and functional programming just immediately clicked and made sense. YMMV. In contrast, the first time I learned quicksort I spent an entire afternoon before I made sense of all the swapping and increment/decrement of array indices. In a way, I really hoped I hoped I would be introduced to programming with a better textbook, say SICP, which doesn't talk about assignment until one third into the book. It just suits my style so much more.)


Know when it's time to quit, and when to accept failure.

Putting hours, effort, and emotion into a person/project won't save it from inevitable collapse if that's the direction it's headed in. Set a timeline, create metrics, and if you aren't on a positive trending track, quit, otherwise you'll just keep chasing something that will lead at best to mediocrity.


Don't read the marketing department's descriptions of the product. "Its an AI driven, machines learning tuned, blockchain, smart contract jamboree!" (ok, I added the jamboree part). News to me. Also, don't go on the the business trip sales pitches. They literally just make up promises without asking the devs the difficulty/time line.


Business decisions are financial decisions but the narrative you will be fed will be personal.

Open office plans, culture fits, promotions, etc. are disguised financial terms made by someone in business. Open office means they're trying to save money, culture fit means "how often will you listen to me" and promotion means "up or out"

The quickest way to shut someone up or shut someone down, is to provide them with numbers and facts corroborate by 2+ other people.


There's a limit to grinding it out alone. To grow as fast as possible, you need to learn from those who have already walked your path - you need mentors and good guidance. In both academics and business, social skills and gymming - to go fast, go alone, and to go far, go together.


1. Unit test everything, document everything, it is ALWAYS worth the cost (at least for a minimal test + mini design/spec/javadocs and the likes)

2. Don't do premature optimizations / Measure before optimizing

3. Keep your cool when asked for estimates for something with unknown requirements / unknown team. Losing your mind or temper is never worth it.

4. Beware of the silver bullet new framework, right tool for the right job, avoid they hype on one hand and learn to move on when a technology dies out. (Hi Flash/VB/Cobol/Mainframe developers, I know you still have job security for a few years... but not forever...)


Either I'm your customer or you're my customer. All transactions with another business should be buy/sell.


This one is great; easier to understand than the often quoted one. I shall steal!


"You are not that special." Can be a shock to the ego when you leave a top school, but if you take it the right way, it takes some pressure off.


Always roll up your window when driving past the archery range.


I really need to know the story behind this.


The need for exponential back off when retrying a connection to a server. Learned after deploying to millions of client devices :)


Exponential back-off is one of my favorite simple algorithms. Just remember to set a sane upper limit, you don't need them to wait hours between tries.

I will sometimes use a "pseudo exponential" like 1,3,5,10,25,50,100 and hold there. Of course, if you're trying to avoid collisions on a shared resource, the classic algorithm is pretty good.


That all my conventional-sounding musical ideas are easily captured by basic music theory. Even though banging your head against the wall has been useful in developing the ear, avoiding music theory doesn't make any sense since you keep repeating those well-known patterns, and in the end you have to start developing that pattern against pattern type of thinking instead of composing note against note & note after note.

Edit: "in favor of" -> "instead of"


> in the end you have to start developing that pattern against pattern type of thinking in favor of composing note against note & note after note.

I think there is a typo, or this is ambiguous. Are you saying you should use "pattern against pattern type of thinking" (and what is that?) or that you shouldn't? You should use "note against note & note after note" or you shouldn't?


Sorry, meant to say "instead of" not "in favor of". I'll edit.

What I meant to say that if you haven't learned the proper classification system that we now have in general music theory (dominant & tonic chords, sus chords, and let's say basic modulation principles), you might walk a long time in the dark looking for "that feeling" or "that continuation".


Corporate politics is just as much a thing in startups as it is in large companies, and owners are just as likely to screw over their employees (or more likely, when it comes to equity).

Kind of like politics and petty concerns are a big thing in academia too.


There are (at least) 3 sides to exercise: Strength, Cardio, and Stretching. They are each at least as important as the others.

Go to the dentist. Even if you have great teeth.


Stretching is probably mostly hype. E.g., https://www.painscience.com/articles/stretching.php


Isn't everything mostly hype? After you have a certain minimal level of strength and cardio capacity, how much do those actually affect your life?

From the article: "Although it can boost flexibility, the value of this is unclear, and no other measurable and significant benefit to stretching has ever been proven."

The thing I had to learn the hard way was the value of flexibility. You can pump out squats and go for a jog, but if your knees and ankles hurt when you go down stairs, you have a problem. If you can't sit on the ground with your back straight, you have a flexibility problem. A lot of lower back pain comes from flexibility issues.

What is the value of flexibility? Go visit a nursing home and see people who can barely move. Part of that is lack of strength, part is lack of cardio, and part is lack of flexibility.

----

Also, you should beware of lessons learned the hard way. A lot of times they are another way expressing a pain point, sometimes with a solution that worked - but that solution may not be optimal.


Tell that to gymnasts and martial artists. I have seen the "science" of this over the years, but I have also seen the practical fact that it's absolutely unavoidable.


Gymnasts, martial artists, ballet dancers and some athlets (e.g. javelin throwers) stretch to increase their range of motion because the latter is beneficial for their activities. The effect is temporary (+) unless you start at a young age and ruin your joints (-> China). If you don't belong to those groups, stretching doesn't do much for you, as has been repeatedly pointed out in various publications. The other benefits attributed to stretching, e.g. a lower risk for injuries, are actually caused by the warming-up effect of the stretching movements and can be also achieved, in a much safer way!, by some simple exercises.

(Side note: When talking about the benefits of stretching, some people also mention Yoga, but that's a different story and 99.999% of Yoga teachers and practitioner don't have the slightest idea what they are doing.)

(+) That's the reason why you have the impression that you are stiff when you skip stretching for one or two days.


Try squatting deep without being flexible. Squatting --> strength --> better posture, metabolism, & bone density.


That article seems to aim at the hype that stretching will help with anything other than stretching. It's pretty obvious to anyone who ever tried that practice helps you stretch farther, but some people also stretch because they believe it will prevent injury or make their muscles more efficient or something like that.


I stretch because it feels good. I don’t expect a cure from cancer for it, though.


Make things pretty.

No amount of hard work and usefulness can amount to a beautiful product.

I have strong feelings about Lean Startup who told me to create a MVP, which made me look like an amateur.

So, listen to the marketing people and wait to release a beautiful finished product.


... MVP, which made me look like an amateur.

If you're in a domain where aesthetics and "beauty" matter, then your MVP is missing the "V" unless you have, indeed, made the thing beautiful. The Lean Startup approach doesn't tell you not to make things beautiful... it just tells you to make only what you need to validate your hypothesis. If that means making something beautiful, then you make it beautiful.


The website has a wikipedia feel, free and useful information.

There are lots of fans currently, but at the time(and to this date), I get people questioning legitimacy due to a having a white shadow in my CSS.


As a user I beg of you not to sacrifice usefulness and features for Pretty.

Seen way too may times where stuff was rewritten to look better but usability suffered.

Case in point: Walmart recently redid their self checkouts. The new system looks a lot better and I like it if it did not take 3 times as long to pay. It even took forever compared to the old one to register cash being inserted. And there were several complete lockups.

Recently it seems better so I believe they have been working on the back end but for a while I would not even touch them


Waitmart takes even longer with these systems? I generally always go to cashiers for that reason. I feel like I'm becoming the minority who would rather deal with an actual person than an automated system most of the time, and I develop automated software.


I avoid the self-checkout because I don't appreciate the (perceived) atmosphere of suspicion that you're trying to steal something.


"...which made me look like an amateur." This made me chuckle since I can only imagine the frustration.


Amen. I've shown the exact same application on a dingy thinkpad and a shiny new retina iPad, and had diametrically opposite reactions.


Math.

Multivariable calculus and differential equations weren’t a part of my undergraduate CS curriculum. Now that I’m doing an MEng in AI, I have to learn the hard math I skirted by before.

I don’t have the time or money to take the proper math classes so I’m learning everything myself. I have to figure out my own structure and timeline.

Without the math, I wouldn’t be much more than a technician when it comes to AI. It’s worth the work.


It doesn't matter if they have money. It doesn't matter if they espouse religion or any other outward signs of honesty. It doesn't matter what they say. If you have any reason to believe they can't be trusted, even if it is a silly gut feeling, then they can't be trusted. Nor can you give them any possible wiggle room, like payment terms.


Indeed, always follow my gut comes up again and again for me.


except that some people have great difficulty ever trusting again, particularly after trauma. What then?


You put a big moat around things. IE: stronger, more painful contractural terms. Cash up front payment terms. Process and procedure that make sure you never get screwed again.


When one of your children's behavior abruptly goes from more-or-less normal to almost completely out of control, do your best to find out why, rather than just trying to manage the situation.


How to successfully roll out a product/site.

Released "Version 2" which was an entire newly built system that we worked on for an entire year (we also thought we were "agile" btw). This completely crashed and around 10K users were unable to use the product for almost 2 weeks. We did plenty of things right but we also failed.

Biggest Lessons learned: 1. Release features and changes in manageable incremental chunks 2. Load test, load test, load test - just do it! Yeah, sure, your app worked with your one user when there is 1kb of data in your datastore - what about 5000 users accessing it with 10GB in your data store? 3. Get and use an APM - when it feels like everything is on fire you'll need to know where the fire is coming from 4. One way changes that can't be rolled back are the devil. Take the time needed to make sure you can roll back - manageable incremental changes help with that.


My project management muscles arr being trained to be risk averse, and my 'move fast and ship ' muscles are kicking in to make releases multipart and piece meal.

It werks


What is an APM in this context? Google just tells me about Alternative Payment Methods.


Application Performance Management/Monitoring.

New Relic, AppDynamics, and DynaTrace are a few vendors in this area.


Start a company with a friend will bite you back one day (for me 20 years after the company starts !)


A 20 years partner is a great partner.


25 years after, definitely. 20 years after it might be brutal and personal.


20 Years? That sounds good from a business stand point?

However, I guess how much of your friendship suffer during how much of that?


The story is a bit more complicated than that but long story short it came out of nowhere and left me emotionally crushed for more than a year.

Now I struggle to get the company back on track (as he « sold » me his shares without leaving me another option), and it’s a bit complicated but on the way.


Playing with stocks. I decided to try to win big in the market. Took my IRA money out of index funds, and started trying to play some stocks. Lost big on one, panicked, and got out. My timing was awful. That stock eventually recovered to my purchase point after six months, but I put my money into another sure thing based on my research. Lost more. At least this time I did not panic. Now I'm trying to make up for it by playing the long term on a stock that should bounce back, but I'm content if it doesn't. Maybe it'll take a year or two, but I should at least be back to where I was. Then I'll be moving back into index funds.


When coding, learn to type fast and not use autofill. Your code will be better and you will retain the code in your mind it much, much longer.


Anything dealing with date/time will take 4 times longer than you expect and involve 10 times as many discussions as anything else.


Someone told me something along the lines of "Every event in your life can change your life entirely - you get into Harvard or you don't, you get the job or you don't, you win the tournament and go on to become a champion, or you give up on the sport when you lose. Every little decision can be a fork in your life, though most aren't."

Sure, it's oversimplified, sure some "bad-seeming" things are good in the long run, etc. But I find the fork part interesting to thing about - the fact that one little thing can spiral your life of in a completely different direction.


I see this more clearly in hindsight. By pure accident I ended up in software development: My mother found this university, I did not have anything else on my mind at the time, just started studying, graduated and here I am 10+ years later professional sw dev. In school I was much more into arts and crafts so I never really anticipated that I would end up. All because of a small decision back then... ridiculous really ;) Some people really think they are in control of their lives ...


Don’t wind yourself up about it though. One of my favorite definitions of adulthood is “learning to integrate all of your life experiences”.

All your detours and diversions add up to You, including the stuff you were afraid would never matter.


Never move from a neighborhood you like to one you don't like, because you'll never be able to get back in.


Make sure you put a tax distribution requirement in our LLC's operating agreement if you have a partner. I'm on the hook for a huge amount of revenue with no money from the company to pay the IRS.


Unless you're a founder or you personally know and trust the capability of the founder(s) recruiting you, max out cash and ignore options.

Also, unless you've been especially good at proving your value to people (either through credentialing or having worked with someone directly or with someone they trust), no one is going to come to you with an offer to hop aboard a rocketship. Assume by default that any offer made to you is unfair and skewed to favor the person making it. Negotiate accordingly.


If you're going to hop a fence to take a shortcut to your friend's house to play Mario Party after your last winter exam, check how deep the snow on the other side is first.


I learned the hard way that sociopaths and psychopaths are real, they're not all monstrous murderers, and some of them you may even call friend or family.


Amen to that. And some of them are super good at appearing normal even charming.


Most of them! That is their deadliest trait. They've a lifetime of experience trying to disguise themselves among normal people. Their ability to cloak themselves is how they prey on you.


I learned the hard way than using a Macbook Air 11" for 10 hours a day during 1 year was a bad idea. I now have a small myopia and have to wear glasses.


The importance of having a plan and smart [0] goals. This has manifested itself over and over in my life.

Take more time to plan up front, save yourself a lot of time and effort wasted if you don't.

[0] https://www.mindtools.com/pages/article/smart-goals.htm


No matter what you do, you will end up p*ssing off someone. No matter what.


Corollary: stop caring what other people think. The sooner you manage that, the better off you'll be.


That end to end tests for critical business functions will save your ass the moment you, your team, or your test suite fails to spot a bug.

I once added a line of code that did not execute in test environments because it involved a request to hosts that were only available on staging and production. So the tests were obviously fine but shit went south in production.


Hell hath no fury like a woman scorned (with legal representation).


You are the only person who will recognize and value your own overachievements. Prevailingly, others will view your efforts and either think nothing of them or wonder why anyone would go to such lengths.

If you're going to go above and beyond, you should seriously question why you are doing so. When in doubt, do it for yourself.


1. Delegate

2. You can’t help everyone

3. When you fail, let it go and move on


4. Don’t be afraid


How to be a good husband.

It took pushing my marriage to nearly the point of breaking to realize that my obsession with work, lack of participation in the house, and aggressive/demanding interpersonal communications was only leading to a dead end.


Trading and to an extent, savings.

Bought Bitcoin worth about $30k over time which turned into $120k after a bull run after a awhile and I put my foot into leverage trading without knowing what I was doing. Kept losing and got margin called until I emptied myself. If I had kept it without a single trading, it would've been around $300k today.

That gave me a pretty bad blow when my company went into not so good state and my income took a hit, I no longer had any spare money and I've learned to trade after I know what I'm doing and split your savings instead of going all on your single favorite financial vehicle.


You don't have to be nice to everyone all the time. It's better to be grumpy, opinionated and even a nay sayer sometimes than to fake smile through everything.

Because doing the later can give you physical symptoms like real back pain and migraines (collectively known as TMS) and millions of people suffer from it, get surgeries, medicine yet don't know that their persona is the cause of their physical pains.

This is what I learned the hard way after suffering from such aches and pains daily for nearly two decades and geting better quickly by just understanding the most basic thing about how our mind and body works.


Could you elaborate how being nice can cause a physical pain?


It's all there in the amazing book by Dr. John Sarno called the divided mind which I wrote about here (1).

It's the clash between id and the super-ego that causes it and there are thousand (if not more) people who got better from this pain.

If you search google for "TMS pain personality" you will find thousands of articles but this seems like a good start as any (2).

Unfortunately it's not for everyone because you really need to have an open mind (it's okay if you're a skeptical though) to unlearn your pain.

(1) https://news.ycombinator.com/item?id=17980964

(2) http://www.tmswiki.org/ppd/TMS_Personality_Traits


1. question everything.

2. trust no one, not even yourself.

3. hard work, is money in the bank.

4. with two paths in the road... take the scarier one.

5. pay off your debts faster than expected.

6. give more than you get.

7. listen more than you speak.

8. always be prepared, to find another job.

9. love unconditionally.

10. try not to think in absolute terms.

11. everyone has a story

edit: format


tl;dr always make production setup the same as staging.

We once had a production-only crash inside our Elasticsearch setup (we had written plugins). On preproduction it was fine, development fine, etc. But on production it would crash with NoSuchMethodError coming from the Jackson library (I think it was floatValue()). After several hours and rolling back/forward, I took a shot that there was something clashing with the class in the JVM (which I didn't know was possible at the time as I was a fresh dev). After backtracing for a while, it turned out that our production ES environment had some AWS autodiscovery plugin installed. This plugin depended on the AWS SDK, which depended an AWS common library, which depended on a Jackson version just old enough to not have floatValue(). It appears that this was being loaded first, causing our plugin to crash because we were calling a method which didn't exist in their version.

Turns out that I actually filed a ticket for the SDK to update (https://github.com/aws/aws-sdk-java/issues/411) but I think we ended up just migrating away from floatValue() altogether. As a younger developer, this definitely opened my eyes to the need to ensure parity across test environments (I remember this happened whilst I was on a tz that had me trying to debug this at 4am).


Grokking is not enough, go through the details. Spent weeks debugging a silent memory corruption on an 8-bit processor due to the incorrect usage of strtok in an SCPI parser.


?

Have you read Stranger in a Strange Land? I suspect someone else has taught you that word and they did it badly. To grok is to understand something at a profound, visceral level.


Management can be nice. As a dedicated coder, in depth, work hard and lean code better, going into management can give you the levers to bring others what you wanted to have and just be meta. But don't stop coding just do it meta. You can be a hacker and just manage people to do what's needed. Not all managers are assholes. Be prepared to talk more and understand more.


The danger of overly ambitious goals is their brittleness, and when they break, they break all the way. Much like "the best camera is the one you have", the best diet is the one you keep, and the best course is the one you'll attend. It's better to set yourself up for modest success than spectacular failure.

-------

Community matters. Relationships with other people matter. When I thought strong work would scratch my every itch, it's because I'd yet to discover the contours of other ways of life one might have. I was fine being an antisocial workaholic at 20. As I approached 30, my face went white as some unspoken emotional thing in me began to realize what I'd missed. But you can come back from that, and it's very worth it. If you're willing to suss out the rules of engagement and play it straight, the world is happy to have you.

-------

Western religion and American conservatism (archetypically, not the current implementations) have interesting and important insights about society and conduct, and they're things that off-the-shelf liberal culture suppresses or misunderstands, not from raw malice, but from calcified disinterest.

Revisiting the bible and last-generation conservative ideology with the idea that it might be an imperfect set of abstractions with something to teach rather than a guidebook for cruelty to be read literally led to a lot of personal growth, since the stories are archetypes about different types of conduct and their potential consequences. These stories aren't always right, and aren't always useful, but they were a second voice that, living in a coastal/liberal/progressive filter bubble, I had never heard. Seeing and understanding the "best" of what the right thinks, instead of the most "otherizing", led me to a worldview that feels more balanced, more centrist, and less polarized. It makes me assume positive intent in more people, and pick sides and fight less often.

I credit Jordan Peterson's lecture courses for packing these in a way that my progressive athiest self didn't immediately reject.

-------

https://www.kalzumeus.com/2012/01/23/salary-negotiation/

Everything @Patio11 says about salary is true. I missed out on gigantic sums of money, but later got them back on the table. The mental models in the article have, on a 5 year timeline, resulted in serious earning growth with absolutely no negative consequences.


I think the calcified disinterest in some of us comes from being raised in (and eventually leaving) a Western religious and conservative environment.


Certainly true. The pointed rejection of all forms of religion after having been wronged by it is common, and Slate Star Codex makes mention of it in a note that's somewhat relevant to this topic.

My personal hunch is that it mirrors an experience my friends have described about sushi and coffee, neither of which I enjoy. Apparently, bad versions of those things are unpalatable if you don't know what would make them good. If you start there, you wonder "why the hell does anyone consume this". But once you've had the very good versions, you "get it" and know what you should be experiencing when you go back to the lesser versions, and more easily "forgive" their imperfect representations of a thing you enjoy.

I've definitely had that experience with religion. I grew up in a family that was ambivalent to such things, failing to understand why anyone would care at all. Then as an adolescent I saw all the horror, at home and abroad, wrought by religion, and rejected it as superstitious mumbo-jumbo at best, and a pretense for violence, bigotry, and a return to the stone-age at worst. When I finally managed to encounter a packaging that let me see what might be good about it, I was grateful to finally understand what the fuss was about, even if I'm not all the way bought in.

I now have approximately the view that Sam Harris[1] does:

"I still considered the world’s religions to be mere intellectual ruins, maintained at enormous economic and social cost, but I now understood that important psychological truths could be found in the rubble."

[0] http://slatestarcodex.com/2013/06/09/all-debates-are-bravery...

[1] https://samharris.org/podcasts/chapter-one/


Yeah, I don't disagree- but I do sometimes wonder if those same psychological truths could have been derived without said religions. That said, I did read Harris' book Waking Up and thought it was interesting and his thought was that Buddhism did provide some specific/keen insights on psychology and the mind that we really haven't encountered or arrived at anywhere else, at least not before Buddhism did. So I think my stance would be near the statement you quoted too.

I do have a passing interest in Buddhism (but not as an adherent, though I do meditate, read about, and appreciate some of it) though both Buddhism and the better forms of Christianity I still don't think are for me (nor is any organized religion) but I can appreciate parts of them from a distance and those that are still adherents, if their actions follow positive paths from them. I think I've matured since my journey out of the faith began, so it's easier now to be a bit more measured (yet still firm) in my rejection of it.


Applications are open for YC Summer 2019

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact

Search: