My Research Workflow: Tools and Practices for PhD Students
Introduction
Over my years as a PhD student, I’ve refined a research workflow that helps me stay organized, productive, and sane. Here’s what works for me!
Paper Management
Zotero for References
I use Zotero to manage all papers I read:
- Browser extension: One-click saving of papers from arXiv, IEEE, ACM, etc.
- PDF management: Automatic download and organization
- Notes and annotations: Built-in PDF reader with highlighting
- BibTeX export: Seamless integration with LaTeX
Pro tip: Use collections to organize papers by project/topic:
๐ PhD Research
๐ ORAM Papers
๐ MPC Papers
๐ Privacy-Preserving ML
๐ Background Reading
๐ Teaching Resources
Reading Strategy
Not all papers deserve equal attention:
First pass (5 min): Title, abstract, introduction, conclusion
- Decide: relevant or not?
Second pass (30 min): Read sections, skip proofs
- Understand main contributions and techniques
Third pass (2+ hours): Deep dive, understand proofs
- Only for highly relevant papers
- Take detailed notes in Zotero
Note-Taking System
Obsidian for Research Notes
I maintain an Obsidian vault for research notes:
research-notes/
โโโ Papers/
โ โโโ Path-ORAM.md
โ โโโ Circuit-ORAM.md
โ โโโ ...
โโโ Concepts/
โ โโโ ORAM-Constructions.md
โ โโโ Secure-Computation.md
โ โโโ ...
โโโ Ideas/
โ โโโ Optimization-Idea-1.md
โ โโโ ...
โโโ Weekly-Notes/
โโโ 2024-W10.md
โโโ ...
Key practices:
- Atomic notes: One concept per note
- Bidirectional links: Connect related ideas
- Daily research log: Track what I work on each day
- Tag system:
#idea,#todo,#question,#insight
Example Note Template
# [Paper Title]
**Authors**: [Names]
**Venue**: [Conference/Journal]
**Year**: [Year]
**Link**: [URL]
## Summary
[2-3 sentence summary]
## Key Contributions
- Contribution 1
- Contribution 2
## Technical Approach
[Brief description of techniques]
## Strengths
- ...
## Limitations
- ...
## Relevance to My Research
[How this relates to my work]
## Questions
- [ ] Question 1
- [ ] Question 2
## Related Papers
- [[Link to related note 1]]
- [[Link to related note 2]]
Writing and LaTeX
Overleaf for Collaboration
For papers, I use Overleaf:
- Real-time collaboration with co-authors
- Version control via Git integration
- No LaTeX setup headaches
My LaTeX Setup
Custom macros for common notation:
% Custom commands
\newcommand{\secparam}{\lambda}
\newcommand{\negl}{\mathsf{negl}}
\newcommand{\poly}{\mathsf{poly}}
\newcommand{\Enc}{\mathsf{Enc}}
\newcommand{\Dec}{\mathsf{Dec}}
% Common notation
\newcommand{\Z}{\mathbb{Z}}
\newcommand{\F}{\mathbb{F}}
\newcommand{\G}{\mathbb{G}}
Keeps papers consistent and typing efficient!
Version Control
Even for solo writing:
git init
git add paper.tex figures/
git commit -m "Initial draft"
# Branch for major revisions
git checkout -b reviewer-response
Lifesaver when you need to recover deleted sections!
Code and Experiments
Project Organization
project-name/
โโโ README.md
โโโ requirements.txt
โโโ src/
โ โโโ __init__.py
โ โโโ oram.py
โ โโโ utils.py
โโโ tests/
โ โโโ test_oram.py
โโโ experiments/
โ โโโ benchmark.py
โ โโโ results/
โโโ docs/
โโโ paper/
Reproducibility Practices
- Dependencies: Use
requirements.txtorconda environment.yml - Random seeds: Always set for reproducible experiments
- Configuration files: YAML/JSON for experiment parameters
- Logging: Comprehensive logging of all experiments
- Documentation: README with setup and run instructions
Example Experiment Script
import argparse
import json
import logging
from datetime import datetime
def run_experiment(config):
"""Run ORAM benchmark with given configuration"""
# Setup logging
log_file = f"logs/experiment_{datetime.now():%Y%m%d_%H%M%S}.log"
logging.basicConfig(filename=log_file, level=logging.INFO)
logging.info(f"Configuration: {json.dumps(config)}")
# Run experiment
results = benchmark_oram(
block_size=config['block_size'],
num_blocks=config['num_blocks'],
num_accesses=config['num_accesses']
)
# Save results
results_file = f"results/{config['experiment_name']}.json"
with open(results_file, 'w') as f:
json.dump(results, f, indent=2)
return results
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('--config', required=True)
args = parser.parse_args()
with open(args.config) as f:
config = json.load(f)
run_experiment(config)
Time Management
Weekly Planning
Every Monday morning:
- Review previous week’s progress
- Set 3 main goals for the current week
- Schedule blocks for deep work (no meetings!)
Pomodoro Technique
For focused work:
- 25 minutes deep work
- 5 minute break
- After 4 pomodoros: 30 minute break
Apps I use: Forest (mobile), Focus@Will (background music)
Staying Current
Following the Field
- arXiv alerts: Daily digest for cs.CR (cryptography)
- Google Scholar alerts: For specific topics and authors
- Twitter/X: Follow researchers in my field
- Conference calendars: Track deadlines and proceedings
Reading Group
Weekly reading group with labmates:
- Rotate paper selection
- 30-minute presentation + discussion
- Great for discovering papers outside my immediate area
Communication
Academic Email
Template for reaching out to researchers:
Subject: Question about [Specific Paper/Topic]
Dear Dr. [Name],
I am a PhD student at UC Santa Cruz working on [brief description].
I recently read your paper "[Paper Title]" and found [specific aspect]
particularly interesting.
[Specific question or comment showing you read the paper carefully]
Thank you for your time and for your excellent research.
Best regards,
Apostolos Mavrogiannakis
PhD Student, Computer Science
UC Santa Cruz
Key principles:
- Be specific (shows you did your homework)
- Be concise (respect their time)
- Be professional
Mental Health
Research is a marathon, not a sprint:
- Regular exercise: 30 minutes daily (running, gym, cycling)
- Sleep: Consistent schedule, 7-8 hours
- Hobbies: Photography, hiking (totally unrelated to research!)
- Social connection: Regular hangouts with non-PhD friends
Burnout is real. Taking breaks makes you more productive, not less.
Tools Summary
| Category | Tool | Why |
|---|---|---|
| Papers | Zotero | Reference management |
| Notes | Obsidian | Knowledge graph |
| Writing | Overleaf | LaTeX collaboration |
| Code | VSCode | Best editor |
| Version Control | Git/GitHub | Everything |
| Experiments | Python + Jupyter | Analysis |
| Time Management | Google Calendar | Scheduling |
| Focus | Forest | Avoiding phone |
Conclusion
This workflow evolved over years of trial and error. Your ideal setup will be different!
General principles:
- Automate repetitive tasks
- Document everything (future you will thank present you)
- Build systems, not just habits
- Regularly review and refine your workflow
What tools and practices work for you? I’d love to hear! Reach out via email or Twitter.
This post reflects my personal workflow as of 2024. Check back for updates as I continue refining!