Sunk costs are those that have been incurred in a project, but have not produced value towards the project’s objectives. For example, if

click to enlarge
you are making a cup of tea and spill the milk that was to be used in the tea, then the value of the milk is your sunk costs.
Here’s another example, suppose you have hired a freelancer to develop a website in .NET. After a month, you decide that the freelancer isn’t doing a good job and reach out to another freelancer. The second freelancer convinces you that .NET is not the way to go and that your website project would be better off based on the Java platform. The cost associated with the .NET freelancer would be treated as Sunk Costs. However, if the second freelancer could build on the .NET work of the first freelancer, then your costs would not have sunk.
Ideally, platform selection in software development projects should be taken very early in the project, such as right after you Collect Requirements. As the decision impacts many other factors, such as skill and infrastructure resources, it should taken as early as possible in the project life-cycle. Sunk costs are often a consequence of not collecting requirements properly.