# How to Configure the Hiring Agent for Production Deployment vs Development Mode

> Configure Hiring Agent for production deployment or development mode. Learn how to set DEVELOPMENT_MODE False for statelessness, eliminating cache and CSV logging.

- Repository: [HackerRank/hiring-agent](https://github.com/interviewstreet/hiring-agent)
- Tags: how-to-guide
- Published: 2026-07-05

---

**Set `DEVELOPMENT_MODE = False` in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) (or export the environment variable) to run the Hiring Agent in stateless production mode, eliminating caching and CSV logging for containerized deployments.**

The `interviewstreet/hiring-agent` repository provides a configurable evaluation pipeline that toggles between interactive development features and optimized production behavior using a single global flag. Understanding how to configure this hiring agent for production deployment versus development mode ensures you maintain performance in serverless environments while preserving debugging capabilities during local experimentation.

## The DEVELOPMENT_MODE Configuration Flag

The behavior of the Hiring Agent hinges on a boolean flag defined in [[`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py)](https://github.com/interviewstreet/hiring-agent/blob/main/config.py).

- `DEVELOPMENT_MODE = True` activates development features.
- `DEVELOPMENT_MODE = False` enables production mode.

This flag is imported at module load time by the orchestrator and supporting modules, making it essential to set before runtime.

## Development vs Production Behavior

When configuring the hiring agent for production deployment versus development mode, the differences impact I/O operations, logging verbosity, and state management.

**Development Mode (`True`):**

- Writes intermediate JSON results to `cache/resumecache_*.json` and `cache/githubcache_*.json`.
- Appends evaluation rows to `resume_evaluations.csv` after each run.
- Enables verbose logging and debug console output in [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py).

**Production Mode (`False`):**

- Eliminates caching and CSV export, creating a stateless run.
- Reduces memory footprint and I/O overhead suitable for serverless containers.
- Outputs only the final evaluation to stdout or API response.

## Configuring Production Mode

To switch from development to production:

1. **Edit [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) directly:**

   ```python
   # config.py

   DEVELOPMENT_MODE = False  # disables caching and CSV export

   ```

2. **Override via environment variable (recommended for CI/CD):**

   ```bash
   export DEVELOPMENT_MODE=False
   python score.py /path/to/resume.pdf
   ```

The environment variable must be exported before running any module, as the code evaluates the flag at import time.

## Production Deployment Examples

Docker containerization requires the flag to be set in the image or runtime environment to prevent mutable container layers.

**Dockerfile snippet:**

```dockerfile
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN pip install --no-cache-dir -r requirements.txt
ENV DEVELOPMENT_MODE=False \
    LLM_PROVIDER=ollama \
    DEFAULT_MODEL=gemma3:4b
CMD ["python", "score.py"]

```

**Docker Compose configuration:**

```yaml
services:
  hiring-agent:
    image: hiring-agent:latest
    environment:
      - DEVELOPMENT_MODE=False
      - LLM_PROVIDER=ollama
      - DEFAULT_MODEL=gemma3:4b
    volumes:
      - ./resumes:/data
    command: ["python", "score.py", "/data/resume.pdf"]

```

## Implementation Details in Source Files

The `DEVELOPMENT_MODE` flag propagates through specific modules according to the source code.

In [[`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py)](https://github.com/interviewstreet/hiring-agent/blob/main/score.py), the orchestrator checks the flag to decide whether to write the CSV report and persist cached JSON files.

In [[`pdf.py`](https://github.com/interviewstreet/hiring-agent/blob/main/pdf.py)](https://github.com/interviewstreet/hiring-agent/blob/main/pdf.py) and [[`github.py`](https://github.com/interviewstreet/hiring-agent/blob/main/github.py)](https://github.com/interviewstreet/hiring-agent/blob/main/github.py), both modules respect the flag when deciding to persist their intermediate data to `cache/resumecache_*.json` and `cache/githubcache_*.json`.

In [[`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py)](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py), while the core scoring logic remains constant, the flag controls whether extra debug information is appended to console output.

## Summary

- The Hiring Agent uses a single `DEVELOPMENT_MODE` flag in [`config.py`](https://github.com/interviewstreet/hiring-agent/blob/main/config.py) to toggle between environments.
- Production mode (`False`) disables caching, CSV exports, and verbose logging for stateless operation.
- Development mode (`True`) enables `cache/` folder usage, `resume_evaluations.csv` logging, and debug prints.
- Configure via environment variable `DEVELOPMENT_MODE=False` for containerized deployments.
- Key files consuming the flag include [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py), [`pdf.py`](https://github.com/interviewstreet/hiring-agent/blob/main/pdf.py), [`github.py`](https://github.com/interviewstreet/hiring-agent/blob/main/github.py), and [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py).

## Frequently Asked Questions

### What is the default value of DEVELOPMENT_MODE in the hiring agent?

The default value in the repository is `DEVELOPMENT_MODE = True`, enabling caching and CSV logging to facilitate local experimentation and debugging. You must explicitly set it to `False` for production use.

### Can I toggle between modes without editing config.py?

Yes, you can export the environment variable `DEVELOPMENT_MODE=False` before starting the application. However, because the flag is evaluated at module import time, you must set the environment variable before running [`score.py`](https://github.com/interviewstreet/hiring-agent/blob/main/score.py) or any other module.

### Why does production mode skip caching in pdf.py and github.py?

Production mode skips writing `cache/resumecache_*.json` and `cache/githubcache_*.json` to maintain statelessness and reduce I/O overhead, which is critical for serverless or horizontally-scaled container deployments where persistent local storage is not guaranteed.

### How does the evaluator.py behavior change between modes?

While the core scoring logic remains identical, [`evaluator.py`](https://github.com/interviewstreet/hiring-agent/blob/main/evaluator.py) adds extra debug information to console output when `DEVELOPMENT_MODE` is `True`, whereas production mode suppresses these debug prints to reduce noise and logging costs.