In a large dutch oven or a large soup pot, heat 1 tablespoon of the oil over medium high heat. While the oil is heating pat dry the meat with paper towels. Then sprinkle the salt and pepper all over the beef cubes. Add in the beef and make sure to brown every side.
Pull the beef from the pot and put into a bowl. To the pot, add the last tablespoon of oil over medium heat. Once hot, add in the chopped onion, jalapeño, and serrano. Stir occasionally and cook until soft, about 12 minutes.
Push veggies to the side. To the other side of the pot, add in the butter and allow it to melt. Add in the flour and whisk together. While whisking constantly, add in the garlic, chili powder, cumin, and oregano. Let it cook for 1 minute.
Add the beef broth in slowly a little at a time while stirring to dissolve the roux into a sauce. Once all of the broth has been added, mix in the onion and peppers. Stir back in the cooked beef, half of the cilantro, tomatoes, bay leaf and water.
Bring everything up to a boil over high heat, then reduce the heat to low. Cover with a lid partially and simmer for 2 1/2 hours hours, stirring every 30 minutes so nothing burns on the bottom. For tender beef cubes: After 2½ hours, uncover the pot and simmer for an additional 30 minutes to thicken the gravy and finish cooking the meat. Total cook time: 3 hours. For more stringy, shredded-style beef: Continue simmering partially covered for another hour, then uncover for the last 30 minutes to reduce the sauce and achieve a melt-in-your-mouth texture. Total cook time: 4 hours