Place potato cubes in a large pot and cover with cold water by 1 inch. Bring to a boil over high heat, then reduce to a simmer and cook until potatoes are tender when pierced with a fork, about 10-12 minutes.
While potatoes cook, place eggs in a medium saucepan and cover with cold water. Bring to a boil, then cover and remove from heat. Let stand for 12 minutes.
Drain potatoes and spread them in a single layer on a baking sheet to cool completely. This prevents them from becoming mushy.
Transfer eggs to a bowl of ice water and let cool for 5 minutes before peeling. Chop eggs into bite-sized pieces.
In a small bowl, whisk together mayonnaise, Dijon mustard, salt, pepper, paprika, and vinegar or lemon juice until smooth.
In a large mixing bowl, combine cooled potatoes, chopped eggs, red onion, celery, dill, and parsley.
Pour dressing over potato mixture and gently fold everything together until evenly coated. Be careful not to overmix.
Cover and refrigerate for at least 1 hour before serving to allow flavors to develop. Taste and adjust seasoning if needed before serving.