mouthporn.net
@clinejj on Tumblr
Avatar

optimuscline

@clinejj / optimuscline.com

notes on software, politics, and generally just cool stuff
Avatar
reblogged
Avatar
ebaynyc

A prelude to the Weekly weekly

Howdy! 

I’m Paul Burt (@thatmightbepaul), I’m the Developer Evangelist here at eBay NYC. I’m writing to you today because we’ve recently been inspired by the great blogging of a fellow NYC company.

Hoodie puts out great weekly updates, and we thought, “What if we did the same?”

Starting Monday, we’ll publish a roundup of our favorite upcoming events. These will be the spots you’re likely to spot the eBay NYC and Friends of eBay crew. If you see one of us wearing the team colors, say Hi!

In the mean time, here’s a bit of what we’ve been busy with.

Scott Davis accepted to speak at NodeCamp.io

Scott Davis (@scttdavs) from our Homepage team, is headed back to camp soon. His talk on eBay NYC’s shift from Java to Node has been accepted at NodeCamp.io. If you haven’t heard about NodeCamp, or want to know more about Scott, mosey on over to their site:

GPU and CUDA Workshop Part 2: parallelism’s revenge 

Two of our software engineers, Jin (@jinrummie) and Michal, presented an introduction to GPU programming internally, a week ago. They’ll be following up their excellent intro to explore more advanced topics in the CUDA space.

Wishing you could attend? Jin will be giving the same presentation at the upcoming Grace Hopper Conf 2016.

Machine Learning Reading Group

Daniel Galron (@danavaid) is an applied researcher on machine learning, and leads an internal reading group for interesting papers in the space. For the next reading group he’ll be leading us into a dive on one of the foundational papers on applying neural networks to NLP. This is the paper that first described the word2vec model. 

The reading group is eBay NYC and Friends of eBay only, but if you’d like to read along you can find the paper online. Feel free to tweet questions to @ebaynyc or @danavaid.

Product Managers Book Club

Mary Titus leads our internal product managers book club. This go around we’re reading Inspired: How to Create Products Customers Love. The club rotates books every 5 weeks or so, and the next book to read is nominated by members. 

If you’d like to follow along, pick up a copy, and let us know what you think.

See You Monday

That’s all for now. The coming Monday we’ll share some of the local NYC events we love.

See you then!

Avatar
reblogged
Avatar
mapsbynik

Nobody lives here: The nearly 5 million Census Blocks with zero population

A Block is the smallest area unit used by the U.S. Census Bureau for tabulating statistics. As of the 2010 census, the United States consists of 11,078,300 Census Blocks. Of them, 4,871,270 blocks totaling 4.61 million square kilometers were reported to have no population living inside them. Despite having a population of more than 310 million people, 47 percent of the USA remains unoccupied.

Green shading indicates unoccupied Census Blocks. A single inhabitant is enough to omit a block from shading.

Update Jan 2015: Prints and canvas of the Nobody Live Here map are now available.

Update 2014.05.01: I’ve received a couple questions about Canada. Just to be clear, this map is of the United States only. It is based on 2010 data published by the U.S. Census Bureau, which for reasons I hope are apparent, does not include data on our friends in the Great White North. For a similar depiction of Canada, see this map whipped up by Michael Chung.

Map observations

The map tends to highlight two types of areas:

  • places where human habitation is physically restrictive or impossible, and
  • places where human habitation is prohibited by social or legal convention.

Water features such lakes, rivers, swamps and floodplains are revealed as places where it is hard for people to live. In addition, the mountains and deserts of the West, with their hostility to human survival, remain largely void of permanent population.

Of the places where settlement is prohibited, the most apparent are wilderness protection and recreational areas (such as national and state parks) and military bases. At the national and regional scales, these places appear as large green tracts surrounded by otherwise populated countryside.

At the local level, city and county parks emerge in contrast to their developed urban and suburban surroundings. At this scale, even major roads such as highways and interstates stretch like ribbons across the landscape.

Commercial and industrial areas are also likely to be green on this map. The local shopping mall, an office park, a warehouse district or a factory may have their own Census Blocks. But if people don’t live there, they will be considered “uninhabited”. So it should be noted that just because a block is unoccupied, that does not mean it is undeveloped.

