Sauté aromatics – In a large pot, heat olive oil. Add onion, carrots, celery, and garlic. Cook 5 minutes until softened.
Add ham & broth – Stir in ham bone (or diced ham) and pour in broth. Add thyme, bay leaves, salt, and pepper.
Simmer – Bring to a boil, then reduce heat and simmer uncovered for 1 to 1 ½ hours, until flavors develop and ham is tender.
Add beans – Stir in cannellini and kidney beans. Simmer another 15 minutes. Remove bay leaves and ham bone, shredding any extra meat back into the soup.
Serve – Ladle into bowls, garnish with parsley, and serve with crusty bread.