Key Differences Between Development Mode and Production Mode in Hiring Agent

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, 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 (lines 5-6), the global variable DEVELOPMENT_MODE acts as the master switch:


# 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:


# 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:


# 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:


# 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:


# config.py

DEVELOPMENT_MODE = False  # disable dev-only features

Then run the scorer:

$ 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:

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

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

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, 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 that is checked conditionally in 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 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 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, leaving any previously generated JSON files untouched on disk while fetching fresh data for each evaluation.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →