Rinse beans and sort for foreign objects. Pour beans into a bowl or pan, cover with water, and soak overnight (for at least 8 hours).
Drain water from beans and rinse again.
Heat oil in large Dutch oven over medium-high heat, and add onions, carrots, and celery. Season with salt and pepper. Sauté until softened, and onion is translucent, about 5 minutes.
Add cumin, parsley, and bay leaf. Stir to combine. Add beans, ham bone, and water. You can add more later if it gets too thick. Bring to a boil, reduce heat, and simmer for about 1 ½ hours or until beans are tender.
Remove ham bone. If you like a thicker soup, remove a few cupfuls of the soup and mash the beans lightly before adding them back to the soup. Add the diced ham, and simmer for another 10 minutes.
Taste, adjust seasonings as desired. Remove bay leaf and serve. If not ready to serve, turn heat to low and simmer for as long as needed.
Video
Notes
If you don't happen to have a ham bone, no worries! Just skip that part and add diced ham at the end of the cooking time.
If you would prefer not to use ham at all, kielbasa, Polish sausage, bacon, or Italian sausage can be substituted.
Make this soup vegan or vegetarian by not adding any meat. Instead add a couple of tablespoons of nutritional yeast and use vegetable broth instead of water.
Bean soup freezes well and will keep for at least 6 months.