How does Segwit achieve backwards compatibility in terms of the block size?
Segwit changes the definition of a maximum block size to be something called block weight. The maximum block weight is 4000000 weight units. We use the following formula to calculate the block weight:

3 * (size of non-witness data) + (size of everything including witness data)


So we can do some math here to figure out if the size of non-witness data will ever be more than 1 MB.

Let x = size of non-witness data
Let y = size of just witnesses
4000000 &gt;= 3x + (x + y)
4000000 &gt;= 4x + y
4000000 - 4x &gt;= y


Since this is just a downwards sloping line, the point at which y = 0 is where x will be the greatest. So setting y to 0:

4000000 - 4x &gt;= 0
-4x &gt;= -4000000
 x &lt;= 1000000


Thus the largest the non-witness data can be is 1 MB, which is exactly the maximum block size for non-segwit nodes. Since non-segwit nodes will only see the non-witness data, segwit is backwards compatible as blocks would still be within the size limit.