Perhaps the two most notable anomalies on the map occur in Maine and the Dakotas. Northern Maine is conspicuously uninhabited. Despite being one of the earliest regions in North America to be settled by Europeans, the population there remains so low that large portions of the state’s interior have yet to be politically organized.

In the Dakotas, the border between North and South appears to be unexpectedly stark. Geographic phenomena typically do not respect artificial human boundaries. Throughout the rest of the map, state lines are often difficult to distinguish. But in the Dakotas, northern South Dakota is quite distinct from southern North Dakota. This is especially surprising considering that the county-level population density on both sides of the border is about the same at less than 10 people per square mile.

Update: On a more detailed examination of those two states, I’m convinced the contrast here is due to differences in the sizes of the blocks. North Dakota’s blocks are more consistently small (StDev of 3.3) while South Dakota’s are more varied in area (StDev of 9.28). West of the Missouri River, South Dakota’s blocks are substantially larger than those in ND, so a single inhabitant can appear to take up more space. Between the states, this provides a good lesson in how changing the size and shape of a geographic unit can alter perceptions of the landscape.

Finally, the differences between the eastern and western halves of the contiguous 48 states are particularly stark to me. In the east, with its larger population, unpopulated places are more likely to stand out on the map. In the west, the opposite is true. There, population centers stand out against the wilderness.

::

Ultimately, I made this map to show a different side of the United States. Human geographers spend so much time thinking about where people are. I thought I might bring some new insight by showing where they are not, adding contrast and context to the typical displays of the country’s population geography.

I’ve all but scratched the surface of insight available from examining this map. There’s a lot of data here. What trends and patterns do you see?

Errata

  • Due to a cartographic mishap, the Gulf of California was missing from the original version. Though it was quickly fixed, that version keeps popping up across the Internet. It displeases me I see it, yet I’m amused that people keep reposting it without noticing the error. The geography gods judge those people harshly.
  • Some islands may be missing on the hi-res edition if they were not a part of the waterbody data sets I used.

::

©mapsbynik 2014 Creative Commons Attribution-NonCommercial-ShareAlike Block geography and population data from U.S. Census Bureau Water body geography from National Hydrology Dataset and Natural Earth Made with Tilemill USGS National Atlas Equal Area Projection

Avatar
reblogged
Avatar
ebaynyc

Web Devs, Let’s Talk

In the NYC office, our mission is to connect safety-conscious guinea pig owners with blacksmiths. At least, that’s part of what happens when blacksmiths sell medieval rodent-sized armor on our site.

Also, wait, what– eBay has a New York office? Yep. And, we need developers to help the passionate (guinea pig owners, et al) find those passions. This post is our pitch. We’re great, you’re great; come work with us.

Let’s add a little more detail to the pitch.

Avatar
clinejj

Come work for me!

Avatar
Avatar
really-shit

Video Games vs. Real Life

A mash-up of video game characters and photographic scenes. As a kid I would become completely immersed in these crude pixel environments and they would seem very real. I thought it would be fun to try to express how gamers see these worlds. I spent many hours gaming with my siblings and friends when I was growing up and this aesthetic has really come to represent that time.

Source: really-shit
Avatar

2015+2016

2015 was an interesting year. Last year I talked about changes in my professional career and social friends, and this year continued that trend. When I think again about was this year my best ever, the answer is no, but there’s nothing wrong with that. I think I grew more this year than I have since college, which is pretty awesome. Much of my attention was again focused largely on work, as my team got involved with much more complex projects. I also started taking courses at Landmark, which was a big source of my personal development and brought me into a new community of pretty amazing people.

The beginning of this year was punctuated by a reorganization at eBay, which changed our team from working largely on the site homepage by ourselves to working to support the start page/screen on all platforms. I also went to San Jose in February for a management boot camp, where I got to meet a number of the managers at my level and went through some training to be better managers.

Later in April, my team started working in partnership with another team in San Jose and Portland, and I got to travel to Portland for a long period of time for the first time. The architecture in Portland is kind of funky and pretty interesting - I got some neat photos you can see here. I also went to Haystack Rock for the first time, which was super neat!

I also took a trip to Iceland with my friend Keyan in April. We saw the northern lights on the flight in, and spent a few days in Reykjavik doing some sight seeing in the town and a couple day trips to the country outside. Plus, lots of checking out the late-night party scene. It was an awesome trip. 

