Live data from Hacker News

Stop future-proofing software

medium.com

61–63 of 63 posts

Re: Stop future-proofing software

#61

My mantra is - never assume features, but always assume change. As others have mentioned - it's orders of magnitude easier to add a layer of abstraction to a simple system as requirements evolve, than it is to remove an unneeded one down the line. The latter is often impossible.

As a software engineer, you should be building a platform on which the product can exist.

I rarely, if ever see this done. Probably because it takes a big risk as an engineer to actually do it.

Re: Stop future-proofing software

#62
post #55

Earlier quoted context omitted.

I admit to being a composition bigot when green fielding some functionality, and I've never felt like code reuse was a thing either mattered for. I like composition because it's easier to create small testable component contracts. But I maintain plenty of inheritanace based code and, while it's less testable, it's... fine. Not really a big deal to use either or both. Edit: to be clear, when I hear "code reuse", I thi…

I like composition because it's easier to create small testable component contracts. You don't need testability or 'greenfielding' for this. 'Design by contract', as you mention, is a useful way to think about this, without attaching value judgments to composition or inheritance. Inheritance is a much stronger and therefore burdensome contract. It's much less likely bits of your model can really adhere to it. The adv…

Right. Inheritance implies contracts that include behavior, composition implies contracts that don't.

I talk of greenfielding because it's rare that the inheritance alone holds a codebase back so much that it needs to be rewritten. But code I originate is always composition based

Re: Stop future-proofing software

#63

Earlier quoted context omitted.

In this context it means that it's easy to make changes. As in add new functionality.

But you can’t make it equally easy to add in every type of functionality. For any type of extensibility design you bake in, some other types of extensibility now become harder. So “making it flexible” hinges entirely on whether or not you can correctly forecast exactly which types of flexibility you’ll need. But this is no easier, and often harder, than predicting how end user requirements might change in the first p…

What it means in practice is no extensibility baked in at all.

Rather it is very modular design, that is very simple, bordering on dumb.

This is all very much easier said than done. "Simple ain't easy".

Post reply on HN