Heat a large pot or Dutch oven over medium heat. Add the beef directly to the pot. Let it sit for a minute before breaking it up so it can brown.
Season the beef lightly with salt. Cook until most of the pink is gone and it looks browned, not gray.
Add the chopped onion. Stir and cook until softened, about five minutes. Add the garlic and stir for about thirty seconds, just until fragrant.
Add the chili powder and cumin directly to the pot. Stir well and let the spices warm for about a minute.
Pour in the diced tomatoes. Scrape the bottom of the pot to loosen anything stuck there.
Add the beans and the water or broth. Stir gently to combine everything.
Bring the chili to a low simmer. Reduce heat and let it cook uncovered for about one hour, stirring occasionally.
If the chili gets too thick, add a small splash of water. If it feels thin, let it simmer longer.
Taste and adjust salt if needed. Turn off the heat and let the chili sit for about ten minutes before serving.