I hope the following page is useful to determine whether you're interested in working on a project with me, and what that process would be like. This is intended to help you determine whether you want to start a conversation, and help you start it -- it is not intended to be the conversation.
Project Capacity and Expectations. If you're interested in working with me, please ask! (Ideally, after reading the rest of this page and confirming we seem like a good fit). But, please also be prepared that I'm often over capacity and may have to decline. Please don't draw a negative inference from this! I intend to at least respond to every request --- if I haven't responded within a week or so, or missed a self-imposed deadline to give you further information (etc.), please follow up.
Advising Philosophy and Expectations. Before deciding to work together, make sure we have a live chat about advising philosophy and expectations. We'll talk about what it means to have a PhD student co-supervise (if relevant), what it means to ``treat the project like your hardest course this semester'' and to truly manage the project yourself, and logistical things like meeting patterns. This is a bit overwhelming to put in writing, and works best in a live conversation --- please make sure to initiate one! One thing I will share during that conversation is that truly managing a project includes meta tasks, like initiating this conversation.
Types of Projects I Supervise. Below are classes of projects I supervise. It's definitely OK to try to get me interested in a project that doesn't fit into one of these categories, but just be prepared that I've become more rigid with project topics over time. The primary reason is that I want to advise projects where I'm confident I can be a good advisor even while time-constrained. When discussing working together, it'll be helpful if you can let me know which class of project you're interested in and why.
Deep Theory. These projects are representative of what one might work on as a PhD student in CS Theory.
Relevant for: Someone who loves PSets in CS Theory courses (especially being stuck on the hardest PSets). Someone who wants to explore a project representative of pursuing a PhD in CS Theory.
Prereqs: Done well in a related course. For most students, this will be Economics and Computation (see here). It could also be Advanced Algorithm Design. It is theoretically possible for this to be other advanced TCS or Math courses, but most projects I supervise require background covered in algorithmic economics.
"Prereqs": Make sure you love spending enormous chunks of time being frustrated and stuck. It's essential that you enjoy the process of working through problems independently (which involves being frustrated and stuck for weeks at a time, and still finding ways to be creative).
Day-to-Day Looks Like: This is an oversimplification, but these projects broadly break down into two parts. First, there's the overarching part of deciding which subproblems are the right ones to solve. Then, there's solving the subproblems. During the week, you'll basically be working on a problem independently. If you solve it, we'll spend our weekly meeting on the overarching part. If not, we'll spend our weekly meeting trying to get unstuck. But no matter what, it's important that you're comfortable spending significant time independently on a subproblem at the scale of a challenging problem set during the week, that you enjoy the frustration that will inevitably come with it, and that you're able to continue spending significant time being creative while stuck.
Other Notes: If you're interested in this, we'll first try to narrow your general interest. Afterwards, I'll propose a few possible projects from which you can choose. It's very hard to propose your own problem of this flavor until you get deep into an area, so the ultimate project would be one of my suggestions. It is also very likely that I'll suggest working with a PhD student as a co-supervisor.
Blockchain-Adjacent. These projects are theoretical in nature, but have a more significant modeling component and sometimes a coding component.
Relevant for: Someone who wants to explore a project representative of a PhD in Economics and Computation adjacent to Blockchains. It could also be relevant for someone who wants to explore a project representative of a PhD in theoretical applied modeling (the process of designing and analyzing a complex theoretical model with the goal of developing insight to a real-world domain). It also could be relevant for someone who really enjoys theory but prefers to code (for example, some projects are ultimately coding projects, but require strong theory/math background just to understand what we're coding in the first place). Probably, it is a good idea to have some interest in blockchain, just for the sake of staying interested in the project. But interest in the methodology is much more important than interest in blockchains for these kinds of projects.
Prereqs: Done well in a course involving theoretical modeling. For most students, this will be Economics and Computation. Some basic understanding of blockchains (a complete understanding of the lectures/PSets is sufficient).
"Prereqs": Make sure you enjoy reading complicated protocols and deeply understanding exactly what's going on. Make sure you enjoy going back and forth between a mathematical model and the domain its trying to capture. Make sure you're comfortable grinding through calculations and/or coding. Try to imagine starting from the Bitcoin white paper, and producing the Selfish Mining paper by the end of the project.
Day-to-Day Looks Like: This will vary by project. Some projects will have a day-to-day that looks like a problem set, others will look like a strategy design, some will be a mix of both. Every project will have a heavy component of reading and understanding complex protocols, and also understanding complex mathematical models.
Two Examples: [Yu 22, Ferreira 22].
Other Notes: If you're interested in this, we'll first discuss whether you're hoping to be more math-heavy or coding-heavy. Afterwards, I'll propose a few possible projects from which you can choose. It's very hard to propose your own problem of this flavor until you get deep into an area, so the ultimate project would be one of my suggestions. It is also very likely that I'll suggest working with a PhD student as a co-supervisor. Occasionally, I may have projects that are methodologically similar, but [other domain]-adjacent instead of blockchain-adjacent. Everything above applies to these projects as well, after replacing 'blockchain' with '[other domain]' everywhere.
Build something genuinely useful using concepts from my courses. These projects are ultimately about building something useful, in a domain where concepts from a course I teach is relevant.
Relevant for: Someone who wants their thesis to actually make a difference to some group (likely on campus because it's easier to find "engaged clients," but it doesn't have to be). The topic should be related to a course I teach (otherwise, I'll be a useless advisor).
Prereqs: Doing well in a related course (see here). This is relevant because the impactful problem will ultimately be hard to solve. You'll also need an "engaged client" -- if you want to solve a "real" problem, you need a source who's willing to tell you what they want, evaluate your solution, etc.
"Prereqs": Comfort "doing whatever it takes to get things done." Actually solving a "real" problem requires both glamorous (i.e. intellectually challenging) and unglamorous work.
Day-to-Day Looks Like: This is a "full-stack" project. You'll spend a lot of time just talking to various stakeholders to get buyin and permission. You'll be thinking hard about the right questions to ask stakeholders in your limited time with them. You'll do lots of coding. You'll do lots of modeling. You'll be Googling to understand why packages are crashing.
Other Notes: I sometimes, but rarely, have potential "engaged clients" ready (for example, I was Mel's "client." The CS department was Nathan's). Typically, you'd have to bring your own "engaged client." If you're part of a campus group, or have an independent passion, that can work great.
Improve a course I teach. These projects are ultimately about improving infrastructure for a course I teach (see here).
Relevant for: Someone who really enjoyed a course I taught, and who would have fun improving it.
Prereqs: Having been engaged in the course you want to improve. This is necessary primarily because you'll be better suited to improve the course for future students if you were engaged yourself. Mastery of the material will also help for whatever aspect you're hoping to improve.
"Prereqs": Comfort "doing whatever it takes to get things done." Actually solving a "real" problem requires both glamorous (i.e. intellectually challenging) and unglamorous work.
Day-to-Day Looks Like: This would depend heavily on the project. It could be coding, it could be data analysis, it could be pedagogy-related.
Other Notes: In order for this to be successful, it has to be able to survive after you graduate!