Millisecond pulsars (MSPs) are known as highly stable celestial clocks. Nevertheless, recent studies have revealed the unstable nature of their integrated pulse profiles, which may limit the achievable pulsar timing precision. In this paper, we present a case study on the pulse profile variability of PSR J1022+1001. We have detected approximately 14,000 sub-pulses (components of single pulses) in 35-hr long observations, mostly located at the trailing component of the integrated profile. Their flux densities and fractional polarisation suggest that they represent the bright end of the energy distribution in ordinary emission mode and are not giant pulses. The occurrence of sub-pulses from the leading and trailing components of the integrated profile is shown to be correlated. For sub-pulses from the latter, a preferred pulse width of approximately 0.25 ms has been found. Using simultaneous observations from the Effelsberg 100-m telescope and the Westerbork Synthesis Radio Telescope, we have found that the integrated profile varies on a timescale of a few tens of minutes. We show that improper polarisation calibration and diffractive scintillation cannot be the sole reason for the observed instability. In addition, we demonstrate that timing residuals generated from averages of the detected sub-pulses are dominated by phase jitter, and place an upper limit of ~700 ns for jitter noise based on continuous 1-min integrations.