In one case (in a production environment), I built a system using Turbo-Pascal in about 8 weeks and then came across Icon (Griswold). From getting the Icon system to rebuilding the Turbo-Pascal system in Icon was a total of three days. One of the problems that was encountered in the Turbo-Pascal system was a continual change in the input data being supplied. With Icon and its string matching facilities, that problem disappeared. Ease of use, language facilities provided and high level data structures, etc, have been the important features of Icon and later UnIcon.
In many of the varying jobs that I have undertaken over the decades since, my go to language has been Icon and since about 2000, UnIcon (Jeffery). Though it has some missing facilities (like lambda functions), it has many facilities that make many of the programming tasks I have had to deal with much simpler than many other languages.
If I have not been able to use Icon/UnIcon, then I have programmed in the available languages in as close a methodology to Icon/UnIcon as possible, which usually means building the various string scanning functions of Icon/UnIcon as I can and using them accordingly.
I have considered one of the Icon/UnIcon language features to be the most outstanding of all I have come across and that is "Failure is an option". I have yet to see other languages take this up to anywhere near what Icon/UnIcon normally supplies.
When you can write something like
if 0 <= x <= 10 then {....}
to mean that when x is between 0 and 10 inclusive do something
or even something like
if 0 <= (x | y) <= 10 then {.....}
when x or y is between 0 and 10 inclusive do something
you know you've got something to work with.