1) All features&#x2F;algorithms were ported, and we only added new functionality that never existed in the old Python code base. A few of the features that got added include: dispatching builds, getting live logs, re-encrypt keys, deploy encrypted artifacts, fix many bugs, support running multiple agents on a single computer, etc. I should also mention that we previously had two separate downloads: a CLI used for uploading releases, and the agent used for dispatching deployments. The functionality of both of these code bases where merged into our new Lua based &quot;client&quot; so customers only have to install a single binary that is less than 10MB (the binary size depends on your platform).<p>2) Deployments with the new agent were noticeably faster, (like 1 second deployments that used to take 20+ seconds). However, this speed up was largely due to the Python codes design which had a &quot;continuation&quot; loop which was polling based, but the Lua code used coroutines and simply continued the threads when the steps were complete.<p>Overall, I think the choice to use Lua (or more specifically luvi) was a great decision. Note that it did take a few iterations in order to come up with the optimal way of using Lua + libuv. Originally I was taking the Node.JS approach of using callbacks, but that approach has two problems:<p>[a] It is difficult to properly implement &quot;back pressure&quot; so that all queues between producer and consumer are bounded.<p>[b] It is difficult to handle errors properly.<p>Lua coroutines allowed me to write a simple &quot;green thread&quot; library that encapsulated these challenges.