I had a quick few days back at work before heading off again in May to travel around Costa Rica with Kyle and Bonnie. It was another fantastic trip. We toured the northwest part of the country, hiking a dormant volcano, going on a zip line adventure, learning to surf, yoga, swimming in pools under natural waterfalls, and so many birds and animals. Learning to surf was probably the highlight of the trip, along with basically every sunrise and sunset.

The vacations came at a really great time. I had been getting frustrated with work and how difficult I felt that it was to make progress on some of the important political problems facing my team. While I was on vacation, I took stock of what the challenges really were, and realized that there are some very interesting leadership and organizational challenges to work through that would serve me well in my long term goal of become CTO or CEO of a company. This new outlook gave me a lot more energy and a much better attitude about what I was doing and it was a great perspective shift. Oh yeah, and my sister got engaged!

In June I started taking Landmark courses with the weekend long Forum, with the intention of working on my career (hoping to get a breakthrough on those interesting challenges) as well as my love life. While I didn’t get a major breakthrough that weekend, I did in my relationship with my mom and my friends. The tools and perspective that Landmark teaches provide a great framework for feeling more empowered and powerful, and the community I found there is amazing and provides great support in helping you be better and make a difference in the things that matter to you. Since June, I’ve consistently been taking their programs with my current one finishing next week. I’ve had further breakthroughs with my relationship to my job and the people I work with, with my dad (who I called after not talking in seven years), as well as my love life.

The last half of the year went by a lot quicker. I traveled a lot more for work, with several more trips to San Jose, another to Portland, and a quick one to Pittsburgh. I visited my friend Ashley in North Carolina, and took a day trip to Charleston, getting to states 45 and 46 that I’ve visited, and a trip home to Colorado over Thanksgiving. I went to an adult summer camp in upstate NY with WeWork. I saw some of my favorite bands play, going to Disclosure, CHVRCHES, Chromeo, and Vacationer shows. I also joined the Guggenheim’s Young Collectors Council, which has given some great opportunities to get more involved in the arts around the city. I got an interview with TalentBuddy about working with Node.JS at Ebay that brought some traffic (and led to this post), as well as being briefly featured on the Today Show promoting a friend’s app. And my mom visited NYC for the first time for Christmas!

Last year was interesting in that I was facing a lot of new challenges and sometimes struggling to keep up, whereas this year I felt my confidence growing throughout the year and am excited for the things to come this next year. I will also be traveling as much next year, between another trip to Sri Lanka with Daisy Office Yoga, a Europe adventure with my roommates, a wedding in Chicago, and visiting the last four states (AK, HI, MT, ND). I’m starting to hit that curve after you move to a new city where you feel more stabilized and start deepening your roots, and I can’t wait for that. Here we go 2016!

Resolutions from 2015

This is not going to be good.

Read more books than last year.

Nope. I read four books last year, and this year read one: The Martian. Great book, quick page turner, but didn’t come close to what I read last year.

Make progress on my game backlog (particularly Walking Dead, Last of Us, Alan Wake, Bioshock: Infinite, and the GTA4 Expansions).

Partial complete on this one. Destiny was my go-to game, and thanks to some help from Kyle I’ve managed to keep pace with the new expansions and my characters rolling pretty stacked.

I did play through Bioshock: Infinite, which was really amazing. The Bioshock series always have a twist, and the one in this was incredibly and gut-wrenching all at the same time. I didn’t see it coming, but if you haven’t played this definitely give it a chance. The gameplay is about the same as the other Bioshock games (which is to say good but nothing groundbreaking).

The other games I’ll probably carry through to next year. I’ve also downloaded the other Telltale games (Game of Thrones, the Wolf Among Us, and the Minecraft Story Mode) that I’m excited to play, as well as Life is Strange and some of the other indie breakouts this year.

Join a gym and develop a regular workout routine.

Another partial complete. I did join a gym, as a New York Sports Club opened up a few blocks from my apartment in March, and I did start going there regularly until all my travel in April/May. Unfortunately, this kicked me off my schedule and I never really got back on. I did start running more in preparation for the NYC 10K in October, but that was about it.

Complete my “to-do” list on Foursquare for NYC.

Not really close. I did make some progress, bringing my to-do’s from somewhere in the 100s to the 90s, and checked out some awesome new places. My favorites have generally been speakeasies, with Mayahuel, Nitecap, and Raines Law Room leading the pack. For food, Tuome and Joseph Leonard’s were great surprises.

Some Statistics

