I left Sparkart to join Amazon in early 2004. I joined the Supplier Information Services (SIS) team which was part of Supply Chain Optimization Systems (SCOS). Later on, I joined the newly reformed Corporate Accounts team helping expand Amazon’s B2B business.
Supplier Information Services
On the SIS team I was responsible for maintaining Vendor Master which was the internal repository with information about all of the vendors Amazon used. Vendor Master was built with Java and CORBA. This was my first production use of Java. I remember the code being structured very cleanly and easy to follow.
The main problem with Vendor Master was the usage of CORBA. Vendor Master required frequent tweaks to the API (I think maybe there were enums or something) which did not play well with CORBA. Each tweak required me to release a new version of the service which lead to almost always running multiple versions of the service. Retiring an old version meant tracking down all of the internal clients of the service and convincing them to upgrade.
I also built the Vendor Lead Time (VLT) service which replaced a bunch of Berkeley Database files with a C++ service backed by an Oracle Database which implemented the new internal web services standard (a variant of SOAP) as part of the shift to a Services Oriented Architecture (SOA).
Bulk Buying Tools
At one point I had answered an internal request from the Corporate Accounts team asking for someone to build a tool that would help libraries be able to take a list of ISBNs and easily lookup availability/pricing and then be able to add all of the books to an Amazon cart for purchase. I took this on as an after hours project and spent my evenings and weekends building a PHP website leveraging the Amazon E-Commerce Service. The site would:
- Take a list of ISBNs/ASINs
- Query the Amazon E-Commerce Service to lookup availability and pricing
- Show the results on a page that would let you select which products you wanted to purchase
- Populate an Amazon Shopping Carts via the Amazon E-Commerce Service which would allow you to purchase the books
The person who put out the request was really excited by what I built and told me to go host it somewhere. So I registered a domain for it (bulkbuyingtools.com) and threw it up on my home FreeBSD router which was connected to the Highlands Fiber Network. The tool was promoted by the Corporate Accounts business team and got a decent amount of usage. I felt really good about building something useful.
Overtime time more features were added to the tool including:
- Approval Slips - You could request a monthly list of newly published books which would be purchased. Here is an Amazon page describing the feature: Approval Slips
- Power Search - Allowed you to perform a search using Amazon’s Power Search syntax
- UPC Search - Lookup items by UPC instead of ISBN/ASIN.
- Saved Lists - You could save a list of products to share or hand off for approval
At the time the Corporate Accounts team did not have any development resources. At some point there was previously a development team but it had been disbanded. So I was kind of acting as an unofficial development resource. Eventually there was a full development team formed and I switched from SIS over to the newly reformed Corporate Accounts development team.
Corporate Accounts
My major accomplishment on the Corporate Accounts team was helping build out a complete E-commerce platform that integrated with third party purchasing systems using the cXML PunchOut standard. This made it easier for corporate customers to order items from Amazon using their existing purchasing systems and processes.
I also built out a Java SOAP service used by Amazon’s corporate credit partner to setup and maintain lines of credit that could be used for purchases on the normal Amazon website.
Ruby on Rails
David Heinemeier Hansson gave a tech talk at Amazon that I attended which presented Ruby on Rails and how it was able to eliminate lots of boilerplate and express your business logic in a nice and concise syntax using Ruby. Since I was mostly writing boilerplate heavy Java at the time the talk really resonated with me.
After that talk I convinced the team that we should build our next service using Ruby on Rails and that’s exactly what we did!
2005 PCI/DSS Audit Panic
Right before Christmas in December of 2005 in the middle of a PCI/DSS audit there was a legacy C++ application discovered that was sending unencrypted credit card information over the internal network. The application was related to corporate accounts customers on Amazon so it was technically owned by the Corporate Account team. However, nobody on the team was familiar with the application since it was written long before the team was formed.
I volunteered to work over the holiday break to get the application updated so that didn’t risk failing the PCI/DSS audit. I spent two weeks figuring out what the application was doing, what needed to be updated, making the update, testing the update and deploying the update to production.
Moving On
After some time on the Corporate Accounts team it felt like things were moving really slow and I was getting bored. At that time I was also the most senior developer on the team which was a little frustrating because I had nobody more senior to learn from. A friend had recently joined a startup in Bellevue called SecondSpace that employed a lot of highly experienced ex-Microsoft developers. I interviewed and was offered a job. I was a little hesitant since it was a Microsoft Shop (C#, ASP.net, SQL Server) and most of my experience was coming from Linux and Open Source. However, I was eager to learn from more experienced developers so I made the leap.