This page represents the current state of our knowledge on how to propose paid development / contract work for outside contractors as well as find and hire such contractors. It's mostly based on the experience from the 2022/2023 Import Extension project. The only required process is to get a PLC vote and work with the SFC but this represents lessons learned on the best way to achieve a successful contracting experience.
For a tender tailored to one or more previously known persons (e.g. internal contractors, highly specialized outside knowledge...) the selection process can be ommitted which speeds up the process considerably, and reduces the amount of work spent on the administrative side by a lot. However, a lot of additional justification is needed why the selection process can be ommitted ("we want to hire an internal contributor to fix a lot of bugs in their knowledge domain, fast", "we want to hire a maintainer of an upstream project because we lack the internal resources to tackle a problem" etc.). The SFC is a US non-profit organization that has rather strict rules to ensure that the money isn't used for self-enrichment, which requires open and visible processes on how money is spent. Often that makes having a selection process, though cumbersome, easier to justify a choice.
|Start with an idea for a contractor project. The idea should be clearly-limited, in the public interest (i.e. a general consensus that something needs to be done) and it should be obvious that the project lacks volunteer resources to do it internally.||Initiator||2 weeks|
|Discuss the idea with other people in the project. Places that are great to bring up ideas are: Developer Meeting, Vectors meeting, mailing lists, forums and RocketChat. Seek a consensus that executing the project as contracting work is in the interest of the project, discuss an approximate budget and find a project representative. The project rep. will play an important role during the candidate selection process as well, and will be the project contact the contractor will report to. A stipend is possible for the project representative. Also try to find people that want to help with the candidate selection process ("hiring team") - the future rep needs to be a member of that hiring team, and the initiator should be as well.||Initiator|
|Write a draft proposal (template see below). A lot of that proposal can be reused later for the job posting, as well as website or blog articles. Distribute it and incorporate feedback, especially from people familiar with the work that needs to be done, and as if folks from at the SFC can look at it to ensure it matches all of their requirements.||Inititator, dev chat, SFC|
|Have a present PLC member to trigger a PLC vote (works fastest if you provide them with the ballot).|
|PLC vote. If the vote is not in favor of the project, go back to step 3/4 and incorporate the PLC's concerns.||PLC||1 week|
|Together with the hiring team, transform the proposal into a job posting and post it on relevant sites (can also be done by the SFC). Coordinate with Vectors whether social posts about it are appropriate; at the very least, create a blog post on the website.
The hiring team needs to decide on the candidate's profile, documents to be submitted and a time schedule for the selection process (should be a part of the job posting).
|Wait for people to apply. This is a good time for the mentor to prepare everything on the technical side, i.e. boilerplate code, gather documentation, logins, etc...||1 month|
|Selection process. A possible process is given below, but can be adapted to the projects' needs.||SFC, hiring team||1 month|
|Hire contractor - contract negotiation, payment details and modalities etc.||SFC||2 weeks|
All in all, it takes about ~3-4 months from an initial idea until work on the project can start.
Proposal and job offer items
A = Proposal for PLC vote, B = job posting, C = website blog post
For reference 2023 Import Extension project:
- Proposal: https://alpha.inkscape.org/board/referendums/resolutions/2022_AI_Import.pdf
- Ballot: https://alpha.inkscape.org/board/referendums/resolutions/2022_AI_Import.html
- Job posting: https://www.fossjobs.net/job/11127/inkscape-short-term-contract-for-python-programming-at-inkscape-project-software-freedom-conservancy/
- Website post: https://inkscape.org/news/2022/12/12/hiring-python-developer-import-extension/
|Overview||Who are we looking for?
Which kind of work?
|A, B, C|
|Detailed description of project||Scope of the work
more details what will be done, and what the project will build upon
(can be ~ half a page)
|Milestones||Detailed description of the work (think in packages of a week, comparable to GSoC) - no absolute dates yet
Technical information as required
If an extension of the project is up for discussion - when will this be discussed and who decides?
|Duration and schedule||How much time (full time equivalent)?
Part-time (or less) possible?
Expected start time?
|Financials||Allocated budget for contractor compensation, including possible extensions
Mentoring stipend? (roughly GSoC equivalent)
Stipend for hiring team?
|Compensation of contractor||Hourly rate (discuss with SFC), payment terms (net-30)
Formal requirements (i.e. no applicants from US-embargoed countries)
|Hiring team||Duties: candidate selection, deciding on the decision process (i.e. interviews, coding test)
Specify members in the proposal. Stand-in members?
One SFC member mandatory (might waive once we get more experienced with this)
|Candidate's profile||Previous experience in: a certain programming language, contribution to FOSS, in a certain domain of knowledge||B, C|
Link to personal portfolio (Github, GitLab, personal website, self-hosted git...)
Some questions about the candidate's motivation, relevant experience, time zone they're in (to schedule interviews)
|Application and submission||Submission email (ie. jobs@)
Deadline for submissions
|Schedule of the evaluation
|Programming exercise? (when?)
Work will start when?
Sites to post job posting to
- https://www.fossjobs.net (generated a lot of traffic and most our applications come from there)
- Outreachy alumni list
Highly depends on the actual project, here's what worked for the 2023 Import project:
- Screen applications and remove obviously unsuitable candidates (e.g. based on experience, past contributions)
- Formulate coding test and send it to the remaining candidates. Give them ~2 weeks time to complete it. The test should not take them more than 2 hours for a simple solution. Expect that quite a few of the solution will be "above and beyond". It's proven beneficial to have them fork a private git repository and invite a hiring team member (e.g. the mentor) when they're done. This also shows that they can work with Gitlab and lets us have a look at their commit hygiene.
- Reduce the list of applicants to ~3-4 based on CV and the solution. Different evaluation criteria for each hiring team members are ok and actually good: for example, the mentor might look more at "do I anticipate that I can work well with this person". It's the discussion and diversity in backgrounds that makes for a good discussion. Send the removed applicants a rejection email, it's nice to include a reason why they were not selected so they can improve their next application.
- Agree upon a list of interview timeslots and create a sign up form where they can sign up (signupgenius works for that, maybe we can incorporate it in the inkscape.org website if we need it more regularly? - NextCloud has a scheduling app which could be used)
- Perform interviews, where the candidates are also encouraged to ask questions.
- Vote on who is selected. The mentor may act as tiebreaker.
- Offer the position to the selected candidate. After they accept, notify the other applicants – thank people for their application and their time. It can be helpful to include a reason why they were not selected so they can improve their next application.
- Contract details are handled by the SFC.