I earned 1,206,830 Nike Fuel (up from 982,953 last year and the most in a year ever) and hit my goal 204 times (up from 153 times in 2014). I ran 103.1 miles (down a bit from 110.5 in 2014), with an average pace of 8’04”/mi (same as last year). I did set a new PR for a 10K with 49′09, down a full 1′16″ from last year.

5 Most Viewed Posts

  1. eBay’s Definition of Done
  2. Cards Against Humanity Lab
  3. Happy Valentine’s from Chris Traeger
  4. Blending Lists of Lists
  5. 2014-2015

This blog got 731 visitors with 1,089 pageviews (down from 1,862 for 2014). I made 26 posts (down from 292 posts). I blogged a whole lot less this year, but did a better job marketing it.

Top 3 Top Gun Thursday Posts

  1. Kicking off TGT with the ultimate high five
  2. Speeding through round two of TGT
  3. Showcasing my favorite GIFs from TGT

The majority of my reblogs and likes are still TGT. I’m not upset about it.

Commit History

This is from our company GitHub. My contributions are down from 2,835 the year before, which is probably a good thing. I shouldn’t be coding as much as a manager. You can also clearly see the vacations I took in April/May, and the end of the year.

Music Stats

Disclosure moved up into the lead this year, with St Lucia still making a strong showing. CHVRCHES also moved up a lot, largely due to their amazing new album. And there’s more new artists this year (thanks Spotify!). In general though, I listed to a lot less music. I blame more meetings, less coding, and less listening at home.

Resolutions for 2016

Read more books than last year (so...at least two).

Finish some specific games (the list above and the Assassin’s Creed games).

Develop a regular workout routine and stick to it.

Visit the remaining four states I have not visited (AK, HI, MT, ND).

Here’s to 2016.

Avatar
Avatar
roachpatrol

things you will see on a road trip across america

-so much desert that you will get scared 

-seriously from california to new mexico is terrifying like it’s eight straight hours of pale red desert and the sky is so large that everything, even your car, even your hands, looks like a tenuously small and fragile diorama placed on an endless pale red table and left there to dissolve. 

-a gas station that for some reason has large dinosaurs made out of scrap metal. they are 1000% awesome. sometimes they move. take a million pictures.

-a fruit stand that sells the best fruit you have ever eaten. later you won’t quite remember which fruit. strawberries, maybe? peaches?

-small black birds, subtly different in every state. some have gold eyes and some are a little iridescent and some are black from beak to toes. the sparrows they compete with for crumbs look exactly the same wherever you go. 

-a completely empty rest stop. no one eats at the concrete tables. no one plays in the tiny strip of grass or gravel. you will find a small and beautiful stone. 

-a hawaii license plate, somewhere around ohio. i still don’t know how they get the cars across the ocean. i don’t know why anyone would leave hawaii for ohio. i don’t know why anyone lives in ohio. 

-an incredibly weird duck. you had no idea ducks could look so incredibly weird, and you wish you were still ignorant of how incredibly weird ducks can, apparently, look. 

-a small folksy roadside waystation that sells fudge and incredibly tacky statues of eagles and wolves and cowboys. if you like fudge, eat the fudge from here. 

-a lizard doing pushups. if you are particularly fortunate: many lizards doing pushups.

-approximately one gajillion starbucks shops. don’t bother counting them. it will make you angry. 

-a storm somewhere around oklahoma, if you’re lucky. the clouds tower up in fantastic fluffy castles miles and miles into the air and are painted pink and gold and purple and the sky turns a dozen impossible shades of blue and when the rain comes down over your car it sounds like the world is ending. 

-weird burrs will stick to your legs. you’ll flick them out of the car eighty or eight hundred miles from where their parent plant was grown, and not be sure whether you should wish the little hitchikers well or not. 

-a dog wearing sunglasses with his head hanging out of a car window. this will be the high point of the trip. 

-the world’s most depressing restaurant. you will know it when you wind up there and have to eat the terrible food, and listen to the terrible music, and look at all the listless waiters and want to tell them get in my car, for god’s sake get in, i’ll take you out of whatever crapsack little town this is that you can’t get out of on your own. but you won’t say that because it’s rude. maybe they have family here. maybe they even like it here.

-a painting of a sailboat in a motel located at least a hundred miles from any significant body of water. 

-several genuinely hilarious postcards. buy them.

