Julia has a JIT compiler that works by doing type inference on code. It tries to guess the types of the variables. With strongly typed languages, the compiler simply mark miss-typed variables as error. But what happens in flexible languages where no such error exists ? How the compiler manage control-flow and exceptions ? We will present how type inference works in Julia and which techniques Julia's people came up to overcome difficulties.