Lessons from Workday CEO Aneel Bhusri

While at Workday this summer, I had the pleasure of attending a fireside chat featuring the company’s co-founder and CEO, Aneel Bhusri. Below are my annotated notes.

  • An MBA is not that valuable unless it is from a big name school where the network makes it worthwhile.
  • Mentors are everything.
  • No one has any idea how the markets will play out.
  • For choosing a place to work, culture is more important than the product.
  • Social media has had both good and bad impact, Workday makes businesses better and people more productive.
  • [Aneel] would work at Amazon, Jeff Bezos is “brilliant”.
  • Always ask: how can you make society better?
  • Workday has 30% of Fortune 500, Oracle/SAP 7%, rest undecided
  • Questions matter: best to ask great questions and then shut up and listen.
  • Questions to ask when choosing a first job:
    • Where are the best mentors?
    • What size company do I work best in? What is my risk tolerance?
    • What do they do that is defensible?
    • Do I like their tech stack?
  • Startups/SV are in a bubble now, super overfunded.
  • Workday moving from SaaS -> PaaS -> DaaS a la Amazon and Salesforce
    • Want startups to be able to form in the Workday ecosystem
    • $1B revenue from platform predicted (timeframe?)
  • Take care of your customers and employees: “Best place to work” correlates with stock price.
  • Your best salespeople are your existing clients.
  • Great employees are the lead domino.
    • Leads to taking care of customers and building a great product
  • Employees join companies and leave managers.
  • Workday’s moat: tying together the plan, execute, analyze cycle into one solution.
  • AI and ML are just tools, you need to focus on the problem first.
  • Best use of ML right now still has humans in the loop for decision making.
  • Better writer equals better communicator equals better leader/manager
    • Workday adopted Amazon’s practice of writing reports for meetings.
  • Founder led companies are generally more innovative than professional-CEO led companies.
  • Recruiting is always the hardest part.
  • Need to stay ahead of technology disruptions (how?)
  • On being a great leader:
    • Optimism
    • Work within your own personal leadership style
    • Learn to manage different types of people (salespeople vs engineers)
  • Learn as much as you can from great mentors.
  • Need to define and incentivize your core values if you want people to follow them
  • The hardest thing is letting people go who are talented, but don’t fit the core values.

I’m 20

Inspired by Scott H Young‘s series of posts on his birthday (latest one here), I’m going to write an update on what has happened in my life in the last year. Twenty years old seems to be as good a starting point as any, and it should be interesting to read these later to see how my life and views have changed.

For now, I’ll follow the same format as Scott: I’ll go over what has happened in my life this last year, plans for the future, and how my views on life have changed.

My Life Last Year

In one word: humbling. And if I could add another: rewarding.

In the past year, I failed two classes, dropped many more, failed at a side project, left another unfinished, had the resign from a solid opportunity due to burnout, and largely failed in my role as CEO of the Inventor’s Guild.

But. Also in the past year, I started training jiu-jitsu, which led to gains in my health and fitness, obtained a position at a Big-4 company, made leaps of progress in my personal life, and perhaps most importantly, become a better person.

I am not as good as I think I am. But I am getting better.

My Plans for Next Year

While I think that a year is too long a time frame to set any useful goals, I do think that having themes or areas of focus can be helpful.

Prioritize and Execute

Be more deliberate about what I am choosing to get done. Don’t say yes to everything that comes my way. Evaluate if it aligns with my existing priorities and if it is something that I can put 100% effort into. Be more realistic about my work capacity and don’t take on too much. Act in order of priority at all times. Do not procrastinate uselessly. Block out time on my calendar to do the most important things and when the time comes, DO THEM.

Think Big, Act Small

Recognize that life is long and that it is better to create behavior change slowly and effectively rather than quickly and ineffectively. Focus on ONE THING at a time until it is a habit. Then and only then move on to something else.

Self Compassion

Be nicer to myself. Improve my self talk. Know that no matter what happens, I am enough. I am not my job, nor my achievements, nor my thoughts or emotions.

Long Term Plans for the Future

I continue to believe that entrepreneurship is the highest leverage activity available for those who want to make a difference. In the past year, I do think that I have become more realistic regarding the difficulty of entrepreneurship and as a result, in the future, need to be more deliberate about developing the skills needed and if an opportunity does come my way, to evaluate if I have the skills to execute.

Starting to train BJJ gave me a purpose for my physical training and nutrition. I will continue to train BJJ as much as I can and as much as possible stick with my training and eating programs.

I want to invest more in both the relationships that I currently have as well as make an effort to creating new relationships, both personal and professional.

Changes in Outlook

This past year I’ve started to recognize the necessity of long term thinking. Having not lived for that long, it is hard to imagine what things will be like in 2x, 3x, even 4x the time that I’ve experienced so far. As I get older, I expect that this will come naturally, but for now I need to consciously include it in my thought processes.

I’ve also put more of an emphasis on people and fostering more and deeper relationships. This was probably due to the amazing people that have entered my life in the past year. Since realizing this, my happiness has increased markedly and I only expect that to continue.

After burning out, I guess it is inevitable to not recognize the importance of mental health. I need to always be wary of how I am feeling about what I am currently doing, where I am going, and my life in general. And to take breaks and vacations when necessary to be able to recover and come back ready to go.

This was a short post that I’m not sure will be of use to anyone else, but it should be interesting to be able to look at it years from now.

Takeaways from Jane Street’s Electronic Trading Challenge

Last weekend, I had the pleasure of attending Jane Street’s Electronic Trading Challenge. Two fellow interns and I formed a team to compete in a simulated market to see whose bot could generate the most money. We took third place in the first part of the competition, but didn’t do so hot in the second part. Unfortunately, there were only prizes for the first place team in the second part, so we didn’t win anything :(. Regardless, I had an awesome time and it was fun to learn about something that I’d previously had very little exposure to.

You can see our code here: https://github.com/charlieyou/jsetc

Competition Setup

It’s a 10 hour competition split into two parts: the first being nine hours, running continuously; the second being the last one hour where everyones’ points reset back to zero.

There is a simulated market containing seven securities available to trade: GOOG, AAPL, MSFT, NOKIA, BOND, NOKADR, and XLK. GOOG, AAPL, MSFT, and NOKIA each had fair values that were random and unknown. BOND’s fair value was known to be 100, NOKADR was an ADR of NOKIA, and XLK was an ETF of the four first securities. The price of each security on the market was random around it’s underlying fair value. The ADR and ETF had the same fair value of the sum of it’s underlying securities, but were much less liquid.

For five minutes, you and another bot trade against each other in this simulated market to see who can walk away with the most money.

What We Did

First, we traded BOND whenever the ask was below 100 or the bid was above 100. This gave us some profit to start, but not much. We then moved onto parallel development of three other strategies: ADR pair trading, mean reversion, and fair value prediction.

The NOK* ADR pair had the same underlying value, so when their prices would diverge, we traded both in the direction of the other. Like trading BOND, this was fast and easy to implement, but didn’t give us that much profit.

Mean reversion was the main thing I worked on, but ultimately could not get it to be profitable enough to deploy. This is because the price of the securities was stochastic and therefore not predictable with mean reversion. Unfortunately, I didn’t reflect on this during the competition, so lots of time was wasted implementing and testing this.

Fair value prediction was our main money-maker but was also very finicky. We would use an exponential moving average to try and predict the fair values of the first four securities, then trade them in the direction towards this fair value. There was lots of tuning done with the exact way that we calculated the prediction and the high computation involved led our both to be quite slow.

Because we got such an early start in getting something to work, we jumped to second place and stayed there for the majority of the competition until we were moved to third by the team that would ultimately take first in both the first and second parts. Our performance in the second part was lackluster at best: we finished in the middle of the pack (15/30). I hypothesize that this was because our bot was slower than most and thus couldn’t keep up with the trading speeds of the other final bots. However this doesn’t explain how we did so well in the first part. I attribute this to us getting a large head start on everyone at first and to randomness. Unfortunately, we’ll never know the exact reasons.

What the Best Team Did

One team absolutely dominated everyone else in the second portion of the competition: they scored over one hundred thousand points where the next best team was at thirty thousand with most in the under ten thousand range. Afterwards, I asked them what their strategy was and they graciously shared with me:

Like us, they started with only trading BOND to get something going as quick as possible, then moved onto NOK* ADR pair trading. Our strategies differed in that they didn’t simply average the two symbols, they weighted the more liquid one higher.

They made the majority of their money with a strategy that we tried to implement, but ultimately ran out of time to: ETF arbitrage. Whenever the price of the ETF and the sum of it’s underlying securities would diverge, they would trade the ETF in the direction of the difference. They hedged this trade 5:1 and could control the frequency of trading by adjusting the threshold by which a trade was made.

Three other things that they did that gave them an edge:

  1. Coded everything in C++, which made them faster than whoever they were trading against (almost everyone else used Python or Java).
  2. Limited the orders on the book to only two, canceling any orders that were made based on old information.
  3. Kept track of what was in their portfolio at all times, letting them execute some optimizations based on the holding limits.

Other Takeaways

One thing we did well was to setup our codebase so that everyone could easily develop and test strategies independent of one another. The strategies used on each test or deployment were specified on the command line, so no additional code changes were needed besides adding the file containing the subclass were needed.

What we didn’t do such a good job of was our actual deployment system onto the server. We would push code to git and then pull it on the server. This was perhaps the worst way to do it. It caused lots of unnecessary commits and made us get lazy with our version control, leading to multiple problems later on. In addition, we had separate folders for each person’s working code on the server, but they were not named very distinctly. There were times when someone would accidentally overwrite something in someone else’s folder, causing issues with lost code and developer time due to confusing errors.

Overall, the event was extremely well run and I highly recommend that anyone attend it if they can. I will definitely be applying for Jane Street’s summer internship as I’d like to get a better sense of the work that they do as well as the tech behind it.

Update (2017-09-06): Jane Street rejected me for a summer internship :(.

Speaker Notes from Internapalooza 2017

Last Tuesday, I had the pleasure of being able to attend Internapalooza, a large gathering of interns in the Bay Area. While definitely not a flawless event (see my recommendations at the bottom, it was definitely worth checking out!
It started out with a Q&A with one of my favorite influencers, Naval Ravikant, followed by Dropbox CEO Drew Houston. In the middle were some not-so-great speakers, but there was a strong finish with a Q&A with Andrew Ng. My notes from the three named speakers above are below followed by some of my recommendations for the event.

Speaker Notes

Naval Ravikant:

  • What you work on is more important than how you work on it
  • Don’t let anyone control you, don’t try to live up to anyone else’s expectations, don’t be afraid to change your mind
  • Deep understanding of the basics will take you farther than just the specifics of just one thing
  • Be the hero of your own movie
  • Reframe setbacks as growth opportunities

Drew Houston:

  • Ask for responsibility, take initiative
  • Compound your learning
    • Learn to learn
    • Always find opportunities for learning
    • Ask people to book recommendations, things to learn
    • Take the path that optimizes for learning
    • Throw yourself into the deep end
    • Run towards the discomfort
  • Networking pays off in ways you can’t expect

Andrew Ng:

  • Follow good mentors
  • Be wary of joining a company that won’t tell you your team/boss until after you sign
  • Read papers and try to replicate state of the art results
  • Have a significant project
  • AI is the new electricity, every industry will be changed
  • Healthcare, education most promising/underhyped
  • Transfer learning interesting, GANs, RL as well
  • Most economic value in supervised learning
  • Large companies have advantage for larger verticals (search, etc) bc of larger datasets
  • More specific verticals super viable for startups, can form data accumulation loop
  • Go to San Francisco or Beijing
  • Don’t necessarily need advanced degree, company experience fine as long as you learn, increasingly more based on what you can do
  • Be a lifelong learner


There are three things I would change to improve Internapalooza (besides removing the ‘a’ in the middle of the name).

Make it a premium event. Because it was free, I don’t think most attendees gave the speakers the respect they deserved. If it was paid, there would have been a smaller but much more engaged audience. I felt that there were far too many people there for the space anyways. At times it was hard to even walk around without pushing your way through. In addition, it would have been nice to have food there since the event occurred during dinner time. I understand that this was not possible because of financial reasons, and this is yet another reason to sell paid tickets.

Having company booths there felt like an afterthought. It seemed to have been pitched to us as a career fair-type event, but resumes were not allowed and the experience from booth to booth was very inconsistent. Some were taking names, some were just there to provide information, and some were demoing their tech. It’s as if companies were not told what to expect as well.

The speakers who were sandwiched in between the keynotes seemed not to have prepared very much for it. As a result, their presentations were boring at best. At one point, a speaker started to pitch us his startup as if we were a crowd of VCs. Know your audience!

Although, overall, it was definitely worth going to just for the three speakers I took notes for and I look forward to seeing what it becomes in the future.

Random Observations on San Francisco

I’ve just finished moving into my apartment for the summer in San Francisco where I’m working as an SDE intern for Workday.

Here are a few things I’ve noticed about SF so far:

  • The homeless problem was not exaggerated. It really is bad.
  • Uber is amazing. New York needs to step aside and let capitalism do it’s job.
  • Free same-day and 1-day delivery from Amazon Prime is amazing too.
  • It’s not as warm as I thought. I failed to bring my other pairs of jeans and sweatpants, so I’ll have to
  • Target, Trader Joe’s, Costco, gyms, grocery stores–everything is so close!
  • So much good BJJ: I’ll be training at Ralph Gracie’s academy and 10th Planet’s SF satellite.
  • Everyone honks all the time. Why?
  • Vegan heaven. The two top rated restaurants around me are both vegan and there’s a vegetarian grocery store very close by.

Keep in mind that this is also the first time that I’ve lived in a major city since I’ve had personal agency.

I’m going to try and write a lot more often since it’s the summer now, so stay tuned for more!

Linux Kernel Project Update: End of Semester Wrap-up

It’s been a fun summer to work on this project and I want to thank everyone in Microsoft and RCOS that helped to support us!

My main takeaway is that OS dev is really hard and that after this project, I don’t really want to touch it again. I did, however, learn an incredible amount about a variety of things in the kernel including how drivers work, how devices communicate, SPI interfaces, and much more.

I agree with Max that Arch Linux may have been a poor choice to start with. During the summer, I’ll continue working on this to both add additional functionality and to document the install process on other flavors of Linux.

I’m glad that we were able to work with external contributors (cb22, roadrunner2, and more) to get the keyboard and trackpad working as that really sets the stage for further work. There are still quite a few things left that aren’t working: suspend/resume, speakers, bluetooth, and webcam, with the first being miles more important than the rest.

Here are all of the loops that we have left to close:


  • How do we eliminate the need to recompile the kernel when fiddling with DSDT?
  • What are the side effects of disable LPSS? Can we rework something in LPSS so that it doesn’t hijack the keyboard output?
  • What are the steps to getting patches added to the upstream kernel? What do we need to change to get it accepted?


  • Where in the keyboard drivers is rollover handled? Why is it not correctly dealing with our keyboard?
  • How is keyboard backlighting handled on other laptops in the kernel? Is there any major difference in the hardware (besides SPI) between our keyboard and others?


  • What are those custom op-codes doing? Are they even relevant?
  • Is LPSS being disabled effecting suspend?
  • Could it be that suspend is working, but there is a problem with resume?


  • At what level of the audio stack is communication to the speaker breaking down?

For now, I’ll be focusing on suspend/resume and Max will be working to get our work so far merged upstream.

Again, thank you to everyone who helped us along the way!

Aftermath of My First BJJ Tournament

Last weekend (Apr 22) was my first BJJ tournament: The Good Fight New York State Championship. I fought as a 155lb white belt in both gi and no-gi. Small weight cut, probably fought at 4-5lb above.

My goal going into it was just to win one match. I ended up winning two! One in gi, one in no-gi. The way the brackets worked out, I actually got to fight three times in each division: a first round, a semi-final, and then a third place match. Despite losing these matches, I was happy that I got more experience in competition.

Overall, the day was super fun! I got to watch all my teammates compete and a bunch of them won medals! The environment was incredible and this competition  just adds to my infatuation with the art and makes me want to train more.

Here are the breakdowns (as much as I can remember) of my matches:


Match 1:

In my first match, I faced a one stripe white belt who was about the same size as me. The match was pretty back and forth, I wasn’t keeping track of points or advantages, but I think I finished slightly ahead. We went to overtime where both of us escaped back control, mount, armbar, and then were submitted with triangles. In double overtime, we both escaped back control and mount. Starting in spider web, I was able to pry his grip and secure the submission. To end the match, I escaped from his spiderweb, giving me the victory!

Match 2:

I don’t remember this one too well. I faced a four stripe and it was pretty one-sided. I was still pretty tired from the last match and made a bunch of mistakes (not that I wouldn’t of made mistakes if I was rested) that ended when he submitted me with an ezekiel choke when I went to escape from mount,

Match 3:

For the third place match, I faced a three stripe who was shorter than me and quite strong. It was not as one sided as the last match, but he was definitely much better than me. Eventually I lost to a triangle when I went for an escape from mount.


Match 1:

For the first no-gi match, I faced a kid who was clearly pretty inexperienced (even more than myself), and decided to go for a takedown. I shot a double leg where my penetrating step was not deep enough or fast enough. He countered with a guillotine that I got out of and then decided to just pull guard. The match consisted of me attacking from closed guard and I eventually finished him with a kimura. He had super flexible shoulders and I really had to crank it back, enough so that I was quite concerned his arm was going to break. Brian said, “My arm broke three time just watching that.”

Match 2:

Second no-gi match was against a super fast black guy. Again, I tried a failed takedown which led immediately to a counter where he ended up passing my guard. All of his transitions between positions were super quick. I would go for one escape, and before I knew it, he was somewhere else. I was barely surviving his onslaught and he eventually caught me with my arms out of position and finished with an Americana from top smash half guard.

Match 3:

My last match, I went against a kid who had a super strong upper body. He immediately went for an ankle pick and got it. Somewhere in the transition to the ground, he caught me in an arm-in guillotine which wasn’t quite in the right spot on my neck. I’m quite confident in my guillotine survival and at that point just wanted to chill for a bit while he wasted energy squeezing. He gave up on it after around 30s-1m after and I tried to sit up into dogfight. I got the underhook, but then he wrapped around that arm with a D’arce, a choke I’ve never been able to escape from, and finished me. We ended up talking after the match and he was super nice. Shoutout to you, Kiel!

Main Takeaways:

  • My stand up game sucks. I tried to go for some takedowns which all put me in a bad spot. Gotta pull guard from now on until I can make it to more Judo and wrestling classes.
  • I need to flow more and not force things. When I was on bottom, I kept trying to get triangles, most of which ended with him stacking me and passing.
  • My defense was really tested and held up pretty well. I got into a lot of bad positions because of how easy my guard is to pass and while I wasn’t, in most cases, able to escape immediately, I was able to hold off their attacks and almost always get the escape eventually.
  • My closed guard passing is really bad. Every time I want to stand up, they just double ankle picked and swept me. Then I would try for the knee behind butt break, but most of the time got my posture broken down too much to finish it.
  • BJJ competitions are super fun!

Linux Kernel Project Update: Touchpad is Working!

Big thanks to roadrunner2 for his work on getting functionality on his Macbook Pro (which shares alot of the same components as our computers). Apparently, there was a communication breakdown between the device and driver which is fixed by adding short delays between the setup messages. I’m not sure if this is the optimal way to solve it, but at least the trackpad has pretty close to full functionality now!

It makes me very happy to say that I am now typing this blog post from inside Linux on my Macbook.

What still doesn’t work is force touch (pressing harder on the trackpad) and right click via a two finger click (which I utilize alot). Most likely the force touch will be backburnered since it is high effort, low reward, and I can just add two finger click without having to do it from within the kernel itself.

I’ve put off work on the speakers for now since it is relatively unimportant, at least compared to getting resume working.

From what I’ve read and then confirmed for myself, the hard drive, which is nvme, is not shutting down properly. I tried reversing it, but haven’t been able to gleam too much from that process (I’m not experienced enough in reversing). Someone (I apologize for not remembering your name or where you said this) reversed it and was able to find custom op-codes that are manufacturer specific that are called right before OS X shuts down the hard drive.

My debugging of the problem is significantly hindered by the fact that every time I want to test anything, it results in me having to reboot. Thankfully, the ssd is very quick and arch has a small footprint.

Another possible part of the problem is the disabling of LPSS. From what I can tell from intel’s original LPSS patent, it is used to put the computer in a state where data can be recovered later. However, the patent is super old (1999) and an entirely different system or process is being used to suspend.

It is the intersection of these problems (improper nvme shutdown and disabled lpss side-effects) that makes fixing resume so finicky. I’m going to read as much as I can about LPSS and nvme as well as try once again to reverse the Mac driver.

Linux Kernel Project Update: Keyboard is working!

Project introduction here: http://charlieyou.me/linux0/

Max has figured out that if you disable the low power subsystem (LPSS) inside of the SPI driver (pxa2xx.c), then the applespi driver written by cb22 is able to do its job. In other words: the keyboard now works!

Well… mostly. Key rollover still does not work, so you can’t press two keys at the same time and have both be detected. Wakeup from keyboard also doesn’t work. The latter we’ll tackle along with sleep/hiberate issues. The former Max is trying to figure out now.

The immediate next step is to get the trackpad to work as well. Valid data is being read by the IRQ handler, so it should just be a matter of piping it to the correct place.

My focus is now on getting the internal speakers to work. Strangely enough, the headphone jack and internal mic work perfectly, it’s just the speakers that don’t output anything. There’s a bugzilla post for this that’s been a fairly helpful start: https://bugzilla.kernel.org/show_bug.cgi?id=110561. For an overview of the linux audio stack see this article: http://voices.canonical.com/david.henningsson/2011/12/08/audio-debugging-techniques/.

So far, I’ve played around with the patches mentioned in the bugzilla as well as hda jack retask to see if I could reroute to a different pin that is hopefully the speaker. No luck with that. Next I tried to just route the output to all unconnected pins, and that did get some sound from the speaker. Not the right sound and the kernel promptly panicked. But it’s something…

After this, the next things to tackle are:

  • Screen tearing
  • Bluetooth
  • Sleep/hibernate