-a cat that will not let you pet it. this will be the low point of the trip. 

-corn. so much corn you will get scared. who the fuck is going to eat all this corn? 

-a small stream in some small woods and the light will come down perfectly and the water will be beautiful and the grass will be beautiful and there will be flowers maybe or the leaves of the trees are starting to turn gold and there are birds chirping and it will be so perfect you will want to stand there and stay forever and live in this little magical painting off the side of the highway and be some kind of highway druid. but instead, you’ll get bored after a while, and get back in the car. 

Avatar

eBay’s Definition of Done

A while back, I was interviewed by TalentBuddy about how we use JavaScript at eBay. In it, I mentioned our software development checklist that must be completed before any code is considered dev complete.

Pilots started using checklists in the early days of aviation as it was found that many common problems and deaths could have been solved if a pilot had simply done some verification of basic things before taking off - Do I have enough fuel? Do my instruments work? Through the use of these checklists, air travel became an incredibly safe endeavor. The same ideas apply to software development. Nobody likes it when their code fails in production, or when we have to re-run an A/B test because we didn’t track the right data. A checklist helps ensure that this information is addressed before code is completed, which further decreases the technical debt that normally accumulates and allows teams to spend time innovating rather than fixing.

At eBay, we call this checklist our Definition of Done. It was implemented in the last year as part of a broader effort to place greater importance on engineering and quality with the intention of meeting those goals above.

eBay’s Definition of Done

  • The code is well-written and conforms to our coding standards; we do not feel any need to immediately refactor or rewrite it. Code is reviewed and checked in.
  • Automated Testing is completed and passed. Test coverage is >70%.
  • All P1/P2 bugs are closed and verified with automated tests.
  • The code meets architecture requirements as defined for the domain or project.
  • The code meets performance/scalability requirements.
  • The code meets security standards.
  • The code meets accessibility standards. 
  • The code supports internationalization to defined locales.
  • The code meets published CommerceOS standards.
  • User Experience has reviewed the feature and all P1/P2 issues are fixed and verified.
  • The code is instrumented for logging and monitoring to identify faults and key decisions (both service level and algorithmic outcomes). Alerts have been implemented to detect and warn about meaningful faults.
  • Usability testing is scheduled where necessary, and feedback incorporated into backlog.
  • The code has been appropriately documented (minimum: a Service Dependency Map, and any production monitors and alerts relevant to the feature) and documentation is checked in.
  • The code includes tracking support.

The majority of the items on this checklist are generally applicable to software development, however some may not apply depending on the size of the project or the specific requirements (this is even true within eBay). There is some language and terms that might be unfamiliar, so I’ve added a bit of explanation to each of the items below:

The code is well-written and conforms to our coding standards; we do not feel any need to immediately refactor or rewrite it. Code is reviewed and checked in.

There’s a reason this one is first. As a developer, you should be proud of the code you wrote and how it was implemented. At eBay, we have some internally defined coding standards (which I will be sharing later in the year), which is the case with most large companies. Standards make development, and especially maintenance, significantly easier and helps minimize the accumulation of technical debt. Also, by requiring code review, it ensures that any code written is approved by others. This is particularly important, as most software at eBay will get touched by several developers over its’ lifetime. Standards make it easy for other developers to read, understand, and maintain, and review ensures all code meets these standards.

Automated Testing is completed and passed. Test coverage is >70%.

Automated testing can be whatever makes sense for your organization. At eBay, we consider this a combination of unit testing, integration testing, and end-to-end testing. We track coverage metrics for all of these, with a company-wide baseline at 70%. There are a lot of tools and frameworks that help you measure this in any language, and I would encourage all developers to be writing unit tests at a minimum. It’s also important to note that coverage isn’t necessarily the perfect metric - it measures what code was executed during a test, but not whether the tests covered appropriate cases. However, within our Definition of Done, test code must also adhere, so bad or poorly written tests should be caught and addressed during code review.

All P1/P2 bugs are closed and verified with automated tests.

We categorize all bugs and features with a four level priority system, with P1 being a critical bug down to a P4 being one that relatively non-impacting bug (either by number of users affected or how key it is to the product). We generally draw the line at P2 bugs, meaning any open P1 or P2 bugs block a release going to production. When these are found, automated testing must be written to cover the specific case that caused the bug to help ensure this is part of any future regressions.

The code meets architecture requirements as defined for the domain or project.

