Move cash faster

May 31, 2013
I joined Wealthfront last week as a new engineer, and I recently wrapped up my first meaty development project within the backend trading system written in Java. The task was to modify the logic used for client withdrawals. Specifically, add logic to first pull from any incoming deposit money that is sitting in escrow, waiting for the transfer to settle or the check to clear. Aside from being what the client likely expects, this withdrawal behavior prevents unnecessary liquidation of assets in certain circumstances, which is good for the value of the client's Wealthfront account.
The infrastructure and development process here is awesome. The mainstay of this awesomeness is Wealthfront’s true continuous integration process. Already I can see that it changes how we work. The development process feels steady - not cyclic, which is good for one’s emotional well being.  Even better, the parts of the process that are missing are the least enjoyable parts! I’m only two weeks in, but it sure feels like I have more time to code, which is what I like to do. The engineering team here has obviously invested a lot in the creation of tools, process, and tests which make it all possible. I haven’t dug into the magic yet, but I pushed “the button” after code review and merge, and a few minutes later my code was running in prod.
So there I was on day two working with the code that withdraws client money from the system. Pretty legit first project, given that there are no QA engineers here and it is real money. My first inclination was to run the full suite of unit tests on localhost. However, there are 8600 of them! Nice. I soon learned about PrecommitTests, which runs a subset that it deems important based partially on what files I have modified. Sweet - it runs fast. No worries, because Jenkins runs the full suite whenever I commit.
Not surprisingly, my first cuts broke a lot of tests. One test I really appreciated was JavaBadCodeSnippetsTest. It caught my misuse of Joda’s LocalDate - I failed to explicitly specify the ET timezone:
Past experience with timezone bugs has given me great appreciation for how tricky they can be to notice, and then track down. Needless to say, I am happy that a unit test nipped this one in the bud. And, I am impressed by the testing infrastructure that allowed me to work on critical code with confidence from the get go.
I'm off and running. In the absence of deployment scripts and localhost server configuration, dev ramp up was quick. I’m working on adding mutual fund support into the system now. Week two and I feel productive and important.