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:
cache/resumecache_sample.jsoncache/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, 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_MODEinconfig.pythat is checked conditionally inscore.pyat 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:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →