University of Michigan Computer Science and Engineering logo

EECS 498 System Design of a Search Engine
Winter 2026

This is a frozen archive of my course materials from winter 2026. I have since left the university.

Instructor

Nicole Hamilton
nicole@nicolehamilton.com
C:  425-765-9574
Office hours Tuesdays and Thursdays, 3:00 pm to 4:00 pm

Staff

Christopher Davis
Rickey Dong

Lectures

Tuesdays and Thursdays, Dow 1017
Section 005: 12:00 pm to 1:30 pm
Section 012: 1:30 pm to 3:00 pm
Lectures will be recorded but attendance is strongly advised as lectures and labs will also serve as your team meetings.

Labs

Fridays, IOE 1610
Section 051 (goes with 005): 3:30 pm to 5:30 pm
Section 121 (goes with 012): 1:30 pm to 3:30 pm
Labs will also be recorded.

Details

Syllabus PDF icon   Microsoft Word icon
Schedule PDF icon   Microsoft Excel icon
Edstem https://edstem.org/us/courses/89542/discussion
Autograder https://autograder.io/web/course/358
Midterm February 26,2026
Final April 29, 2026
Prerequisite EECS 281
Credit hours 4
Classification based on your major:
CE MDE or EECS elective
CSE MDE or Flex Tech elective
CS-LSA Capstone or Flex Tech elective
EE and DS Flex Tech elective

Overview

This is a course in how to tackle a large system programming project in C++. Students will work in teams of 6 to write a complete internet search engine from scratch.

My objective is to offer students an opportunity to work on a significant relatable design project (something you can explain to your family and to recruiters) early in your careers. I want the experience to be like working on the startup dev team for a new product (like the one I had on the startup team for what became the Bing engine.) I hope this class will help you get a job.

Fifty percent of your grade will be on the project, evenly split between your team’s performance compared to others and your individual contribution to your team. Thirty percent of your grade will be on the exams. Twenty percent is homework.

Engines submitted in the past have ranged in size. The largest have been around 20 KLOC, but the average has been around 6 KLOC. (Yes, a little smaller than you might have guessed.) Sounds easy (maybe) but there’s more ambiguity and you’ll be working on a larger team than in most classes.

This will be the sixth time for this course after a four-year hiatus, so the content is finally pretty stable. Students reported being very satisfied last time in their W25 course evals

Learning objectives

Here is what I hope you will get from the class.

  1. The experience of working on the startup dev team for a significant project in C++, building a complete distributed multithreaded internet search engine from scratch.

  2. The knowledge, skills and ability to work with others to research, define, estimate, plan and carry out the design of such a large, complex software project, especially, one you don’t already know how to do.

  3. An understanding of how a large system is decomposed into separable parts with interfaces exposing a limited surface area and how they talk to each other.

  4. An understanding of how a search engine works and how its parts talk to each other.

  5. An understanding of and ability to use the low-level operating system facilities for the file system, process and thread creation, synchronization, IPC and sockets.

  6. How to distribute a system across multiple machines to break up a problem that’s too big for one machine.

  7. An appreciation of software as art and of the software design process as a fundamentally creative activity where you make choices.

  8. The ability to communicate your results by demonstrating your product, producing a final report and presenting your work to the class and invited guests in a professional manner.

  9. Exposure to various other topics related to the practice of engineering including professional ethics, organization behavior, negotiations, and the social impact of technology.

Lectures

The course is broken roughly into thirds. The first third covers the Linux OS facilities we'll use. The middle third explains how each piece of the engine works. The final third is devoted to professional growth while you build your engines.

1.

Intro to System Design of a Search Engine

Start button5   Start button12   PDF icon  PowerPoint icon

2.

Search engine basics

Start button5   Start button12   PDF icon  PowerPoint icon

3.

Project planning

Start button5   Start button12   PDF icon  PowerPoint icon

4.

HTML Utf8 HTTP redirects

Start button5   Start button12   PDF icon  PowerPoint icon

5.

Intro to the filesystem

Start button5   Start button12   PDF icon  PowerPoint icon

6.

Hashing and serializing data

Start button5   Start button12   PDF icon  PowerPoint icon

6.

Mapped files and hashing

Start button5   Start button12   PDF icon  PowerPoint icon

7.

Memory-mapped hash tables

Start button5   Start button12   PDF icon  PowerPoint icon

8.

Processes and threads

Start button5   Start button12   PDF icon  PowerPoint icon

9.

Locks and condition variables

Start button5   Start button12   PDF icon  PowerPoint icon

10.

Tcp-Ip DNS sockets

Start button5   Start button12   PDF icon  PowerPoint icon

11.

SSL

Start button5   Start button12   PDF icon  PowerPoint icon

12.

LinuxTinyServer

Start button5   Start button12   PDF icon  PowerPoint icon

13.

The index and constraint solver

Start button5   Start button12   PDF icon  PowerPoint icon

14.

The constraint solver

Start button5   Start button12   PDF icon  PowerPoint icon

15.

The frontier and robots.txt

Start button5   Start button12   PDF icon  PowerPoint icon

16.

The query compiler

Start button5   Start button12   PDF icon  PowerPoint icon

17.

Ranking

Start button5   Start button12   PDF icon  PowerPoint icon

18.

Sitemaps and shingles

Start button5   Start button12   PDF icon  PowerPoint icon

19.

Ethics

Start button5   Start button12   PDF icon  PowerPoint icon

20.

The Citicorp crisis and Backdoor to the iPhone

Start button5   Start button12   PDF icon  PowerPoint icon

21.

Negotiations

Start button5   Start button12   PDF icon  PowerPoint icon

22.

Organizational behavior

Start button5   Start button12   PDF icon  PowerPoint icon

23.

Time value of money

Start button5   Start button12   PDF icon  PowerPoint icon

24.

Intellectual property and Marketing

Start button5   Start button12   PDF icon  PowerPoint icon

25.

Review and reflections

Start button5   Start button12   PDF icon  PowerPoint icon

Labs

1

Speed dating

Start button51   Start button121   PDF icon  PowerPoint icon

2

Introduction

Start button51   Start button121   PDF icon  PowerPoint icon

3

Developer Workflow

Start button51   Start button121   PDF icon  PowerPoint icon

4

CMake

Start button51   Start button121   PDF icon  PowerPoint icon

5

GTest

Start button51   Start button121   PDF icon  PowerPoint icon

6

IP and Webpages

Start button51   Start button121   PDF icon  PowerPoint icon

7

Midterm review

Start button51   Start button121   PDF icon  PowerPoint icon

8

Check In

Start button51   Start button121   PDF icon  PowerPoint icon

9

Design Choices

Start button51   Start button121   PDF icon  PowerPoint icon

1

Intro to Google Cloud

Start button51   Start button121   PDF icon  PowerPoint icon

11

Google Cloud Continued

Start button51   Start button121   PDF icon  PowerPoint icon

Autograder assignments

Each assignment is worth 100 points. The first assignment is an individual assignment. The rest are group. The zips contain starter files.

