Posts

Showing posts with the label software

Uber's Michelangelo vs. Netflix's Metaflow

  Uber's Michelangelo vs. Netflix's Metaflow Michelangelo Pain point Without michelangelo, each team at uber that uses ML (that’s all of them - every interaction with the ride or eats app involves ML) would need to build their own data pipelines, feature stores, training clusters, model storage, etc.  It would take each team copious amounts of time to maintain and improve their systems, and common patterns/best practices would be hard to learn.  In addition, the highest priority use cases (business critical, e.g. rider/driver matching) would themselves need to ensure they have enough compute/storage/engineering resources to operate (outages, scale peaks, etc.), which would results in organizational complexity and constant prioritization battles between managers/directors/etc. Solution Michelangelo provides a single platform that makes the most common and most business critical ML use cases simple and intuitive for builders to use, while still allowing self-serve extensibi...

Architectural Characteristics - Transcending Requirements

Image
Building a system means meeting a set of requirements dictated by the customer.  But the customer isn't always going to translate what they want into engineering terms.  Even if you say please, they might not even know how.  If they ask for an online ordering system, they probably won't specify that it needs to be available 24/7 and auditable for tax purposes.  Yet these aspects could mean the difference between project success and failure.  Those unsaid aspects are called anything from 'nonfunctional requirements' to 'Architectural Characteristics'. In their book 'Fundamentals of Software Architecture', Ford and Richards define Architectural Characteristics to have 3 criteria: Specifies a nondomain design consideration Let's dive into these bullets to better understand them. Aspects of Architectural Characteristics Specifies a nondomain design consideration If you're building an ordering system, then order numbers, customers, items and prices ar...

Consensus: The Hard Kind

Image
You're on a team, undoubtedly.  You have been tasked with solving a customer problem and you have a design ready and waiting for review.  One team member reviewed an early version and asked for some tweaks, but after an iteration they agreed it was the optimal path forward.  You open it up to a wider audience for further review.  But then another team member pipes up... "This design doesn't work - it's just not possible with our current setup" Well, damn!  What do you want me to do?  Do I need to cycle through every team member and get them to give their feedback, iterate and incorporate it and then present it to everyone?  Even if I do that, by the time I get around the group, someone will disagree with the design again! Calm down, breathe - this is what it feels like to learn.  And what you've just experienced is what I like to call the 'Hard' version of Consensus. Every team is different in how they deal with this consensus problem, but if the ...

Mentoring a Software Engineer

Image
Whether it's about raising a small child or directing a full grown engineer towards her next promotion, mentoring requires a great deal of patience, honesty and self-awareness.  One wrong step and you could trigger a shame spiral.  Or just as bad, you could push your mentee to leave the team for a place with better career and/or learning opportunities.  There are clear rules of engagement to follow, but once you've mastered those, doing it right becomes an art more than a science, so bring your creative energies in order to drive excellence. A common next step after becoming a competent contributor on a software team is to start helping others onboard.  When a new teammate joins, having a mentor can accelerate progress by showing them the next steps in their career path rather than letting them hack it out on their own. But being successful as a mentor can mean many things - the KPIs for mentoring are not as clear as technical projects.  You need to have the tru...

Grow Your Career, Be A Senior Engineer

Image
My personal experience with navigating a career in software engineering has been dotted by fits and starts.  9 years into my professional life I can look back and see what worked, what didn't, and why.  I want to share that knowledge so other young engineers can do more with their first 9 years than I did.  Plus it's just fun to reminisce and will help me visualize the next steps in my career. To be clear, the north star goal in my career is and has always been to learn and grow towards more positive impact on those I serve.  If you have the same or a similar goal, this article will be useful. I wrote up a simple formula which I think can help any aspiring engineers out there.  It can be used as a template for a career plan.  When you're thinking about how to get to the next level, make sure you're putting equal emphasis on all these categories.   1.) ACTION from you, despite imperfect information 2.) COWORKERS whom you respect 3.) MENTOR(s) inves...

My experience with Udacity

Last week I finished a free online course from Udacity.com (google it if you're unfamiliar - it's frickin' bomb!)  So I thought I'd write a post about my experience. SO good.  I learned python, google app engine and how to create my own website....though this time I'll retain it a little longer.  The lectures are given in video format, and they are so well edited that if you really like software, you won't even realize you're taking a course - it'll feel like entertainment!  Until you get to the assignments of course - that's where the real learning comes.  They start off riDICulously easy, at least for anyone who's written code before, and they slowly get a bit harder, though the only issues with completing them you'll have are with debugging weird nuances of GAE....you don't even need to know python to start, because everything you need is usually the first link in a google search result page. The best part is that it's all FREE...

Develop With Passion Week Long Course

Image
This past week I attended a course in Austin, TX by a company called Develop With Passion, where I got some much-needed education on design patterns, good OO design and how to apply it to a code base.  This post will be about the course and my thoughts on my journey in software so far. "The greatest of weaknesses is the fear of appearing weak to others."  - First off, I should share where I'm at.  I've just graduated with a BSc. in Computer Science from the University of Calgary.  I landed a sweet job at Amazon in Seattle, and I'm starting there later this year.  I did an internship in oil & gas in Calgary, AB that finished in Dec. 2011, and that combined with my class assignments and small personal projects makes up the entirety of my programming experience...I thought I was ok at coding, I figured I could probably hold my own in design discussions with most professionals, especially after my experience in my internship.  After all, having a d...

Mono for Android

Image
I'm excited. I've recently been looking for a way to motivate myself to learn better software development practices, and stumbled on something called mono. No, I didn't get it from kissing someone. Mono for Android is sort of a Visual Studio plug-in which allows one to develop Android applications in C# ! I'm SOOOO happy about this. Personally, I learned Java in school and tried out Android development for a couple weeks, and liked it. Unfortunately, Java is going the way of the dinosaur, and it seems that .NET is taking it's place. That's why I decided to pursue learning C# instead of Android. Now that mono has arrived and (hopefully - I'm updating the API's as I type) works, I can pursue BOTH Android development AND .NET ! Basically this means I can get good at working for the man, and developing for myself. I'm super excited. For a brief history of mono's inception, check out this blog: http://www.koushikdutta.com/search/la...

Scrum Master - Agile Methodologies

Image
I was searching for videos and information about agile software development to help me better understand why it's so popular these days, and why I should learn more about it, and I stumbled upon this video. It explains, very elegantly, the agile development practice called SCRUM.  If your into software dev. it's a must-watch!