# Writing a worker One of the goals of Ocypod is to make writing clients/workers a straightforward process, since all communication takes place using HTTP/JSON. The simplest possible worker would generally do the following in a loop: 1. poll a queue (or queues) for a job to work on 2. start processing a job 3. when job is complete, update the job's status to `completed` A more fully featured client might do the following: 1. poll a queue (or queues) for a job to work on 2. start processing a job 3. send regular job heartbeat to let Ocypod know the worker is alive 4. update the job's `output` field with progress information 5. when job is complete, update the job's status to `completed`, and update it's `output` to contain the final result It's generally assumed that a single client/worker will be updating a job's status, output, etc., but that any number of clients might be reading its metadata (to e.g. update a progress page, to log some statistics, to check for completion, etc.).