You aren't checking the return value of HAL functions, always do it, should be HAL_OK.
Return values can be HAL_OK, HAL_ERROR, HAL_BUSY, HAL_TIMEOUT.
IT functions are non-blocking, so:
HAL_UART_Transmit_IT(&huart1, question, sizeof(question)); // This won't wait until sent, so instantly proceed with
HAL_UART_Receive_IT(&huart1, answer_data, 9); // With this
It should work, as the device won't start sending anything until he gets the command, but it might be causing some conflict in HAL or whatever.
Also, using IT to later wait in a loop is silly and won't provide any benefit, just do non-IT, removing possible sources of trouble:
HAL_UART_Transmit(&huart1, question, sizeof(question), 100); // 100m timeout
HAL_UART_Receive(&huart1, answer_data, 9, 100); // 100ms timeout
TX failing would be rare as it only depends on the uart interface, will send the data no matter who is listening at the other side.
But RX fully depends on the external device, if for whatever module doesn't answer back you'll get a timeout.
Never asume it'll always work when working with external peripherals.
HAL_StatusTypeDef status;
status = HAL_UART_Receive(&huart1, answer_data, 9, 100);
if (status!=HAL_OK){
// check if it's error, timeout, busy...
}