En primer lugar, debe haber una clara distinción entre mantenimiento/soporte y garantía. En tu ejemplo, deberías tener una garantía razonable que indique que tu función hace X, Y y Z. Si no hace estas cosas, debería estar en la garantía que puedes (y debes) arreglarlo. La garantía debe tener unos términos claros en cuanto a plazos de entrega, tiempo de respuesta e indemnización.
El mantenimiento y la asistencia son independientes de la garantía, de modo que si el usuario desea una mejora, actualizaciones de compatibilidad, etc., debe pagar por dicha mejora mediante un contrato de mantenimiento y asistencia.
He comprobado que es una buena práctica establecer importes mínimos de compra en cuanto a horas de mantenimiento y asistencia. De esta manera, alguien no te compra 30 minutos o 1,5 horas. Tu tiempo es tu inventario, y debes venderlo como tal. Establece unos mínimos de cantidades razonables, como 10 o 20 horas, dependiendo de tu cliente.
Cuando alguien acude a ti para el mantenimiento y la asistencia, puede comprar estas horas en trozos y hacer con ellas lo que considere oportuno (dentro del alcance que hayas definido, por supuesto).
También es bueno establecer una caducidad en estas horas. Esto te permite aumentar las tarifas en consecuencia a medida que avanzan tus habilidades y la demanda. No querrás que alguien se aproveche de las 100 horas que te compró hace 3 años a 1/3 de tu tarifa actual.
Por último, el mantenimiento y la asistencia deben pagarse por adelantado. Dado que se trata de soporte y no necesariamente de un producto, el cliente básicamente "reserva" su lugar en tu calendario. De lo contrario, debe saber que si no reserva un lugar, es posible que no esté disponible cuando lo necesite.