building smarter applications