YNAB is Hiring a Flex/AIR Expert

Overview:

Required Skills: Must eat, breathe, and sleep elegant Flex/AIR code
Contract Details: 6 months, full time (40 hours/week) with possibility to extend
Job Location: Anywhere you want
Submission Deadline: Jan 21st, 2010

We develop desktop personal finance software called “You Need a Budget” (”YNAB” for short). We just released YNAB 3, which is the new flagship version of our software written completely in Adobe AIR. Now that it’s released, there are of course a lot of improvements we’d like to make to it, from performance tweaks to new features. It’s a fun project, and you’ll have the opportunity to make a huge impact on shipping software.

We are looking for a senior Flex/AIR developer to contract with us for 6 months, full time (40 hrs/week), with a strong possibility to extend the contract after 6 months.

An ideal candidate will:

* Have 5+ years of general programming experience, with at least 1 year of Flex/AIR development experience.
* Have worked on a large scale Flex/AIR application, and not just single-page apps.
* Be well versed in object oriented design principles.
* Have experience writing custom Flex components
* Have experience profiling and optimizing code
* Have worked on software that has shipped
* Be an excellent debugger. (The sort of person that can’t wait to find out why “it breaks when I do X”)
* Be able to think critically about their work. (We love it when our developers tell us a better way to do something!)
* Be able to work in a distributed team environment. (I’m in Austin, TX. My partner is near Salt Lake City, Utah. You can be anywhere you want.)
* Have experience with SVN or another similar source control system
* Enjoy programming and developing software as much as we do
* Be comfortable working in a Flex codebase that does not use a micro-architecture. (We follow good OO principles, but did not adopt Cairngorm, Mate, PureMVC, etc. If you are comfortable working in such a codebase, read on.)

Bonuses go to candidates who:
* Have experience writing AIR applications and not just Flex
* Already use money management or budgeting software themselves
* Can think critically about UI experience and make suggestions for improvements as they go along
* Are located in Austin, TX (Not a requirement – just a bonus)

I’m looking for someone who works well without being micro-managed. I like to give directions like:
“This part of the program is too slow, and these are the places that might be good to start looking.”
“This component needs to be rearchitected to allow for X. How do you think we should do it?”
“Some users say that this aspect of the UI is confusing. Let’s talk about how we can improve it.”
If that sounds like your ideal environment, keep reading.

Brief Quiz

Below are three really quick questions I’d like you to answer in your response. Our ideal candidate won’t need a ton of time or Googling to answer these and would probably be surprised we’re asking such “easy” questions.

  1. A user reports that the application is consuming “too much memory”. A fellow developer loads up the application and watches it in Task Manager or Activity Monitor. Everything looks fine until he clicks on button X. At that point, memory jumps by 100 MB. In fact, every time he clicks on Button X, memory jumps up by 100MB. He looks at the code and sees that Button X is doing a lot of things, and calling no less than 50 separate functions. None of them are the obvious culprit, and after glancing at 2 or 3 of them, he still doesn’t know what is causing the problem, and doesn’t want to hunt through the other 47 functions. He comes to you and asks for your help in finding the problem. Very briefly describe how you proceed from here to determine what is using all this memory.
  2. Using whatever magic you used above, within a few minutes you and he have determined that 100 objects of type “Foo” are being created every time you click on X, and you know that each Foo object takes up 1MB of memory. First mystery solved! But now you wonder why the Foo objects aren’t being garbage collected after they’re used. You verify that all of the obvious references to the Foo objects have been nulled out, but they are still never being garbage collected. You come across the following function in the Foo class:

    private function startUp() : void
    {
    addEventListener(KeyboardEvent.KEY_DOWN, handleKeyDown);
    systemManager.addEventListener( MouseEvent.MOUSE_DOWN, handleMouseDown);
    }

    You haven’t read the rest of the code yet, so you can’t be sure, but you think you might know what the problem is. What is it?

  3. Let’s say we have a DataGrid (or AdvancedDataGrid) that displays a list of employees. Each row displays a separate employee. Now we want to display an employee’s picture next to their name on every row of the grid. An inexperienced developer writes a new component called PhotoItemRenderer to do just that. Everything works great until we start scrolling in the grid. As soon as we start to scroll, the images don’t necessarily match with the employees. Some employees that should have no picture display the picture of someone else. What’s worse is that when I scroll some of the problem employees off the screen and back on again, the picture being displayed on their row has changed!
    Do you have any hunches as to what the problem is? If not, very briefly describe how you would go about debugging this.

If Interested

Submission Deadline: January 21st, 2010
If this sounds fun to you, please send the following items to jobs (at-sign) youneedabudget [dot] com

  • Your resume and/or links to prior projects
  • Brief answers to the 3 questions above
  • Salary/Monthly/Weekly/Hourly rate requirements
  • Anything else you’d like us to consider

We’re fun to work with, and love developing simple, elegant software. We look forward to hearing from you.

Learn the YNAB Way

YNAB Online Classes

Live Online Classes

  • - Live Instruction
  • - Small class sizes
  • - Open Q & A

Register Now

(FREE)
YNAB Online Classes

YNAB University

  • - Change the way you think about money
  • - Work at your own pace
  • - Re-access the material

Get Started

(FREE)