Data Systems Fundamentals
Master Operating Systems, Databases, and Concurrent Programming for Your First Year
Your first year of computer science introduces you to the systems that power modern computing.
269 pages13 chaptersNov 12, 2025Computer ScienceCreated by Kaj
About this book
This book guides you through the essential concepts you need to master: how operating systems manage hardware resources, how databases store and retrieve data reliably, and how multiple processes safely work together. You'll start with the fundamentals of OS kernels and process scheduling, then progress through memory management and file systems. Next, you'll explore relational database design using normalization and entity-relationship diagrams, learning to write effective SQL queries with joins and aggregate functions. Throughout, you'll confront the real challenges of concurrent programming—race conditions, deadlocks, and synchronization—and discover practical solutions using mutexes and semaphores. By connecting these concepts together, you'll develop the mental models needed to understand how systems work at scale and prepare for advanced topics like cloud computing. This book transforms abstract concepts into concrete understanding through clear explanations, practical examples, and progressive complexity.
Table of contents
- IntroductionWhy Systems Matter in Computer Science, What You'll Learn in This Book, How to Use This Book Effectively, How These Concepts Connect TogetherRead below
- Chapter 1: Operating System Kernels: The FoundationWhat Is an Operating System Kernel?, Core Responsibilities of the Kernel, Kernel Architecture and Design Patterns, The Kernel in Action: Real-World Examples
- Chapter 2: Process Scheduling: Managing CPU TimeUnderstanding Processes and Threads, Common Process Scheduling Algorithms, Comparing Scheduling Algorithms: Trade-offs and Performance, Context Switching and Scheduling Overhead
- Chapter 3: Memory Management: Speed Meets CapacityThe Memory Hierarchy: From Registers to Disk, Virtual Memory and Address Translation, Paging and Segmentation Strategies, Optimizing Memory Access Patterns
- Chapter 4: File Systems: Organizing Persistent DataFile System Architecture and Components, File Operations and Directory Structures, File System Performance and Optimization, Reliability and Data Persistence
- Chapter 5: Relational Databases: Structured Data StorageThe Relational Database Model, Tables, Keys, and Relationships, Constraints and Data Integrity, Introduction to Database Design Principles
- Chapter 6: Database Normalization: Eliminating RedundancyWhy Normalization Matters, First, Second, and Third Normal Forms, When to Denormalize: Performance vs. Consistency, Applying Normalization to Real Schemas
- Chapter 7: Entity-Relationship Diagrams: Visualizing Data ModelsER Diagram Components and Notation, Entities, Attributes, and Relationships, Cardinality and Participation Constraints, Converting ER Diagrams to Database Schemas
- Chapter 8: ACID Transactions: Guaranteeing ReliabilityThe ACID Properties Explained, Atomicity and Consistency: All or Nothing, Isolation and Durability: Safety and Recovery, Implementing ACID in Practice
- Chapter 9: SQL Fundamentals: Querying Relational DataSQL Syntax and Basic Queries, SQL Joins: Combining Data from Multiple Tables, Aggregate Functions and Grouping, Writing Efficient Queries
- Chapter 10: Concurrency Problems: Race Conditions and DeadlocksWhy Concurrency Is Challenging, Race Conditions: When Timing Goes Wrong, Deadlocks: Detection and Prevention, Real-World Concurrency Problems
- Chapter 11: Synchronization Primitives: Mutex and SemaphoresMutex Locks: Mutual Exclusion, Semaphores: Counting and Signaling, Concurrency Control Mechanisms, Common Synchronization Patterns
- Chapter 12: Data Modeling Best Practices: Designing for SuccessCore Principles of Effective Data Modeling, Designing for Scalability and Maintainability, Common Data Modeling Patterns, Case Studies: From Requirements to Schema
- Chapter 13: Bringing It Together: Systems in the CloudCloud Computing Basics, How OS and Database Concepts Scale Across Machines, New Challenges in Distributed Environments, Your Path Forward: Advanced Topics
- ConclusionKey Takeaways and Integrated Understanding, Continuing Your Learning Journey
- Glossary
- Further Reading and Resources
Introduction
Computer science is fundamentally about building systems that work reliably at scale. When you write a program, save a file, or query a database, you're interacting with layers of sophisticated systems that manage hardware resources, organize data, and coordinate multiple processes simultaneously. Understanding these systems transforms you from someone who uses computers to someone who truly comprehends how they work. This knowledge isn't just academic—it's the foundation for every significant computing challenge you'll encounter, from building web applications to designing distributed systems that serve millions of users.
Your first year of computer science introduces concepts that might seem disconnected at first: operating systems managing processes, databases storing information, and concurrent programs coordinating shared resources. These topics often appear in separate courses with different textbooks and assignments. Yet they're deeply interconnected. The same principles that govern how an operating system schedules processes apply to how databases handle concurrent transactions. The memory management strategies used by kernels inform how database systems cache frequently accessed data. Understanding these connections accelerates your learning and helps you see the bigger picture of how modern computing systems function.
This book bridges those gaps by presenting operating systems, databases, and concurrent programming as an integrated whole. You'll discover how kernels manage hardware resources through process scheduling and memory hierarchies. You'll learn to design relational databases using normalization and entity-relationship diagrams, then query them effectively with SQL. You'll confront the real challenges of concurrent programming—race conditions and deadlocks—and master the synchronization primitives that solve them. Most importantly, you'll understand how these concepts work together in real systems, from your laptop to cloud computing platforms. This integrated approach prepares you not just to pass exams, but to build systems that actually work.
The journey ahead requires both conceptual understanding and practical skills. You'll need to grasp abstract ideas like virtual memory and transaction isolation, but you'll also write SQL queries, analyze scheduling algorithms, and reason about concurrent execution. This book balances theory with practice, providing clear explanations alongside concrete examples and actionable techniques. Whether you're preparing for coursework, building personal projects, or simply curious about how computers really work, this foundation will serve you throughout your career in computer science.
Why Systems Matter in Computer Science
Every application you build runs on top of systems software that manages the underlying hardware. When you launch a program, the operating system kernel allocates memory, schedules CPU time, and provides access to files and network resources. When you save data, a database system ensures it's stored reliably and can be retrieved efficiently. When multiple users access your application simultaneously, concurrency control mechanisms prevent data corruption and maintain consistency. These systems form the invisible infrastructure that makes modern computing possible. Without understanding them, you're building on a foundation you don't comprehend, which limits your ability to diagnose problems, optimize performance, and design robust solutions.
Consider what happens when you submit a form on a website. Your browser sends a request across the network, where it's received by a web server running as a process managed by an operating system. That process queries a database, which uses its own memory management and file system to retrieve data. Multiple users might submit forms simultaneously, requiring careful synchronization to prevent race conditions. The database transaction ensures that either all changes succeed or none do, maintaining data integrity. Finally, the response travels back through network layers managed by kernel code. This simple interaction involves every major system concept covered in this book, demonstrating why systems knowledge is essential for building reliable applications.
Systems knowledge also explains why applications behave the way they do. When your program runs slowly, is it because of inefficient algorithms, poor memory access patterns, or contention for shared resources? When a database query takes too long, should you add an index, denormalize tables, or optimize the query itself? When concurrent users experience conflicts, do you need better locking strategies or a different transaction isolation level? Answering these questions requires understanding the systems beneath your code. This knowledge transforms debugging from guesswork into systematic problem-solving, and optimization from trial-and-error into informed decision-making.
The importance of systems knowledge grows as you advance in your career. Cloud computing platforms like AWS, Azure, and Google Cloud expose these concepts directly through their services. You'll configure virtual machines with specific CPU and memory allocations, choose database engines with different consistency guarantees, and design distributed systems that coordinate across multiple servers. Containerization technologies like Docker and Kubernetes require understanding process isolation and resource management. Microservices architectures demand knowledge of concurrent programming and distributed transactions. The systems concepts you learn now become the building blocks for understanding these advanced technologies.
Beyond practical applications, systems thinking develops a particular mindset that's valuable throughout computer science. Systems designers must balance competing concerns: performance versus simplicity, consistency versus availability, isolation versus concurrency. They must reason about edge cases, failure modes, and resource constraints. They must understand trade-offs and make informed decisions based on requirements and constraints. This analytical approach applies far beyond operating systems and databases—it's fundamental to software engineering, distributed systems, security, and virtually every area of computing. Learning to think about systems trains you to approach complex problems systematically and design solutions that work reliably under real-world conditions.
First-year students sometimes question why they need to learn about kernels, page tables, and transaction logs when they want to build mobile apps or machine learning models. The answer is that these abstractions leak. Your mobile app will encounter memory pressure and need to handle background processing efficiently. Your machine learning pipeline will need to process datasets larger than memory and coordinate distributed training across multiple GPUs. Understanding the systems beneath your code helps you use them effectively, diagnose problems when they arise, and make informed architectural decisions. This foundation becomes increasingly valuable as you tackle more complex challenges throughout your career.
Systems knowledge also provides context for the tools and frameworks you'll use daily. When you use an Object-Relational Mapping (ORM) library, understanding SQL and database design helps you use it effectively and recognize when it generates inefficient queries. When you use threading libraries or async/await patterns, understanding concurrency primitives helps you avoid race conditions and deadlocks. When you deploy applications to cloud platforms, understanding operating system concepts helps you configure resources appropriately and troubleshoot performance issues. The abstractions provided by modern tools are powerful, but they work best when you understand what they're abstracting. This book gives you that understanding.
What You'll Learn in This Book
This book is organized into three major sections that build progressively on each other. The first section covers operating systems fundamentals, starting with kernel architecture and progressing through process scheduling, memory management, and file systems. You'll learn how kernels manage hardware resources, how scheduling algorithms allocate CPU time, how memory hierarchies balance speed and capacity, and how file systems organize persistent data. These chapters provide the foundation for understanding how programs execute and interact with hardware, which informs everything else you'll learn about systems.
The operating systems section begins with kernel architecture, explaining the core responsibilities of the kernel and how it mediates between applications and hardware. You'll understand the difference between user space and kernel space, and why this separation matters for security and stability. The process scheduling chapter introduces algorithms like First-Come-First-Served, Shortest Job First, and Round Robin, analyzing their trade-offs in terms of throughput, response time, and fairness. You'll learn to calculate metrics like turnaround time and waiting time, and understand how context switching impacts performance. These concepts directly connect to how databases schedule transactions and how concurrent programs share CPU resources.
Memory management explores the hierarchy from registers through cache, RAM, and disk storage. You'll learn how virtual memory provides each process with its own address space, how page tables translate virtual addresses to physical addresses, and how paging and segmentation strategies manage memory allocation. The chapter on memory optimization covers cache locality, working sets, and page replacement algorithms like LRU and Clock. Understanding memory management is crucial for writing efficient code and for comprehending how databases cache data and manage buffer pools. These concepts reappear throughout the book as you learn about database performance and concurrent access to shared memory.
The second section focuses on relational databases, covering the relational model, normalization, entity-relationship diagrams, ACID transactions, and SQL. You'll learn to design databases that eliminate redundancy through normalization forms, visualize data models using ER diagrams, and ensure reliability through ACID properties. The SQL chapters teach you to write queries using joins and aggregate functions, and to optimize query performance through proper indexing and query structure. This section transforms abstract database theory into practical skills you can apply immediately to course projects and real applications.
Database design chapters emphasize the connection between conceptual modeling and physical implementation. You'll learn to identify entities and relationships in problem domains, represent them using ER diagrams with proper cardinality constraints, and convert those diagrams into normalized relational schemas. The normalization chapter walks through first, second, and third normal forms with concrete examples, showing how each form eliminates specific types of redundancy and anomalies. You'll also learn when denormalization makes sense for performance reasons, understanding the trade-offs between consistency and query efficiency. These design skills are essential for building maintainable databases that scale as requirements evolve.
The ACID transaction chapter connects database concepts back to operating systems by showing how databases use similar techniques to ensure reliability. Atomicity requires careful coordination of multiple operations, similar to how operating systems manage process state. Consistency enforcement uses constraints and triggers, analogous to how kernels enforce security policies. Isolation levels prevent concurrent transactions from interfering with each other, using locking mechanisms similar to those in concurrent programming. Durability requires write-ahead logging and recovery procedures that mirror file system journaling. Understanding these connections helps you see databases as sophisticated systems built on operating system primitives.
The third section addresses concurrent programming, covering race conditions, deadlocks, and synchronization primitives like mutexes and semaphores. You'll learn to identify concurrency problems, understand why they occur, and apply synchronization mechanisms to prevent them. This section brings together concepts from both operating systems and databases, showing how multiple processes or threads coordinate access to shared resources. You'll learn common synchronization patterns like producer-consumer and readers-writers, and understand how databases use these same patterns to implement transaction isolation and concurrency control.
The concurrency chapters use concrete examples to illustrate abstract concepts. You'll see how race conditions occur when multiple threads increment a shared counter without synchronization, and how mutex locks prevent this problem by ensuring mutual exclusion. You'll learn to recognize deadlock conditions using resource allocation graphs, and understand prevention strategies like lock ordering and timeouts. The semaphore chapter shows how counting semaphores coordinate access to limited resources, and how binary semaphores provide signaling between processes. These synchronization primitives appear throughout systems software, from kernel scheduling to database transaction management, making them essential tools for any systems programmer.
The final chapters integrate everything you've learned by examining how these concepts scale to distributed systems and cloud computing. You'll see how operating system concepts like process scheduling and memory management extend to virtual machines and containers. You'll understand how database concepts like transactions and consistency face new challenges in distributed environments. You'll learn about the CAP theorem and eventual consistency, which represent fundamental trade-offs in distributed systems. This integrated perspective prepares you for advanced topics like distributed databases, microservices architectures, and cloud-native application development.
How to Use This Book Effectively
This book is designed for progressive learning, with each chapter building on concepts from previous chapters. The early chapters on operating systems provide essential background for understanding databases and concurrency. The database chapters assume you understand how operating systems manage resources. The concurrency chapters draw on examples from both operating systems and databases. For this reason, reading chapters in order produces the best learning outcomes. If you're using this book alongside coursework that covers topics in a different sequence, you can jump to specific chapters, but be prepared to reference earlier material when concepts build on previous foundations.
Each chapter follows a consistent structure designed to support learning. Chapters begin with conceptual explanations that establish the "what" and "why" before diving into the "how." Concrete examples follow abstract concepts, showing how ideas work in practice. Code snippets, diagrams, and step-by-step procedures illustrate complex processes. Chapters conclude by connecting concepts to broader themes and previewing upcoming material. This structure helps you build mental models progressively, starting with high-level understanding and adding detail incrementally. When you encounter difficult concepts, try reading the section multiple times, focusing first on the big picture before worrying about every detail.
Active learning significantly improves retention and understanding. As you read, pause regularly to test your comprehension. Can you explain the concept in your own words? Can you think of additional examples beyond those provided? Can you predict how the concept connects to material you've already learned? When chapters present algorithms or procedures, work through them step-by-step with your own examples. When SQL queries appear, try modifying them to answer different questions. When concurrency problems are described, sketch out the execution timeline to visualize how race conditions occur. This active engagement transforms passive reading into deep learning.
The book includes numerous examples and exercises designed to reinforce concepts. Work through these carefully rather than skipping ahead. When examples show SQL queries, execute them in a database system like PostgreSQL or SQLite to see the results firsthand. When scheduling algorithms are explained, calculate the metrics for different process arrival patterns. When synchronization problems are presented, try to identify the race conditions before reading the solution. This hands-on practice builds intuition and reveals gaps in understanding that passive reading might miss. The time invested in working through examples pays dividends in deeper comprehension and better retention.
Supplement this book with practical experimentation using real systems. Install a Linux distribution and explore kernel parameters using commands like top, ps, and vmstat. Set up a database system and practice writing queries against sample datasets. Write simple concurrent programs using threading libraries in your preferred programming language. This experimentation makes abstract concepts concrete and reveals behaviors that are difficult to convey through text alone. You'll encounter edge cases, performance characteristics, and failure modes that deepen your understanding beyond what any book can provide. The combination of reading and experimentation produces the strongest learning outcomes.
Use the book's structure to support review and reference. The table of contents provides a roadmap of topics, making it easy to locate specific concepts when you need to refresh your memory. The glossary defines technical terms concisely, serving as a quick reference when you encounter unfamiliar terminology. The further reading section points to additional resources for topics you want to explore in greater depth. When preparing for exams or working on projects, use these features to quickly locate relevant material rather than re-reading entire chapters. This strategic use of the book as a reference tool extends its value beyond initial learning.
Connect the material to your coursework and projects actively. When your operating systems course covers process scheduling, read the corresponding chapter in this book for a different perspective and additional examples. When your database course assigns a schema design project, apply the normalization and ER modeling techniques from this book. When you encounter concurrency bugs in your programming assignments, consult the synchronization chapters for debugging strategies. This integration of multiple resources strengthens understanding by presenting concepts from different angles and in different contexts. The book works best as part of a broader learning ecosystem that includes lectures, assignments, and hands-on experimentation.
Finally, recognize that systems knowledge develops gradually through repeated exposure and practice. You won't master these concepts after a single reading. Plan to revisit chapters as you gain experience and encounter concepts in different contexts. Ideas that seem abstract initially will become clearer as you see them applied in coursework and projects. Concepts that seem disconnected will reveal their relationships as you progress through the book. This iterative learning process is normal and expected. Be patient with yourself, focus on steady progress rather than immediate mastery, and trust that understanding will deepen over time with continued study and practice.
How These Concepts Connect Together
Operating systems, databases, and concurrent programming might seem like separate topics, but they're deeply interconnected through shared principles and common challenges. At the highest level, all three domains deal with managing resources efficiently, coordinating concurrent access, and ensuring reliability despite failures. Operating systems manage hardware resources like CPU, memory, and storage. Databases manage data resources, ensuring they're stored reliably and retrieved efficiently. Concurrent programming manages shared resources accessed by multiple processes or threads. The techniques used in each domain often mirror each other, with concepts from operating systems appearing in database implementations and concurrency control mechanisms appearing in both.
Process scheduling in operating systems directly parallels transaction scheduling in databases. Just as an OS scheduler decides which process gets CPU time, a database scheduler decides which transaction can access data. Both use similar algorithms and face similar trade-offs between throughput and fairness. The Round Robin scheduling algorithm used for processes has analogs in how databases handle concurrent queries. Priority scheduling in operating systems resembles how databases might prioritize certain transactions over others. Understanding process scheduling helps you grasp transaction scheduling, and vice versa. Both domains must prevent starvation, minimize waiting time, and maximize resource utilization while maintaining fairness.
Memory management concepts appear throughout database systems. Databases use buffer pools that function like operating system page caches, keeping frequently accessed data in memory to avoid slow disk I/O. The LRU (Least Recently Used) page replacement algorithm used by operating systems also appears in database buffer management. Virtual memory concepts like paging inform how databases organize data on disk and manage working sets. When you understand how operating systems manage memory hierarchies, you can better understand why databases cache query results, how indexes improve performance by reducing disk access, and why query optimization focuses on minimizing I/O operations. The memory management principles are identical; only the scale and specific implementation details differ.
File systems and database storage engines share fundamental concerns about organizing data on persistent storage. Both must allocate space efficiently, support fast lookups, and ensure data isn't lost during crashes. File systems use techniques like journaling to recover from failures, while databases use write-ahead logging—essentially the same concept with different terminology. B-trees, a data structure used extensively in file systems for directory indexing, also form the foundation of database indexes. Understanding file system architecture helps you comprehend database storage engines, and understanding database indexing illuminates file system design choices. Both domains balance the same trade-offs between read performance, write performance, and space efficiency.
Concurrency control mechanisms in databases build directly on synchronization primitives from operating systems. When a database uses locks to prevent concurrent transactions from interfering with each other, it's using mutex locks or semaphores provided by the operating system. The two-phase locking protocol used by databases to ensure serializability is a sophisticated application of basic locking primitives. Deadlock detection and prevention strategies in databases mirror those used in operating systems for managing resource allocation. Understanding mutex locks and semaphores at the operating system level provides the foundation for understanding transaction isolation levels and concurrency control in databases. The concepts scale from simple shared counters to complex distributed transactions, but the fundamental principles remain constant.
ACID transaction properties connect to operating system concepts in illuminating ways. Atomicity requires the ability to roll back partial changes, similar to how operating systems handle process crashes and restore consistent state. Consistency enforcement uses constraints and validation, analogous to how operating systems enforce security policies and resource limits. Isolation requires preventing concurrent transactions from seeing each other's intermediate states, using locking mechanisms identical to those in concurrent programming. Durability demands that committed changes survive crashes, requiring write-ahead logging similar to file system journaling. Each ACID property maps to operating system concepts, showing how databases are sophisticated applications built on OS primitives.
The progression from single-machine systems to distributed systems reveals how these concepts scale and evolve. On a single machine, process scheduling allocates one CPU among multiple processes. In distributed systems, load balancing allocates multiple CPUs among multiple processes across different machines. On a single machine, mutex locks coordinate access to shared memory. In distributed systems, distributed locks coordinate access to shared resources across the network. On a single machine, ACID transactions ensure consistency within one database. In distributed systems, distributed transactions ensure consistency across multiple databases. The fundamental challenges remain the same—coordination, consistency, and reliability—but the solutions become more complex as systems scale across multiple machines.
Understanding these connections accelerates your learning by revealing patterns that repeat across domains. When you encounter a new concept, you can often map it to something you already understand from a different context. Database buffer pools make sense if you understand OS page caches. Transaction isolation levels make sense if you understand concurrent programming synchronization. Distributed consensus protocols make sense if you understand how operating systems coordinate processes. This pattern recognition transforms learning from memorizing disconnected facts to understanding variations on common themes. The mental models you build in one domain transfer to others, making each new concept easier to grasp because it fits into an existing framework.
This integrated understanding also helps you make better design decisions when building systems. Should you use database transactions or application-level locking? The answer depends on understanding the trade-offs between database isolation levels and explicit synchronization primitives. Should you cache data in your application or rely on database query caching? The answer depends on understanding memory hierarchies and the costs of different storage layers. Should you use a single database or partition data across multiple databases? The answer depends on understanding concurrency control, consistency guarantees, and distributed systems trade-offs. These decisions require seeing how different system components interact and understanding the implications of choices at each layer of the stack.
As you progress through this book, actively look for these connections. When you learn about process scheduling, think about how it might apply to databases. When you learn about database normalization, consider how it relates to organizing data in file systems. When you learn about mutex locks, anticipate how they'll appear in database transaction management. This active connection-making transforms the book from a linear sequence of topics into an interconnected web of concepts that reinforce each other. The more connections you identify, the deeper your understanding becomes, and the better prepared you'll be to tackle complex systems that integrate all these concepts together. This holistic perspective is what separates systems programmers who truly understand their craft from those who merely know isolated facts.
This is the end of the free sample. The full book has 13 chapters.
Want this book written for you?
Tell us your goals and background, and get your own version of this book, tailored by AI to you.
Benefits of AI-tailored books
- Read one book, not ten:
- all the Computer Science knowledge you need, gathered into a single book.
- Save days of learning:
- tell us your goals, choose your topics, and the whole book is built around them.
- Learn effortlessly:
- Computer Science book written for your specific background and expertise.
- Understand at a glance:
- includes charts, tables, timelines, checklists, decision trees, and more.
- Stay current:
- written the day you order it, not years ago.
- Trust what you read:
- every book is checked for accuracy, with real research when your subject needs it.
Create your unique book in 3 steps
- 1. Select your focus
Select the focus of your Computer Science book and share your background
- 2. Personalize your book
Specify your goals and choose sub-topics to include
- 3. Get your tailored book
Your book is ready in 10 minutes. Read it online, download as EPUB or PDF, or send to Kindle.
Frequently asked questions
- What is TailoredRead?
TailoredRead creates complete, full-length nonfiction ebooks, written specifically for you. Tell us what you want to learn and why, and TailoredRead writes you a complete ebook on it, with charts, tables, and diagrams throughout. Read it online, on Kindle, or on any e-reader, or download it as a PDF or EPUB. Every book is written fresh the day you order it.
- How is the book tailored to me?
Before anything is written, you answer a few short questions about your goals, your background, and the topics you care about. Your book is then planned around your answers: written at your level, focused on your goals, and covering the topics you chose, instead of the one-size-fits-all book a store sells everyone.
- Will it read like generic AI content?
No. Your book isn't a chat transcript: it's planned chapter by chapter before a single word is written, told in a clear book voice, and explains ideas visually with charts, tables, and diagrams. After writing, every book goes through an editorial pass that polishes chapters so the book reads consistent from start to finish. Judge for yourself: browse thousands of sample books on our Explore Books page.
- How accurate is the content?
Our AI first checks whether your subject needs live research. Niche and fast-moving subjects are researched before writing, and the book plan and chapters are grounded in what it finds. After writing, every book goes through a quality pass that checks its facts and consistency, and researched books list their sources in a Notes section at the back.
- How long is the book?
You choose the length: Comprehensive (250-300 pages), Detailed (150-200 pages), Essential (70-100 pages), or Short (30-50 pages).
- Does the book include visuals?
Yes. Every book includes charts, tables, and diagrams: timelines, checklists, step-by-step guides, decision trees, comparison tables, matrices, and bar charts. A typical book includes dozens of these visual elements.
- Can I read it on Kindle? What formats can I download?
Yes. Every book can be read in our online reader or downloaded as a PDF or EPUB. The EPUB can be opened with Kindle, Apple Books, Kobo, and any e-reader. The Commercial and Author licenses also include an editable Word (DOCX) and Markdown download.
- How much does it cost?
About the price of a regular ebook. The exact price depends on your book's length and complexity, from $2 for the shortest books to $35 for the most comprehensive, and it's shown when you review your book, before you commit to anything. Each book is a one-time purchase, yours to keep, no subscription. Licenses that let you share, teach, or publish your book range from $35.99 to $49.99.
- Can I preview the book before purchasing?
Before you pay, you'll see what your book will cover: the title, a detailed description, the estimated length, and the complete chapter-by-chapter table of contents, so you know what you're getting before you decide. The full text itself is written after you purchase.
- How long does it take to create a book?
About 10 minutes. You can start reading the opening chapters while the rest is still being written.