Contact me if you're an instructor and would like access to my solutions or test cases.

  1. Most positive subsequence PDF icon   Microsoft Word icon   Zip file icon

    You are to write a function that finds the most positive subsequence in an array of ints and a simple wrapper to allow it to be tested. You are also asked to upload a screenshot of your graphical debugger.

  2. String and vector PDF icon   Microsoft Word icon   Zip file icon

    You are to create simple string and vector templates and submit them to the autograder.

  3. Utf8 PDF icon   Microsoft Word icon   Zip file icon

    You will create means of encoding and decoding Utf8 characters to be submitted to the autograder.

  4. HTML parser PDF icon   Microsoft Word icon   Zip file icon

    Given the starter code, you are to implement the HtmlParser class and the LookupPossibleTag( ) function and submit to the autograder.

  5. HashTable and Top10 PDF icon   Microsoft Word icon   Zip file icon

    You are to create simple hash table template, then use it to create a function and wrapper utility that can report the top N most frequent words in a text file.

  6. HashBlob and HashFile PDF icon   Microsoft Word icon   Zip file icon

    You are to create a HashBlob, a serialization of a HashTable that can be written to a file as a still-working hash table.

  7. Multithreaded file operations PDF icon   Microsoft Word icon   Zip file icon

    This assignment will ask you to create a couple of simple multithreaded programs, exposing you to the pthreads library.

  8. LinuxGetUrl PDF icon   Microsoft Word icon   Zip file icon

    You are to create a command-line utility to read web pages using HTTP.

  9. LinuxGetSsl PDF icon   Microsoft Word icon   Zip file icon

    You are to create a command-line utility to read web pages using HTTPS and SSL.

  10. LinuxTinyServer PDF icon   Microsoft Word icon   Zip file icon

    You will complete the design of LinuxTinyServer, a simple Linux web server and submit it to the autograder.

  11. Bloom filter PDF icon   Microsoft Word icon   Zip file icon

    You will create a Bloom filter.

  12. Robots.txt PDF icon   Microsoft Word icon   Zip file icon

    You are to implement a RobotsTxt class that can compile a robots.txt file to extract the rules and any sitemaps and test whether a user is allowed access.

  13. Expression parser PDF icon   Microsoft Word icon   Zip file icon

    You will be asked to create a simple expression parser and interpreter to be submitted to the autograder.

Individual assignments

Each assignment is worth 100 points.

  1. Introduce yourself PDF icon   Microsoft Word icon

    Please tell me a little bit about yourself and include a recent picture.

  2. Gantt chart PDF icon   Microsoft Word icon

    You are to create a Gantt chart showing a plan to apply to graduate school.

  3. Join a team PDF icon   Microsoft Word icon

    Join with others to form a team of 6 and pick a name for yourselves.

  4. Rate the group photos PDF icon   Microsoft Word icon

    You are asked to fill out a survey rating the group photos.

  5. Rate the team presentations PDF icon   Microsoft Word icon

    You will need to physically attend at least one session each day and fill out a survey rating the presentations you watched.

  6. Rate your teammates PDF icon   Microsoft Word icon

    You are asked to give your honest, candid assessments of your teammates' contributions to your team and what it's like to work with them.

Group assignments

Each assignment is worth 100 points except the final report, worth 250, and your engine's functionality, worth 500.

  1. Group photo PDF icon   Microsoft Word icon

    You are to form groups of 6, choose a name for your group and submit a photo of yourselves. Your grade will be based on a survey of the class.

  2. Project plan PDF icon   Microsoft Word icon

    You are to submit a plan for your project as a PDF.

  3. Presentation PDF icon   Microsoft Word icon

    You are to prepare and deliver a 30-minute presentation of the results from your project to the class. You must demo. Your grade on the presentation will be determined by survey.

  4. Final reports PDF icon   Microsoft Word icon

    You are to submit a final report on your project.

  5. Project archive

    You are to upload a complete final archive your project. It should include all your code, sensibly organized with helpful readmes.

  6. Search engine functionality PDF icon   Microsoft Excel icon

    Please fill in the column describing your engine on a shared Google spreadsheet represented here as an Excel spreadsheet. The rubric information was hidden.

Exams

Each exam is worth 100 points. Both are in-class. The midterm is mandatory but the final is optional. If you choose not to take the final or if you score less than on your midterm, I will use your midterm score.

  1. Midterm

    Exam PDF icon   Microsoft Word icon
    Solution PDF icon   Microsoft Word icon

  2. Final

    Exam PDF icon   Microsoft Word icon
    Solution PDF icon   Microsoft Word icon

Resources

1.

Dennis Ritchie and Ken Thompson, "The UNIX Time-Sharing System", Communications of the ACM, July 1974.

