I2C requires pullups, since it's driven by an open drain circuit.
the PCF8574 is found in many lcd backpacks, works ok, but requires the right bus speed and the lcd requires the right timing, which is no so easy to achieve, if you write your lcd lib from the scratch
I bet it's a speed or timing issue. some more information about the project/code would be helpful.