See how paying attention to your function signature, utilizing language features where possible and using immutable data structures and pure functions can get you pretty far.
The basic unit of programming is the function. You build your program one function (or method) at a time. The smallest thing you can test in a unit test is a function. A function is also the smallest piece of code you can name and hence create a new abstraction. The whole point of a function is to encapsulate some piece of code and make it available to the rest of your program or other programs in a library.
Read full article