A new problem starts empty: no statement, no tests, no checker, and unpublished. You create it by picking its type, then fill it in tab by tab or in the Studio.
You need permission to write problems in the space.
Open the console and switch to the space the problem should live in.
Go to Problems in the sidebar.
Click New problem.
Pick the problem type. The type decides which parts of the problem exist, so choose it with care.
The problem is created and opens immediately. It has a number — its place in the space's public catalog — but it is not in the catalog yet, because new problems start unpublished.
If the problem already exists somewhere else, don't build it by hand: import it from Polygon, from Basecamp, from another space you have access to, or from an archive file.
Nothing below is required by the console, but a problem cannot be judged until it has tests and something to grade them with. The steps are for a program-based problem; a quiz needs only a statement and questions, and a widget problem a statement, the widget and its checker.
Set the limits. Open Testing → Configuration and set the time and memory limits.
Write the statement. Statement tab → Create statement. One statement per language; the first one you write is usually enough to start.
Set the difficulty and topics. The Classification card on the Settings tab. These drive the filters in the problems list and in the public catalog.
Add testsets and tests. Testing → Tests. A new problem has no testset, so add one before adding tests, or import test files in bulk.
Configure the checker, and an interactor if the problem is interactive. A problem with neither cannot grade anything.
Add code templates if participants should start from something other than a blank editor.
Add reference solutions and run them. This is how you find out whether your tests and limits actually separate correct solutions from wrong ones.
Publish when it holds together.