We consider the problem of finding a low discrepancy coloring for sparse set systems where each element lies in at most $t$ sets. We give an algorithm that finds a coloring with discrepancy $O((t \log n \log s)^{1/2})$ where $s$ is the maximum cardinality of a set. This improves upon the previous constructive bound of $O(t^{1/2} \log n)$ based on algorithmic variants of the partial coloring method, and for small $s$ (e.g.$s=\textrm{poly}(t)$) comes close to the non-constructive $O((t \log n)^{1/2})$ bound due to Banaszczyk. Previously, no algorithmic results better than $O(t^{1/2}\log n)$ were known even for $s = O(t^2)$. Our method is quite robust and we give several refinements and extensions. For example, the coloring we obtain satisfies...