Your team may not have architecture requirements written or specifically stated, but you should be ensuring the design of a component or system should be generally agreed upon (ideally before development is started, but at least on completion).

The code meets performance/scalability requirements.

There’s a host of requirements we have at eBay around how performant our applications need to be, and since any production application will easily handle hundreds of millions of requests daily it’s important that all code scales appropriately. Often this is influenced by the architecture requirements, but it must be followed through in implementation. Further, developer should be asking themselves questions like these at every stage: Is parallelization of tasks used where possible? Are you lazy-loading images on the front-end? Did you request enough database capacity to handle the projected number of requests? Your specific application may not have the same requirements as what we build at eBay, but it does have requirements. If you aren’t defining these before development, you should start.

The code meets security standards.

We have internally published security standards to ensure applications don’t leak user info, aren’t vulnerable to well-known attacks, and similar common security concerns. There’s no guarantee of 100% secure software, but you should be considering this as you develop.

The code meets accessibility standards.

eBay users are incredibly diverse, and it’s important that we ensure that everyone can easily shop on our site. While accessibility isn’t applicable to all development (for example backend batch jobs that just aggregate data), this is important enough that we want all developers to think about it. WCAG has done a great job of defining standards for web applications to conform to, and we use that as a baseline for all our software.

The code supports internationalization to defined locales.

eBay is a global product, with users in every country. While we don’t offer a fully internationalized experience, we do translate the site for over 30 countries and offer local currency display for many more. We ensure that at a minimum static text, currency display, and date/time/number formatting is localized where required.

The code meets published CommerceOS standards.

CommerceOS is an internal standard we have that essentially defines how we build applications and services at eBay, covering everything from authorization to internationalization to REST service naming to common object definitions. This one isn’t specifically applicable outside of eBay, but developers should be checking that their applications follow broader design standards such as returning meaningful status codes for a REST service, etc.

User Experience has reviewed the feature and all P1/P2 issues are fixed and verified.

This relates to the earlier P1/P2 bug scenario, but instead focuses on the user experience. You could design a feature that technically doesn’t have any bugs, but maybe the user experience it creates isn’t desirable. For example, it happens occasionally where a mockup in Photoshop just doesn’t feel the same after being created in the web and requires further refinement.

The code is instrumented for logging and monitoring to identify faults and key decisions (both service level and algorithmic outcomes). Alerts have been implemented to detect and warn about meaningful faults.

This is huge, and I mentioned it in the interview with TalentBuddy. We’ve spent many years developing an insanely detailed monitoring and logging system at eBay, and there’s a significant amount of automation around error detection and fault tolerance that all developers at eBay should be leveraging. What you consider to be a fault worth logging or a key decision is dependent on the application, but making these available will help live debugging and root cause analysis after a failure much easier.

Usability testing is scheduled where necessary, and feedback incorporated into backlog.

Usability testing is important to get qualitative feedback on your product, and should be used in addition to the typically quantitive feedback A/B testing provides. A/B testing will tell you how many users performed an action, but it can be very hard to get at why they performed it. Usability testing can uncover that, and should be considered a priority for any application that has users.

The code has been appropriately documented (minimum: a Service Dependency Map, and any production monitors and alerts relevant to the feature) and documentation is checked in.

Going back to the first item on the checklist - software tends to live much longer than we expect it to when first writing it. A key part of ensuring future maintainers can smartly make changes when needed is having good documentation and knowing where to look if something goes wrong. Applications get particularly complex at eBay - the homepage itself depends on over 18 services, which in turn might depend on 18 more, and so on. Without good documentation, it can be incredibly difficult to track down which service might be responsible for an error happening in your application.

The code includes tracking support.

At eBay, we define tracking to be any information sent about how a product is being used. This is different than logging or monitoring in that logging and monitoring is about the health of your application, where we define tracking to be more about the “what” of your application. For example, tracking impressions and clicks so they can later be compared to answer the question of how many users clicked through to view an item after we launched our new relevancy algorithm in the feed. Ensuring you have the appropriate information being tracked to answer these types of questions saves work later on (and helps you iterate faster).

Does working with us sound interesting? Check out our open positions at http://www.ebaynyc.com/jobs.

You are using an unsupported browser and things might not work as intended. Please make sure you're using the latest version of Chrome, Firefox, Safari, or Edge.
mouthporn.net