Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

> They usually overlook that software requirements vary greatly and can be quite complex, while the physical requirements of a chair are not going to vary much across chair designs.

I feel as though that's somewhat addressed in the essay:

  Yes, I hear you claiming that your project is special and
  cannot be made functionally complete because, you know,
  circumstances X, Y and Z.

  And here's the trick: If it can't be made functionally
  complete it's too big. You've tried to bite off a piece
  that's bigger than you can swallow. Just get back to the
  drawing board and split off a piece that can be made
  functionally complete. And that's the component you want
  to implement.
Software engineering is an offshoot of systems engineering, which is often described as "managing complexity". I don't think it's at all unreasonable for people to look at the methodologies actual systems engineers use and learn from them. One of those things is decomposition of tasks, what this article is about. If you're making a message queue system, divide it into subsystems that are each more feasible. Your over-the-wire data format protocol is one thing (asn.1, protobufs, etc.), your concurrency library and patterns in your systems are another (go's channels, erlang's processes, libmill from the article), your database is another. Once you have your system decomposed in this fashion you can do each part, and actually finish them, and assemble your complete system by combining them.

Once they're small enough the Unix philosophy applies. Write components that do one thing and do it well, and design them in a way to communicate with each other.



> If it can't be made functionally complete it's too big.

Too big for whom? Most people on HN aren't building systems software or embedded software with a strictly-defined purpose; they're building an app business or a service business, where the "purpose" is "to make money" and adding additional features or "checkboxes" are how you attract more customers to make that money.

A program can be done. A product usually can't be, as long as its authors want to continue to rely on it to put food on the table.




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

Search: