Method
Make the broth
Put the ribs in a large pot with 2.5 L cold water. Bring slowly to a simmer, skim the foam, then cook gently for about 60 minutes. Lift out the ribs, pull the meat from the bones, and reserve it.
Make the beet base
While the broth simmers, heat the oil in a frying pan. Soften the onion and carrot for 5–7 minutes. Add the beets, tomato paste or tomatoes, vinegar, and optional sugar. Add a ladle of broth and cook gently for another 10 minutes.
Build the soup
Add the potatoes and bay leaf to the broth and simmer for 10 minutes. Stir in the beet mixture, cabbage, reserved meat, and optional beans. Simmer for 8–10 minutes, until the potatoes are tender and the cabbage still has a little texture.
Rest and serve
Stir in the crushed garlic, then season with salt and black pepper. Remove from the heat and rest for at least 30 minutes. Reheat gently if needed and serve with dill and sour cream.
Taste before serving
Borscht should balance earthy sweetness, tomato depth, savoury broth, and a clean sour note. Add vinegar a teaspoon at a time if it tastes flat; add a little broth if it tastes too sharp.