Wash the tomatoes and place them in a medium sauce pan with the onion, garlic and serrano pepper. Cover with water and place on high heat.
Once it begins to boil, turn the heat to medium-high and let cook for 10-15 minutes, until the tomatoes begin to soften and the skin breaks and begins to peel.
Turn off the heat. Reserve the water the veggies were cooked in as you may need to add some water to the salsa later. Using tongs, remove a tomato and place on a cutting board. Carefully remove the skin, cut the core out and place in the blender.
Repeat with remaining tomatoes, scraping any tomato juice that remains on the cutting board into the blender at the end. Remove onion and garlic from the pot and place them in a blender as well.
You may either cut the stem of the serrano off and drop it in the blender whole, or cut the serrano in half and remove the seeds and veins to minimize the heat factor. This is up to you.
Add the serrano, 1/2 teaspoon salt and the juice of 1/2 lime to the blender and puree...but be careful not to puree it too much. I like my salsa a bit on the chunky side, although that is not always possible.
Taste the salsa to see if you need to add a bit more salt or lime juice for the right balance.
Serve cold, warm or at room temperature. With chips, on top of eggs, with guacamole or however you see fit.