The distinction between hard and soft consonants carries an enormous amount of grammatical information in the Slavic languages, and a writing system has to record it somehow. There are only two ways: mark the consonant, or mark the vowel that follows it.
Cyrillic chose the second, and the choice is visible throughout the alphabet. Slavonic wrote a glide plus a vowel with its own letters, the iotified series, and the modern alphabets continue the principle with vowel letters that do double duty, saying both which vowel is present and whether the consonant in front of it is soft. On that system the reader learns the consonant quality by looking one letter ahead.
The system has a gap. A soft consonant at the end of a word, or in front of another consonant, has no following vowel to carry the information, and there the front jer steps in. Modern Russian orthography is exactly this: vowel letters do the work where a vowel follows, and the soft sign does it where none does.
That is a tidy solution to a real problem, and it was not designed. It is the accidental outcome of a vowel falling silent and leaving its side effect behind, and it happened to land on a script whose vowel letters were already carrying consonant information for unrelated reasons.
The alternative approach, marking the consonants themselves with diacritics, is what the Latin based Slavic orthographies do, and comparing a Czech page with a Russian one shows two entirely different answers to one question.