PDF icon  

2.

Bell System Technical Journal, UNIX Time-Sharing System issue, July-August 1978. (Requires you to create a free account.)

PDF icon  

3.

Marc Nayork and Allan Heydon, "High Performance Web Crawling", describing Mercator. Compaq Systems Research Center, September 26, 2001.

PDF icon  

4.

Mike Burrows, "AltaVista Architecture and Indexing", January 18, 2000, lecturing at the University of Washington Seatte. (Slides viewable on Slideshare.)

Start button

5.

Andrei Z. Broder, "Identifying and Filtering Near-Duplicate Documents", COM '00: Proceedings of the 11th Annual Symposium on Combinatorial Pattern Matching", June 21, 2000.

PDF icon  

6.

Nicole Hamilton, "Dynamic Ranking", circulated internally at Microsoft, November 2004.

PDF icon  

7.

Example forms plugins for the LinuxTinyServer. One uses POST, the other uses GET.

Zip file icon

8.

Christopher D. Manning, Prabhakar Raghavan, and Hinrich Schütze, Introduction to Information Retrieval, Chapter 19, "Web search basics", Cambridge University Press, 2009. (Also archived here.)

PDF icon  

9.

Stefan Büttcher, Charles L. A. Clarke, and Gordon V. Cormack, Information Retrieval: Implementing and Evaluating Search Engines, MIT Press, 2010. (Sorry, no free copy is available on the web.)

Reflections

This what I wrote in May for my lecturer evaluation, right after W26 ended. Sadly, there is no next time.

Every time I teach a class, I think about how I can make it better. This time I made a lot of improvements to my autograder assignments, to my lecture content, and in other ways. The engines students demonstrated were some of the best ever and I was delighted by my course evals.

I now have 13 fairly serious autograder assignments students split up as a team covering most of the basics of what they need to know to build the index build and index serve sides of a distributed search engine completely from scratch in C++. This time, I made major improvements to the UTF-8, multi-threading, and HTML parsing assignments, added a new Robots.txt parser, and made more improvements to the rest. If I get to teach this again, I would like to improve the expression parser and Bloom filter assignments and add one to implement an index and constraint solver.

In lecture, I did a better job of helping students get started on a large project, e.g., what might the source tree look like, defining interfaces in headers, and using stubs for pieces that don't exist. I improved my discussion of UTF-8, the frontier, condition variables, and robots.txt, and finally explained how to create GET and POST plugins to the web server they build as a front-end. I also did a better job of explaining that even though indexing URLs is difficult because it requires word-breaking, it's not impossible with a dictionary. If I get to teach this again, I would like to further improve my discussion of the frontier, politeness, and how ISRs (index stream readers) are implemented.

In lab, my staff created and led several very helpful sessions on getting started with debugging, repositories and test frameworks, and GCP.

I also gave students better direction, sometimes in trivial ways. For example, I never explicitly required they include a screen shot of their engine in their final reports. Personally, if I'm explaining my web app, I'm going to include a screenshot. But that's apparently just me; it doesn't occur to students. No team in any previous term has ever included a screen shot in their final reports. So this time, I required them and I got them. In presentations, they would hand the hand the mic to someone standing in the corner. Now, my instructions ask that whoever's speaking step to the front. Otoh, I also insisted that any text on a slide has to be really large. That part they didn't hear and I'll have to say it louder next time.

I was super proud that perhaps half the engines this time were better than the best in previous terms. Several teams implemented word-breaking and indexing of URLs. Several teams successfully indexed anchor text. Several teams used my span algorithm in their rankers. (But I was a little disappointed that my ban on tf-idf, a lame bag-of-word technique, was thwarted by many teams using BM25, an only slightly less lame BOW technique.)

If I get to teach this again, I would add a mid-semester check-in just before the break where the teams will need to be able to demonstrate some sort of rudimentary crawler that can download a few hundred pages.

The index build side The query serve side The search engine index