Having taken some time to look over the design, here are some problems I see with it:
The temperature measurement is not very accurate. It uses LM35 temperature sensors feeding the ADC input of the Arduino. The LM35 has guaranteed accuracy of 0.5 degrees C, and outputs a voltage of 10mV per degree C. The temperature range of interest is around 20-40 degrees C, so the output voltage will be in the range of 0.2-0.4V. The ADC is a 10-bit device (1024 steps), and he appears to be using the default analog reference voltage, which is the +5V power supply (no call to analogReference() in the code). Now, this is a problem, as the power supply cannot be considered a precision voltage reference - its value will vary. But even if we assume that it is exactly 5.0 volts, we are using a very small range of that 5 volts. Each step of the ADC corresponds to approximately 5mV, which is half a degree. And yet, he goes to great lengths to avoid self-heating in the LM35, which is 0.1 degree or less. The schematic does not show any signal conditioning on the LM35 outputs, so noise could be a factor affecting the precision of the ADC readings.
Using the internal 1.1V voltage reference would improve things. The accuracy would then be on the order of 1mV per step, or 0.1 degrees, though I would still not consider this a precision voltage reference (nominally 1.1V, but can be between 1.0 and 1.2V per spec). However, the temperature control loop is still a problem. The heater consists of nichrome wire embedded in fire cement. This has a certain amount of thermal mass and will continue heating (i.e., raising the temperature) of the water bath and developing tank after the heater is shut off. Just how much is unknown without actually building it and trying it (or doing a whole lot of math that I don't care to do), but the control loop simply waits until the actual temperature exceeds the desired temperature before shutting off the heater.