Goals:

  • Determine capability to understand the problem and gather the necessary requirements

  • Understand thought process and approach in coming up with the solution/design

  • Determine overall knowledge of different software components

    • Databases (SQL, noSQL)

    • Messaging systems (queues, topics)

    • APIs

  • Determine knowledge/experience in designing solutions using UML or other similar tools/frameworks

    • High-level architecture diagram (ex: data flow diagram, component/deployment diagram)

    • Use case diagram

    • Class diagram or ERD

    • Activity diagram

    • Other diagrams

  • Determine knowledge of architectural/coding/design patterns

  • Determine ability to communicate reasons for decisions

Problem Description:

Design a library system that handles the primary housekeeping functions of a library. The system includes management of books and the borrowers. It also includes tracking of the books and their checkouts, as well as borrowers’ profiles.

System Requirements:

The specific system requirements can be given to the candidate or the candidate can ask for clarifications leading to obtaining these requirements.

  1. Any library member should be able to search books by their title, author, subject category as well by the publication date.

  2. Each book will have a unique identification number and other details including a rack number which will help to physically locate the book.

  3. There could be more than one copy of a book, and library members should be able to check-out and reserve any copy. We will call each copy of a book, a book item.

  4. The system should be able to retrieve information like who took a particular book or what are the books checked-out by a specific library member.

  5. There should be a maximum limit (5) on how many books a member can check-out.

  6. There should be a maximum limit (10) on how many days a member can keep a book.

  7. The system should be able to collect fines for books returned after the due date.

  8. Members should be able to reserve books that are not currently available.

  9. The system should be able to send notifications whenever the reserved books become available, as well as when the book is not returned within the due date.

  10. Each book and member card will have a unique barcode. The system will be able to read barcodes from books and members’ library cards.

Reference:

https://www.educative.io/courses/grokking-the-object-oriented-design-interview/RMlM3NgjAyR

(The link also includes sample diagrams for the proposed solution.)