Peel and dice the potatoes into 1/2-inch cubes, dice the ham into 1/2-inch pieces, and finely dice the onion. Having everything prepped and ready before you start cooking will make the process smooth and prevent the soup from overcooking while you're still chopping. Soften the cream cheese to room temperature by leaving it out for 20-30 minutes; this is crucial to prevent lumps from forming when it hits the hot broth.
Combine the water and chicken bouillon in a large pot and bring to a boil over medium-high heat, stirring occasionally to dissolve the bouillon completely. This creates a flavorful base that will cook your vegetables and carry all the seasoning throughout the soup. Once the broth is at a rolling boil, add the diced potatoes and onion, then reduce heat to medium and simmer for about 10 minutes until the potatoes begin to soften.
Reduce heat to medium-low and add the softened cream cheese in chunks, stirring constantly until it's completely melted and incorporated into the broth—this low heat is essential to prevent the cream cheese from becoming grainy. Once smooth, stir in the diced ham, garlic powder, and dill. I like to add the dill toward the end of cooking rather than at the beginning; this preserves the fresh herbal flavor better than if it simmered the whole time.
Simmer the soup for another 8-10 minutes, stirring occasionally, until the potatoes are completely tender and the flavors have melded together. Taste and adjust seasonings as needed—you may want a bit more dill or garlic powder depending on your preference. Ladle into bowls and serve hot.