Hacker News new | ask | show | jobs
by cheez 2129 days ago
That's funny. I was the opposite. When I was younger, I would just say "lets default to other people's solution to similar problems and move on" but as time went by, I've become more "let's define our problems well and find surgical solutions by others". It's a slight difference but makes a huge difference in productivity.

Another way to say it is instead of taking someone else's blueprint, we build our own blueprint and use pre-fabricated parts to realize the blueprint.

In the end, sometimes solutions look very similar but there is that one little bit that gives you a competitive advantage that no one else has.

4 comments

Years ago I analyzed the build vs. buy question and came up with a rule that I later found to be not so original: buy for parity, build for competitive advantage.

Most of any business is commodity stuff, typically things like HR, payroll, logistics, finance, security. Except if your business is one of those functions. Take Amazon's logistics for example. They aren't just any online retailer, they are the dominant online retailer in large part because they optimized the hell out of their logistics pipeline.

But if it's not your bread-and-butter, then yeah, go ahead and change your workflow to whatever COTS software you pick requires. You'll be fine. I worked for an insurance company, and they picked PeopleWare for their HR system and used commodity software tools for their actuarials. I worked for a very large shoe company they has SAP at the core of their (extremely complex) product lifecycle management system because their real business differentiator is their design and marketing.

That same insurance company had a customer sales pipeline tailored to a specific market – high-end professionals like doctors, lawyers, and similar – so they had custom software for that. That same shoe company had customized design and bill of materials systems so they could get their shoes to market quickly and globally.

I've been thinking a lot about the buy (or rent) vs build problem and one factor that keeps screaming at me is: who do I want to maintain it?

If my team or I want to maintain it, then build. If not, then buy/rent. I've built way too many things over the last few years only to realize again and again that things we build will need to be maintained by someone.

As you say, if it's a competitive advantage, then it makes sense for me to fix it, update it, adapt it, etc., otherwise it may be too costly to get distracted with maintaining it internally and easier to pay someone else to do that.

I agree with your rule, but I would add something extra:

Only build if you have the talent to do so. Early on Amazon managed to attract serious tech talent to the company. That enabled them to build. If a company can't do that then it's better to buy no matter what.

> Only build if you have the talent to do so

I would certainly hope that if the function is part of what differentiates the company competitively that they'd hire the talent. If they're trying to be the best "X" company and nobody who works there is any good at "X", they should fail. The dot-com era is littered with the graves of companies who thought that just having an idea was enough.

And yet it's surprising how a lot of companies simply won't match offers or try to play games with CoL. Or worst, consider engineering a cost center when it's central to the business.
> nobody who works there is any good at "X", they should fail.

Except almost every software startup in the last three decades was started by folks that were not experts in the domain they eventually became successful in.

Citations needed
Did online shop software even exist when Amazon started?
I was going to say "yes!" but then I looked it up that Amazon actually launched before Ebay as a business. I don't remember actually using Amazon personally until the 2000s but they've been around since 1994, almost a year before Ebay. I'm struggling to think of any earlier online retailers who would have been building ecommerce software.
Especially in the early days, the main competitors to online retail were catalogue services. I would think they have most business and logistics problems in common, minus running a web site.
The Internet Shopping Network launched before Amazon, but I doubt they wouldn't probably have considered licensing any of their platform.
> buy for parity, build for competitive advantage.

Yes. As Joel Spolsky put it in 2001:

If it’s a core business function — do it yourself, no matter what.

— Joel Spolsky, In Defense of Not-Invented-Here Syndrome: https://www.joelonsoftware.com/2001/10/14/in-defense-of-not-...

Joel was one of the voices that helped me understand that, while my analysis was useful for myself and the employer at the time, my conclusion was not an especially original insight.
I'd call it "rent for parity", not "buy". If all you have is a license, it's effectively a rental - not a purchase.

Rent for parity, buy or build for competitive advantage.

In practice this isn’t a problem. Take a non-software example:

Driving instructors typically have their cars on a 3 year hire purchase then return instead of buying. Why? Way back when, my driving instructor actually bought one of the cars. 3 months later, the engine failed and it was out of warranty.

Because of that, he realised that paying a monthly fee meant he had no surprise failures, he returned the car just as the clutch was burning out (learner drivers don’t have great driving technique, weirdly enough), and had a fresh car every 3 years for new learners.

