#Tim Taylor
- Oakland, CA, United States
- tim@tool-man.org
- http://tool-man.org/
☆ Ship it! ☆
The trajectory of my software development career can be distilled to this phrase: Ship it.
Undisciplined coding relies on luck. Blind adherence to methodology distracts from that which matters: delivering to end-users. I've learned lessons at both ends of that spectrum.
I love to work for companies that ship quality software that matters to end-users. Good companies do this often; the best do it continuously. I help make this happen.
Ship it! is my movie poster tagline. See Background below for more information.
Hugs, Tim
Version: 1.9.3
Link: <https://stackoverflow.com/cv/toolbear>; rel="canonical"
Technical Skills
Likes: lean-development, user-experience, open-source, rest, node.js, ios, microservices, continuous-deployment, shipping
Dislikes: software-waste, boilerplate, legacy-code
##Experience
Programming Bear, Earth, January 1983 – Current
all-the-things
Coding – with varying degrees of skill – since I was a wee cub.
Senior Software Engineer, Netflix, April 2016 – Current
java, microservices, high-availability, amazon-web-services, open-source
Stay tuned…
Special Agent, Test Double, January 2015 – September 2015
javascript, node.js, tdd, objective-c, rest, angularjs, travis-ci
Highlight: putting my polyglot nature to work
- Mix of remote pairing and solo coding for various clients developing everything from REST backends in node; to rich browser clients in angular; to native iOS apps in objective-c and core frameworks
- Coaching and mentoring on practices including designing modular, well factored, testable code; continuous integration / continuous delivery; team workflow and recommended git/DVCS habits
- Assist with work breakdown with an emphasis on minimalism and delivering real value early without getting lost in task management minutiae
Senior Application Developer, Detroit Labs, July 2011 – May 2013
ruby, rest, github, rspec, git, boxen, ios, heroku, node.js, continuous-integration, objective-c, kiwi, cocoapods
Highlight: learned Objective-C and iOS development; shipped my first iOS App
I joined Detroit Labs, a mobile dev startup, when it was less than a year old. My first project was a webapp implemented in Rails. I followed that up with a Sinatra REST service before making the leap to iOS development.
I learned Objective-C; Kiwi, an obj-c BDD framework; married idiomatic iOS development with dependency injection; and became a CocoaPods early adopter. Three apps I worked on were released to the App Store.
My mastery of Git and GitHub increased. The resident git expert, I established and taught git workflows to coworkers new to distributed VCS systems.
I deployed and configured Jenkins to our Mac Mini for iOS continuous integration. Provisioning the CI box was automated with GitHub's Boxen and by extension, Puppet. To aid bootstrapping a new or existing iOS project I wrote a CLI utility as a Ruby gem.
Along the way I released an internal tool with a Node.js back-end and Backbone.js fat-client.
Agile Developer, Cengage Learning, August 2010 – July 2011
git, eclipse, emacs, rest, jersey, mockito, javascript, jasmine-bdd, guice, jenkins, spring-framework, kanban
Highlight: pragmatic approach to agile wins over a coworker
I joined Cengage in the midst of their Michigan office undergoing an agile transformation. Cengage shipped webapp based products for the library and K-12 markets. I started with a team whose product was already in production; I participated in four subsequent releases. I learned how to write painless test doubles in Java using Mockito, which hands down beat previous frameworks I had used. I was exposed to Jasmine for JavaScript BDD and eventually became one of the resident experts. The project was run using a hybrid scrum/kanban system. This was my first exposure to pull-based agile, a methodology I continue to pursue, and helped shape my view on shipping software.
I had an excellent pairing/mentoring experience on a subsequent project for a predictive search query REST service. I was paired with a developer who resisted Cengage's agile process adoption, but was an expert on predictive search. By taking a less hard-line stance, explaining my position from first-principles, and having a willingness to compromise, we delivered a working service with more test coverage than it would have had otherwise, and I convinced my coworker of the virtues of unit testing.
I used two dependency injection frameworks for the JVM, Spring and Guice. Guice was my choice for the predictive search service after seeking a plain Java, sans-XML framework to compare and contrast with Spring.
Senior Engineer, ePrize, August 2007 – August 2010
perl, vim, mercurial, java, eclipse, rest, continuous-integration, google-analytics
A member of the software development team within ePrize building and supporting the custom software infrastructure behind ePrize technology.
Highlights include:
- championing unit testing & continuous integration
- developing back-end frameworks and services used by ePrize programmers focussed on business client delivery
- designing and implementing RESTful web services
- managing a heterogenous build (Perl and Java)
- integrating Google Analytics into core product
- implementing custom data warehousing, reporting, and ETLs
Team Lead, Large Software Development, ePrize, September 2005 – August 2007
perl, vim, tdd, bugzilla, agile-development
Team lead for a talented group of developer tasked with tackling the longer term, larger projects at ePrize that follow a more typical software development lifecycle. Large projects at ePrize still meant client facing, and thus were fast and constantly changing. Agitated for Agile development practices. Some practices stuck, others not so much. Most lasting imprints were incremental planning and development, continuous integration, and to a lesser degree unit testing.
Software Developer, i33 Communications, September 2004 – June 2005
java, tomcat, jetty, eclipse, tdd, vim, ant, continuous-integration, extreme-programming
Mentor and Technical Project Manager for Software Development Team responsible for Delphi.com content management tool and various Intranet tools for Delphi Automotive.
Working for i33 also represented somewhat of a return to sigma6, as i33 was the private company kicked out by CommerceOne's implosion (s6 -> AppNet -> C1 -> i33). Many of the same people from s6 worked at i33 and the Detroit office's two main clients dated back to s6 days.
Software Developer (Sub-contractor), Menlo Innovations, October 2001 – August 2004
agile-development, extreme-programming, java, eclipse
Sub-contractor for startup Menlo Innovations doing Extreme Programming software development, trainning, and process coaching. Variety of clients and projects, large and small. Primarily web applications written in Java.
After a 15 month sabbatical, I was one of the first consultants to begin working with Menlo. My first project was working on the Store Locator for Domino's Pizza website. Other clients: Pfizer, i33 Communications, UofM Health System.
Programmer, Appnet, Inc, March 1999 – September 2000
vim, java, javac, make, html, css, javascript
Java developer just before the Web bubble burst. I made some mad loot from a stock market fluke and left AppNet when they were purchased by CommerceOne in September.
Programmer, sigma6 Interactive Media, February 1998 – March 1999
vim, java, javac, make, html, css, javascript, coldfusion
Java Developer during the Web boom. sigma6 was purchased by Appnet in March.
Developer, Internet Operations Center, August 1997 – February 1998
c++, code-generation, html, javascript
We'll call this my first "real" programming job doing web application development in C++ (yes, C++, with Saphire/Web). Shortly after starting, I was thrown to work at a client site by myself. Isolated from my peers who I could have learned the most from and working on a project that was way underscoped I bailed after several months when a head hunter got me hooked up with sigma6.
##Education
Computer Science, Illinois Institute of Technology, 1993 – 1997
c++, perl, html, cgi
- Learned unix, vi, & shell scripting as an intern and co-op student @ Motorola and campus Help Desk
- no degree; completed entire Computer Science undergrad curricula, sans Graphics Programming course
- taught myself HTML & cgi at the dawn of the Web
##Projects & Interests
Stack Overflow, http://stackoverflow.com/users/23987, October 2008 - September 2015
Written 11 answers. Active in git.
GitHub - svm, https://github.com/toolbear/svm, May 2011 - August 2014
Scala Version Manager - Simple bash script to manage multiple active scala versions
GitHub - flow, https://github.com/toolbear/flow, February 2011 - February 2012
Diminish distracting applications to achieve flow, restoring them when done.
GitHub - boxed-wine, https://github.com/toolbear/boxed-wine, April 2014 - March 2015
Manage your Emacs config with Boxen & Cask
Tools
First Computer: Texas Instruments, TI-99/4A
Favorite Editor: Emacs or Vim
Background
Ship it is the Software Developer's Prime Directive.
I love to work for companies that ship quality software that matters to end-users. Good companies do this often; the best do it continuously. Since your software matters, it should:
- be humane to end-users; be understandable and pleasant to use
- work correctly the first and n-th time it is delivered
- have the most valuable features shipped soonest with the least valuable shipped last or not at all
This is what I do. I am passionate and educated about UX. I am passionate and deeply experienced at test-driven development. I have a love affair with agile.
The specifics of how always change. Stagnation is death; learning, rebirth. A reformed Java proselytizer, today I'm distinctly polyglot. My hard Extreme Programming exterior was replaced with a cuddly, pragmatic agile coat. Being opinionated matters; questioning my assumptions and seeking first principles matters more. I measure change against the prime directive: how do I ship software better today than I did yesterday?
I've steeped long enough in the agile camp to reach a certain degree of enlightenment. I took the long way round, by way of the lean software movement, to arrive at an emphasis on delivering the goods all the way. I am equally comfortable on high-performing agile teams; with teams adopting agile; or on teams with minimal, albeit sane, practices. My "everyday carry" contains unit testing, refactoring, git, and continuous deployment when it fits in the bag.
I'm distinctly polyglot. While I once identified as a Java Developer I was producing as much JavaScript/SQL/HTML/CSS/Makefile/etc. as Java code. Today I value Java's type checking, but dislike its ceremony. I love the beauty I can attain in Ruby; I find good company in a culture with near universal adoption of unit testing. JavaScript's ubiquity somewhat compensates for its crufty syntax; CoffeeScript approaches Ruby's elegance. OO is my default problem solving mode, but I'm constantly expanding my FP repertoire. I'm productive with IDEs, having used Eclipse and Xcode, but the command line is where my heart is. Gary Bernhardt has it right when he says, "Unix is my integrated development environment."
Full Stack went from hot to overplayed in a fortnight. Let's just say that I've been working both sides of the client/server divide, and everything in between, since "stack" commonly meant a LIFO data structure. My first rodeo was an HTML 1.0 client with a CGI back-end. Today I build fat clients (JavaScript webapps or native mobile apps) connected to skinny REST backends and microservices. I still do all the stuff in between.
I have enough self-taught usability and UX knowledge to be an effective critic. My cures are sometimes worse than the disease; fortunately I collaborate well with designers and UX specialists.
I love hugging; and semicolons. I love hugging more than semicolons.