-
Notifications
You must be signed in to change notification settings - Fork 0
/
about.html
executable file
·228 lines (203 loc) · 13.5 KB
/
about.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
---
layout: layout
title: "About | Eric Farkas"
---
<h2>About</h2>
<div class="row">
<div class="span12">
<p>
I am currently an engineering leader in the Adobe Cloud Platforms and Collaboration team at <a href="https://adobe.com">Adobe</a>.
</p>
<p>
In past roles, I've gained experience as an IC and engineering manager working in payment processing,
social networking, finance, e-commerce, marketing, and SaaS contexts utilizing a
variety of programming languages, frameworks, and stacks.
</p>
<p>
I have extensive experience using Ruby on Rails, React, Javascript, and
Elasticsearch to build large-scale web applications, with an emphasis on
well-tested, thoughtfully-designed code.
</p>
<p>
As an engineering leader, I strive to build teams based on trust,
clear communication, empathy, shared technical approaches, personal
autonomy, and continual improvement.
</p>
</div>
</div>
<br/>
<div class="row">
<div class="span12">
<h2>Some Things I've Shipped 🚢</h2>
<br/>
<div class="row">
<div class="span12">
<h3><a href="https://github.com/speric/kindle-highlights">kindle-highlights</a></h3>
<p>
I love reading, and collecting quotes. The highlighting feature on the Kindle is nice,
but there's no API to get at your own highlights, so I built a Ruby gem to scrape
Amazon's Kindle site for my highlights.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/relationship-invoicing/">Chargify Relationship Invoicing</a></h3>
<p>
In order to meet the demands of our customers for a more flexible approach to
billing and invoice presentment, Chargify completely redesigned the way we handle
subscription billing. This included adding the ability to define customer hierarchies,
and allowing a customer to pay for a subscription that did not belong to them. This
feature is essentially like replacing engine of a car while it was running. My role in
this effort, as the Core Billing team lead, is to my team member are set up for success.
This includes interfacing with our product and customer success managers, as well as
the CTO, to work through the design and implementation of individual features, and the
architecture as a whole.
</p>
<p>
Additionally, as an Individual Contributor, I am involved in the development of various
parts of this re-architecture, using Rails, React, and Elasticsearch.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/rapid-offer-builder-release/">Chargify Rapid Offer Builder</a></h3>
<p>
The Rapid Offer Builder allows Chargify merchants to preconfigure an Offer, which is made up of a product,
any component combination on any of their price points, and coupons. Merchants can then configure their
Public Signup Pages to use these Offers, allowing easy signup without burdening customers with choosing
components and adding coupons. Additionally, Offers greatly simplify creating a Subscription via the
Chargify API, since API users need only send an Offer's ID over the wire, instead of various
product/coupon/component attributes. I contributed across the whole project, while focusing mainly on the changes
needed to create Subscriptions from an Offer alone, and the changes needed for our Public Signup Pages to work with Offers.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/subscriber-insights-product-filters/">Chargify Filtered Subscriber Analytics</a></h3>
<p>
The first iteration of the dataset that drove Chargify's Subscriber Analytics did not give uers the ability to filter by products.
As such, a user could only see how many subscribers churned across all their products, but within an arbitrary subset of
products. Additionally, there was no way to see how many existing subscribers switched between products. Our efforts
centered around introducing a new dataset, powered by Elasticsearch, that would yield such insights. In addition to playing
the team lead role, I worked extensively on the data model and the back-end work necessary derive the data we needed from application events. We joked that
we spent 2.5 months working on a dropdown, but it took a lot of work to build the dataset we needed to make the product filtering dropdown a reality.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/stacked-promotions/">Chargify Multiple Coupons</a></h3>
<p>
Previously, a Chargify subscription could only have one "active" coupon. This limited our merchants' ability to customize their product offerings.
With the multi-coupon feature, merchants can "stack" multiple coupons on a subscription. A coupon can discount either "full-price", or "compound" with other
coupons. In addition to leading the project, my work on this feature was mainly in the back-end: reworking the data model and coupon discount calculators. Like
the "component price-point" work, I also spent time cleaning up code that no longer made sense given the new data model relationships, and ensuring backwards
compatibility with the API.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/pricing-tools-for-complex-subscription-pricing-strategies/">Chargify Component Price Points</a></h3>
<p>
Previously, components (think subscription "add-ons") could only have one set of prices. With component price points, merchants can have multiple sets of prices for the same component. For example, they can have an "MSRP" set of prices for Widget, and a "Wholesale" set of prices for Widget. All revenue, for both of Widget's "price points", would be reported under the Widget component. This gives merchants more pricing options with less overhead, since they don't need to create a different component for what is essentially the same service, just to achieve pricing flexibility. In addition to leading the project, my work on this feature was mainly in the back-end: reworking the data model and component cost calculators, cleaning up code that no longer made sense given the new data model relationships, and ensuring backwards compatibility with the API. I did a little bit of the React front-end as well.
Here's a nice write-up at TechCrunch about the feature: <a href="http://tcrn.ch/2GFI34w">http://tcrn.ch/2GFI34w</a>.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/revenue-retention-analytics">Chargify Revenue Retention Analytics</a></h3>
<p>
Gives merhcants insight into the performance and efficiency of dunning strategy. We hooked into the dunning lifecycle to generate data, which was then persisted into Elasticsearch. When viewing revenue retention analytics, that data is read back out by Rails
and turned into props for the ReactJS front-end. I worked mostly on the Rails and Elasticsearch pieces of this feature, with a small bit of React.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/mrr-analytics/">Chargify MRR Analytics</a></h3>
<p>
Gives merhcants insight into their MRR (monthly recurring revenue). We hooked into relevant events in Chargify to generate
MRR data, which is then persisted into Elasticsearch. When viewing MRR analytics, that MRR data is read back out by Rails
and turned into props for the ReactJS front-end. I worked on the entire "stack" for this project: Rails, Elasticsearch, and React.
</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/configuring-multiple-webhook-endpoints/">Chargify Multiple Webhook Endpoint Configurations</a></h3>
<p>Allows merchants to configure the webhook events each endpoint receives, individually. The previous implementation had one list of subscribed webhook events, and each webhook received the same events. My first production ReactJS code.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://chargify.com/blog/shopify-orders/">Chargify Shopify Integration v2</a></h3>
<p>Enhanced Chargify's existing Shopify integration by adding the ability for Chargify to automatically create new Shopify orders for merchants whenever a new customer signed up to a plan, or their subscription renewed. This was accomplished with a combination of Chargify's own <a href="https://docs.chargify.com/webhooks"/>webhooks</a> and Shopify's Orders API. The integration is a separate app that, when enabled for a merchant, would receive webhooks whenever a Chargify statement was settled for their site, and then enqueue them for processing. Once processed, the webhook data would be transformed into the body of a proper Shopify Order, and created via the API.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/notifications-dashboard/">Chargify Notifications Dashboard</a></h3>
<p>An internal API and external interface that allows Chargify admins to send notifications to merchants with various levels of granularity (e.g. "send this message to all admins of Acme Online") or ("send this message to the owner of every site in the Chargify database"). Useful for communicating things like problems with subscription processing, new features, or upcoming API changes.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/editable-custom-fields/">Chargify Editable Custom Fields</a></h3>
<p>Gave merchants a UI for managing metadata for a given subscription. A lot of Javascript, which I enjoyed writing.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.chargify.com/blog/new-sales-reports-early-access/">Chargify Sales Report</a></h3>
<p>A dashboard designed to show the sales volume for merchant's products and components over time. This was my first time working with Elasticsearch in a non-trivial context.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3>Chargify Gateways</h3>
<p>Added support for the Cybersource and Chase Paymentech gateways. This involves working with ActiveMerchant.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://talentsoup.com">TalentSoup</a></h3>
<p>Sole developer for TalentSoup, a marketplace connecting talent (actors, actresses, models) with producers of advertising imagery. Built using Rails (from 2.3 to 3.2), MySQL, Apache + Phusion Passenger. This was the first big app I built with Rails. I learned how to manage a growing codebase, implement subscription billing (using Chargify of course), use S3 for photo hosting, and set up Graphite + statsd for analytics. In addition, I was responsible for all server and database administration.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://www.getcommissary.com">Creative Commissary</a></h3>
<p>Built for TalentSoup. A project management app for photo producers. My first attempt at a multi-tenant architecture (ala Basecamp). Similar stack to TalentSoup (Rails 3.2, MySQL, etc.) but running on nginx instead of Apache.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="https://bark.us">Bark</a></h3>
<p>Worked remotely as a consultant helping to build out Bark's MVP. My main areas of focus were implementing the subscription (Stripe) and referral pieces. I also implemented a few different providers using the <a href="https://github.com/omniauth/omniauth">OmniAuth</a> library.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3>Sensus Divinitatis News</h3>
<p>Essentially a Hacker News clone for the Christian community to discuss trends in theology, apologetics, and church planting. Built with Rails 3.2. The fun parts about this app were implementing a time-based ranking algorithm, and writing code that "posted back" to blogs that were submitted to SD News.</p>
</div>
</div>
<div class="row">
<div class="span12">
<h3>Sensus Divinitatis Publishing</h3>
<p>A publishing company in the Scottish Calvinist tradition. We published <i><a href="http://www.amazon.com/The-Kingdom-Has-Drawn-Near/dp/0578020475">The Kingdom Has Drawn Near: Studies In The Gospel Jesus Preached</a></i> and are working on another volume.
</div>
</div>
<div class="row">
<div class="span12">
<h3><a href="http://rivendellcraftbrewery.com">Rivendell Craft Brewery</a></h3>
<p>The love of craft beer taken a little too far. Homebrewing is a fun hobby, and has certainly enhanced my enjoyment of beer.</p>
</div>
</div>
</div>
</div>