Makes sense, but FWIW and IIRC, the terms of an ordinary car lease prohibit commercial use.
I don’t know the details but I’m assuming he’s using commercial lease hiring, or the U.K. rules are different. The mileage and wear and tear alone would mean he’d be unable to hide it.
If it's for business use you should be able to expense it.
If it’s for your own business who do you send the receipt to?
Yeah I've never heard anyone think a driving instructor car was a great buy, unless you like replacing basically every driving component which can fail. These cars have it rough. Especially manual. I'm surprised a driving instructor (of all people) would think of doing that without also wanting to do a full engine and transmission rebuild.
He told me his reasons but he put it down as an expensive lesson learnt.
I don't think rental covers any and all failures.
It’s not a rental, it’s hire purchase with a warranty, so the most common things that are going to fail are covered. Other things are just not that likely to fail in the first 3 years.
Shows how long I've been around. I still think of commercial software as something you buy and own.
If you can't resell it, you don't own it. Do you have examples of commercial software that you were allowed to resell?
There used to be a pretty big business in US of reselling expensive software licenses (think AutoCad etc). I remember Autodesk trying to stop it and not being able to which brings us to the current day.

Of course now that everything is under pay as you go SaaS model, that's out of window.

Still in Europe it is legal (http://curia.europa.eu/juris/document/document.jsf?docid=124...) and people do resell mundane licenses such as Windows.

Pretty much everything was resellable in Europe at least. Used computer games especially were a fairly big thing.
You said it better than I ever could have!
I can't take credit for the phrase, only for being thoughtful enough in my early career to more-or-less work it out from first principles.
Agree. Interns or grads always want to throw whatever the most hyped tool in some domain currently is at every remotely fitting problem. Ansible all the things!

That's not to say you should always roll your own. This is one of those things that's really hard to become good at: Decide early on whether to go with an existing solution or create something from scratch. (and if you go for an existing solution, which one?)

There's many arguments for both sides, one thing often mentioned is that settling for some popular solution or framework will make it easier for others to get into your project, but if you bend over backwards to get three different tools to do what you want instead of writing a hundred lines of bash, you might be doing something wrong.

What I do is decide that I am in charge of defining the machine, and the tools implement the machine. The tools are a means to an end. If the tools don't exist to implement the machine, I write them. If they do exist, great.
> That's funny. I was the opposite. When I was younger, I would just say "lets default to other people's solution to similar problems and move on" but as time went by, I've become more "let's define our problems well and find surgical solutions by others". It's a slight difference but makes a huge difference in productivity.

I thought the same way except I was even more insane. I thought lets just teach everyone English and we won't have to do any internationalization/localization.

But then you lose the advantage of being the first to localize for a given market!

But seriously, in a lot of cases, translating and localizing is actually the easy part of internationalizing a business.

> But seriously, in a lot of cases, translating and localizing is actually the easy part of internationalizing a business.

In my defence, I was not a very travelled child. I didn't even know about all the different kinds of power socket standards around the world.

> In the end, sometimes solutions look very similar but there is that one little bit that gives you a competitive advantage that no one else has.

I'm all for doing something "different" if it gives you some kind of core competitive advantage.

But the pain of being off the beaten path can really exceed small benefits you get in unexpected ways.

Save real innovation and risk for the things that are core, unique to you, and possible sources of large competitive leverage. Be boring elsewhere, maybe with an occasional small sprinkle of something clever mixed in. Evangelize the small bits of cleverness, in hopes that someone else will start maintaining it. ;)

I'm not sure if I'm misreading you, you're misreading me, or we're on the same page :-)

Ideally, I map out workflow and find tools that fit the workflow in the Unix philosophy. Well-defined, do one thing well. As opposed to monoliths that purport to do everything.

My experience has been that doing things in this way builds a system that is extremely robust to significant changes.

> The fact is, the great tools that have achieved widespread adoption understand the problems, and all their caveats, better than you. Picking any established tool to manage information and workflow and getting good at using it will usually yield better results.

The stagnated companies with questionable data analysis because they're looking at beautiful SAP or other ERP graphs that have been filled with incomplete data by their end users on awful interfaces would disagree...if they knew.