Thank you for the great article. As for you model classes with empty constructors, like

abstract class BaseModel(override var id: Int?): Model { constructor(): this(0) @JsonSerialize(using = DateTimeSerializer::class) var createdAt: DateTime? = DateTime() @JsonSerialize(using = DateTimeSerializer::class) var updatedAt: DateTime? = DateTime() }

Did you consider using no-arg compiler plugin to reduce some amount of boilerplate?