# Improving a working program [Programming guides](README.md) A program can work correctly and still be difficult to understand. Improving its structure without changing its intended behaviour is called **refactoring**. You might choose a clearer name or put repeated steps into a function. First make it work. Then make it easier to read. Save a working version before making a change so you have something to compare with. ## Organize your instructions Imagine rewriting a long recipe so all the steps for making the sauce sit together. The meal should stay the same, but the recipe becomes easier to follow. In code, a function can group steps that have a useful shared purpose. You do not need to create a function for every single line. Choose groups whose names explain the job they do. ## Give a repeated job a name Suppose your program repeatedly adds coins and stars, with each star worth three points. We can describe that calculation once: ```pliro # language: en function calculateScore(coins, stars): return coins + stars * 3 say calculateScore(2, 4) say calculateScore(5, 1) ``` The parameters `coins` and `stars` receive the values for one call. `return` sends the calculated number back. The function does not print anything itself; the calling `say` displays each result. ## Predict, then run Use the scoring rule to calculate both answers on paper. ```text 14 8 ``` Those are the results that the earlier repeated calculations should also have produced. Keeping the same answers is part of checking a refactor. ## Your challenge Add a call for zero coins and zero stars. Then choose an even clearer function name if you can, updating both its declaration and calls. Check all three results afterwards. ## A common mistake Changing the rule while reorganizing the code makes it harder to know why an answer changed. Making stars worth five points is a new game rule, not just a refactor. Do that as a separate change with new expected results. Shorter code is not always clearer code. Prefer names and steps that you can explain aloud. A helpful comment explains a reason, such as why stars are worth extra points, instead of repeating every instruction in words. ## Where next? [Functions](../syntax/function.md) · [Clear names](clear-names.md) · [Testing](testing.md)