Senior Python Developer, On-Call Advisor (Flask, LLM pipelines, GIS)

Please login or register as jobseeker to apply for this job.

TYPE OF WORK

Gig

SALARY

Hourly, negotiable. Tell us your rate

HOURS PER WEEK

5

DATE UPDATED

Sep 23, 2026

JOB OVERVIEW

ABOUT US
We are a small startup (a founder and one developer) with a live web app that helps town planners in New South Wales, Australia. Our stack: Python, Flask, gunicorn and nginx on a Linux VPS, the Anthropic Claude API for report drafting, NSW government spatial services (ArcGIS REST, GeoJSON), and pytest.

THE ROLE
Our developer handles the day-to-day build. We want a senior developer we can call when we hit a hard problem: a short call or a written review to diagnose a bug, check an approach, or advise on design. Our developer then does the implementation. You advise; you don't carry the build.

HOW IT WORKS
- Paid hourly, only for time worked (calls, code review, written advice). No retainer, no minimum.
- The work is irregular. Some months there may be none, some months a few hours.
- We are choosing up to 10 people for an on-call list. If you are on it, we will keep your WhatsApp and email and contact you when a need comes up, which may be weeks or months from now.

MUST HAVE
- 5+ years of professional Python, including a production web app (Flask, Django or FastAPI) that you maintained over time, not only built.
- Real production experience in at least one of: LLM API pipelines, or GIS/spatial data. Both is a big plus.
- You can explain technical trade-offs in plain English to a non-technical founder, and guide a less experienced developer.
- You can usually reply within 24 to 48 hours.

NICE TO HAVE
Testing and evaluating LLM output, prompt versioning, Shapely/GeoPandas/PostGIS, coordinate reference systems, ArcGIS REST services, Linux server operations.

HOW TO APPLY
Start your subject line with ON-CALL SENIOR. Applications missing any of these items will not be reviewed:
1. Your hourly rate in PHP.
2. Your years of professional Python experience.
3. Your WhatsApp number (with country code) and your email.
4. Your usual working hours (Philippine time).
5. A link to code you wrote (GitHub, GitLab or similar). If your best work is private or under NDA, say so and describe it instead.
6. Answers to TWO of the three questions below, the two closest to your real experience. 4 to 8 sentences each. Tell us how you would handle it, and where you have dealt with something similar.

A. LLM pipelines: Our code computes planning rules first, then an LLM writes a report that includes a verdict. Sometimes the LLM's verdict contradicts what the code already computed. How would you stop that from reaching users, and how would you test that it stays fixed?

B. Spatial data: We geocode a street address, then look up which zoning polygon it falls in using a government ArcGIS MapServer. Sometimes the point lands on or very close to a polygon boundary. How would you handle that?

C. Flask architecture: A Flask app's main pipeline module has grown very large and is live in production. How would you split it up without breaking the running service?

Please apply by Tuesday 29 September. We review all applications on 30 September.

Thanks,
Kike

SKILL REQUIREMENT
VIEW OTHER JOB POSTS FROM:
SHARE THIS POST
facebook linkedin
  BENCHMARKS  
Loading Time: Base Classes  0.0012
Controller Execution Time ( Jobseekers / Job )  0.0145
Total Execution Time  0.0166
  GET DATA  
No GET data exists
  MEMORY USAGE  
1,502,288 bytes
  POST DATA  
No POST data exists
  URI STRING  
jobseekers/job/Senior-Python-Developer-On-Call-Advisor-Flask-LLM-pipelines-GIS-1736864
  CLASS/METHOD  
jobseekers/job
  DATABASE:  onlinejobs (Jobseekers:$db)   QUERIES: 13 (0.0066 seconds)  (Hide)
0.0004   SELECT *
                                
FROM exrates
                                WHERE rate_name 
= 'USD-PHP' 
0.0004   SELECT *
FROM `employer_jobs`
WHERE `job_id` = 1736864
 LIMIT 1 
0.0004   SELECT *
FROM `employers`
WHERE `employer_id` = 907796
 LIMIT 1 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `t_thread` `t`
LEFT JOIN `t_thread_misc` `misc` ON `t`.`id` = `misc`.`thread_id`
WHERE `t`.`job_id` = 1736864
AND `misc`.`id` IS NULL 
0.0005   SELECT e.business_name, e.logo, e.website, e.rebill_date, e.date_added member_date, hits, DATEDIFF('2026-10-04',ej.date_added) duration_days, DATEDIFF('2026-10-04',e.rebill_date) duration_rebill, ej.*, e.deactivate FROM employers e, employer_jobs ej WHERE e.employer_id = ej.employer_id AND
                                   ((
e.user_level >= '500' AND ej.date_added <= e.rebill_date)
                                   OR 
e.employer_id = '' OR (ej.date_approved <> '2000-01-01' and DATEDIFF('2026-10-04',ej.date_added) <= 14 ))
                                   AND 
e.deactivate != 1 AND ej.deleted = 0 AND job_id = '1736864' 
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1736864 
0.0018   UPDATE employer_jobs SET hit_counts = '***Sep-23-2026=327***Sep-24-2026=90***Sep-25-2026=26***Sep-26-2026=19***Sep-27-2026=16***Sep-28-2026=20***Sep-29-2026=19***Sep-30-2026=28***Oct-01-2026=18***Oct-02-2026=26***Oct-03-2026=5***Oct-04-2026=2' WHERE job_id= '1736864'  
0.0007   UPDATE employer_jobs SET monthly_hits = '***Sep-2026=545***Oct-2026=51' WHERE job_id= '1736864'  
0.0004   SELECT date_sent FROM jobseeker_sent_emails WHERE jobseeker_id = '' AND job_id = '1736864' AND status LIKE 'sent%' ORDER BY id DESC  
0.0003   SELECT *
FROM `employer_jobs_skills` `ejs`
LEFT JOIN `skills_categories` `sc` ON `ejs`.`skill_id` = `sc`.`id`
WHERE `job_id` = 1736864 
0.0004   SELECT COUNT(*) AS `numrows`
FROM `employer_jobs`
WHERE `employer_id` = '907796'
AND `date_added` >= '2022-06-08' 
0.0003   select * from teasers 
0.0002   SELECT * FROM skill_categories WHERE skill_cat_id='' 
  HTTP HEADERS  (Show)
  SESSION DATA  (Show)
  CONFIG VARIABLES  (Show)