# Key Differences Between Development Mode and Production Mode in Hiring Agent

> Understand development vs production mode in Hiring Agent. Development uses caching for speed, production ensures fresh candidate data. Learn the key differences for efficient hiring.

- Repository: [HackerRank/hiring-agent](https://github.com/interviewstreet/hiring-agent)
- Tags: deep-dive
- Published: 2026-07-22

---

**Development mode enables aggressive caching of resume and GitHub data alongside CSV logging for rapid iteration, whereas production mode operates statelessly to ensure fresh candidate evaluations on every run.**

The `interviewstreet/hiring-agent` repository uses a single boolean flag to toggle between **development mode and production mode**. This flag, defined in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py), determines whether the pipeline caches intermediate results, exports diagnostic CSVs, or runs with minimal overhead for live candidate scoring.

## How the Mode is Controlled

In [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) (lines 5-6), the global variable `DEVELOPMENT_MODE` acts as the master switch:

```python

# config.py

DEVELOPMENT_MODE = True  # enables caching and CSV export

```

When set to `True`, the pipeline enters development mode. Setting it to `False` switches to production behavior. The README explicitly documents this toggle at lines 94-101, recommending it be left on during iteration.

## Feature Comparison

### Resume PDF Caching (score.py:233-240)

In development mode, extracted resume data is serialized to JSON after the first PDF processing:

```python

# score.py – cache handling

if DEVELOPMENT_MODE and os.path.exists(cache_filename):
    # load cached data from cache/resumecache_<basename>.json

```

The cache files are written to `cache/resumecache_<basename>.json`. In production mode, this conditional is bypassed entirely, forcing the PDF to be re-parsed on every invocation to prevent stale data from influencing scores.

### GitHub Profile Caching (score.py:277-284)

Similarly, GitHub enrichment data is cached in development mode:

```python

# score.py – GitHub cache handling

if DEVELOPMENT_MODE and os.path.exists(github_cache_filename):
    # load cached data from cache/githubcache_<basename>.json

```

This stores API responses in `cache/githubcache_<basename>.json`, reducing rate limit usage during repeated testing. Production mode fetches fresh GitHub data via the API for each candidate to ensure evaluations reflect current repository activity.

### CSV Export Logging (score.py:48-62)

Development mode appends detailed evaluation rows to `resume_evaluations.csv` using the `transform_evaluation_response` function:

```python

# score.py – CSV export (only when dev mode)

if DEVELOPMENT_MODE:
    csv_row = transform_evaluation_response(...)
    # write to resume_evaluations.csv

```

This spreadsheet contains raw scores, GitHub metrics, and diagnostic fields for bulk analysis. Production mode suppresses this export, emitting only a human-readable summary to stdout and avoiding storage overhead.

### Console Output Verbosity

When `DEVELOPMENT_MODE` is `True`, the pipeline prints diagnostic messages describing cache hits, GitHub fetches, and file writes (e.g., "Loading cached data from …"). Production mode silences these `print` statements for cleaner log output suitable for batch processing.

## Practical Configuration Examples

Switch to production mode by editing [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py):

```python

# config.py

DEVELOPMENT_MODE = False  # disable dev-only features

```

Then run the scorer:

```bash
$ python score.py ./resume/sample.pdf

```

In production, this processes the PDF fresh and prints only the final evaluation summary. No files appear in `cache/` and `resume_evaluations.csv` is not created or modified.

To leverage development mode (default), keep `DEVELOPMENT_MODE = True` and execute:

```bash
$ python score.py ./resume/sample.pdf

```

First run extracts the PDF, fetches GitHub data, and writes:

- [`cache/resumecache_sample.json`](https://github.com/interviewstreet/hiring-agent/blob/main/cache/resumecache_sample.json)
- [`cache/githubcache_sample.json`](https://github.com/interviewstreet/hiring-agent/blob/main/cache/githubcache_sample.json)
- Appends evaluation data to `resume_evaluations.csv`

Subsequent runs load from cache instantly, skipping redundant API calls and PDF parsing.

## Summary

- **Development mode** activates aggressive caching of resume PDFs and GitHub profiles in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py), CSV logging of evaluation metrics, and verbose console output to accelerate prompt engineering and debugging.
- **Production mode** disables all caching to guarantee fresh data, eliminates CSV overhead, and provides clean stdout output suitable for batch processing candidates without storage side effects.
- The toggle is controlled by a single boolean `DEVELOPMENT_MODE` in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) that is checked conditionally in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) at lines 48-62, 233-240, and 277-284.

## Frequently Asked Questions

### Where is the development mode flag defined?

The flag is defined in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) at lines 5-6 as `DEVELOPMENT_MODE = True` by default. This single variable controls all behavioral differences between the two modes throughout the pipeline, as documented in the README at lines 94-101.

### Does production mode still use the GitHub API?

Yes, production mode continues to fetch GitHub data via the API for every candidate, but it skips writing and reading the `cache/githubcache_<basename>.json` files to ensure evaluations use the most recent repository statistics without relying on stale cached data.

### Can I switch modes without editing config.py?

No, the repository requires editing the `DEVELOPMENT_MODE` variable in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) directly. There is no command-line flag or environment variable override to switch modes at runtime according to the current source code implementation.

### What happens to existing cache files when switching to production mode?

Existing cache files in the `cache/` directory are ignored but not automatically deleted. Production mode simply bypasses the cache read/write logic in [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py), leaving any previously generated JSON files untouched on disk while fetching fresh data for each evaluation.