# I want to know Best Practices for Using Param with HoloViz – I want Suggestions

**URL:** <https://discourse.holoviz.org/t/i-want-to-know-best-practices-for-using-param-with-holoviz-i-want-suggestions/8661>\
**Category:** Param\
**Tags:** param\
**Created:** [March 25, 2025, 7:36am UTC](https://discourse.holoviz.org/t/i-want-to-know-best-practices-for-using-param-with-holoviz-i-want-suggestions/8661 "2025-03-25T07:36:14Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![disuja](https://discourse.holoviz.org/user_avatar/discourse.holoviz.org/disuja/32/7159_2.png) [@disuja](https://discourse.holoviz.org/u/disuja)\
**Post date:** [March 25, 2025, 7:36am UTC](https://discourse.holoviz.org/t/i-want-to-know-best-practices-for-using-param-with-holoviz-i-want-suggestions/8661/1 "2025-03-25T07:36:14Z")

</div>

Hey everyone,

I have been diving into HoloViz’s Param library & I am impressed with how it simplifies parameterized code when building interactive apps. I feel such as I am just scratching the surface & want advice from experienced users here.

Are there any common pitfalls to avoid?  
How does Param handle large datasets or frequent updates?  
Have you created your own? If so, any tips?  
What is the best way to link Param with Panel for smooth UI updates?

While exploring these topics, I also came across some use cases where [java training](https://www.igmguru.com/digital-marketing-programming/java-certification-training) programs integrate with Param-based dashboards. Has anyone tried something similar?

I want to hear about real-world examples or even some dos and do not from your experience. Alos I have see this [How does param.Action/Callable handle passing self to function? Unexpected behavior in conjunction with Panel](https://discourse.holoviz.org/t/how-does-param-action-callable-handle-passing-self-to-function-unexpected-behavior-in-conjunction-with-panel/6665) If there are Any insights, code snippets or resources please share it would be helpful.

Thank you… 😊

---

<div class="post-metadata">

**Author:** ![jeswork](https://discourse.holoviz.org/letter_avatar_proxy/v4/letter/j/e95f7d/32.png) [@jeswork](https://discourse.holoviz.org/u/jeswork)\
**Post date:** [March 25, 2025, 3:08pm UTC](https://discourse.holoviz.org/t/i-want-to-know-best-practices-for-using-param-with-holoviz-i-want-suggestions/8661/2 "2025-03-25T15:08:03Z")

</div>

For me, these were the best pages:  
[https://panel.holoviz.org/how\_to/best\_practices/dev\_experience.html](https://panel.holoviz.org/how_to/best_practices/dev_experience.html)  
[https://panel.holoviz.org/how\_to/best\_practices/user\_experience.html](https://panel.holoviz.org/how_to/best_practices/user_experience.html)

And the best example for my application was:

> **[Year vs Climatology - a Hugging Face Space by ahuang11](https://huggingface.co/spaces/ahuang11/year-vs-climatology)**
>
> Discover amazing ML apps made by the community

What is the best way to link Param with Panel for smooth UI updates?  
I’ve taken the habit of creating child classes of pn.viewable.Viewer like this:

```auto
class RandomClass(pn.viewable.Viewer):
    # Parameters for the UI

    # Content Control
    param1 = param.ListSelector(default=[], objects=[], label='Filter for specific runs',
                                   doc="edited out")

    param2 = param.ListSelector(default=[], objects=[], label='Filter for specific runs',
                                        doc="edited out")

    param3 = param.ListSelector(default=[], objects=[''],
                                          label='',
                                          doc="")

    def __init__ (self, plot_width = 850, **params):
        super(). __init__ (**params)

        self._min_width = plot_width
        self._min_height = 350
        ....

```

I then use DynamicMaps or @param.depends depending on the use case to bind params to plots or functions

```auto
dynamic_curve = hv.DynamicMap(
                    pn.bind(
                        self._your_fcn_that_returns_the_thing_to_display,
                       self.param.param1, 
                       self.param.param2,
                       self.param.param3))

```

```auto
    @param.depends('param1', 'param2', watch=True)
    def update_offset(self):
        self.delta_offset = self.convert_offset(self.param1, -self.param2)
        self.offset = int(self.delta_offset+self.tool_offset)

```

It depends on what you’re trying to do, but if it’s data display, getting a good grasp on dynamic maps, layouts, overlay and bind is essential. For me, that’s what was hardest to grasp, but once you do, it becomes easier.
