What is Software? Functional / Business Lens
1 / 1 / 2022
My favorite definition of software is it is everything in a computer that cannot be kicked, only cursed.
Sadly, that definition doesn’t help us in our efforts to make the best software around. It does however highlight the difficulty in truly defining software.
In the business world, software is primarily viewed as the following process:
- Data in
- User input (by admins, customers, and so on)
- External data (apis, and so on)
- Internal data (databases, events)
- This is the “senses” of the software
- Data transformed
- Transform the Data In into Data Out
- This is the “heart” or “brain” of the software, what makes it truly unique
- Data out
- Display the data in appropriate ways
- This is the most valuable part of software, what it actually gives you
- HTML / CSV / PDF / Emails / Notifications / JSON / Webhooks are all valid ways to transmit data depending on the use case
Functional programming excels in situations like this. We have a lot of the same kind of data, performing many different operations on the same set of data.
With the above understanding, software development boils down to a few questions:
- What is the end result(s)? What value am I providing to the end user(s)?
- What data do I need in order to produce the end results?
- Is the data I need accessible and worth the effort to collect?
Like all lenses, this highlights some aspects of software and hides other aspects, but is a useful guide when planning out your software product.