Learning when to create a custom class
One of the first questions you need to answer before creating a custom class should probably be, "Do I really need to create a custom class?" Object-oriented design often involves creating classes for each separate type of object. Functional design does away with classes completely, instead having functions that operate on immutable data structures. Procedural design is similar to functional design, but generally involves functions that operate on mutable data structures. No one design approach is best in all cases, and all design approaches have trade-offs. Ruby supports both object-oriented design, functional design, and procedural design, and often maintainable code has a mix of all three.
Choosing to create a custom class is always a trade-off. There is always a cost in creating a custom class versus using a core class, and that is that all classes result in some amount of conceptual overhead. That's true of both core classes...