VendAsta, A Year in Review

It was almost a year ago that I posted on my experiences as a new employee at VendAsta Technologies, one of the newest technology companies in Saskatoon. I think it's a good idea to have a blog to look back on, it's a really good indication of the accomplishments you've made and gives you the ability to reflect on what your mindset was and how it's changed since then. In re-reading my blog post about work bliss, I've come to some conclusions about my experiences in the past year and decided it would be a good idea to reflect on my experiences with the company in that time and some of the struggles and accomplishments I've worked through.

Rose Colored Glasses

There's a certain glow about a person who's just been hired at a new workplace. It's the kind of thing that sometimes makes people see things the way they want to see them, instead of the way they really are. The first thing I think about when I re-read my post was "Geez, I sure went into this job with rose colored glasses on". I should clarify the preceding statement though; I don't feel that my impressions of the company then were wrong. In fact, having worked here for nearly a year I think I'd be accurate in still saying it's a great place to work that provides ample opportunity for self expression and improvement. I think the error of my ways in donning rose colored glasses in my outlook to the new job was really one of setting myself up for disappointment. It's almost impossible for anyone or anything to be perfect, and companies are no exception. I think initially I may have set my expectations a little too high regarding the company, corporate environment and sometimes the people I worked with. When you do this you create an environment that's setup to disappoint you. I'm not saying we should be pessimists as I think an optimistic outlook is important to the health and well being of employees, but it's easy to become disappointed (and sometimes even hurt) when you place things up on a pedestal expecting perfection.

VendAsta is still a great place to work, filled with ultra-talented individuals. I think in a year of working here I've just learned to not put people and the company in a place in my mind that's set to inevitably disappoint me. Or, in a manner of speaking, I've taken off the rose colored glasses and started looking at things through lenses of realism ;)

Struggles

There have been a number of things I've struggled with from a professional point of view in my year at VendAsta. I think examining ones weak-points is a beneficial exercise because it helps us to identify them in the future and come up with strategies for avoiding their pitfalls. Lack of confidence is a huge hurdle that I've had to overcome in my time here; a hurdle that I feel, for the most part, I've cleared. Perhaps it's just human nature to be intimidated when starting a new position and coming out of (relative) inexperience. If I look back at what I've accomplished even in my time before working at VendAsta I start to feel more confident; I think my problem initially was that I was too quick to compare my experiences to those of the people around me. This is dangerous because it can create a perceived disparity between what you've accomplished and the relative value of what you see other people have accomplished. It's easy to get into the comparison game and start to feel a lack of confidence because you inflate the value of other peoples accomplishments next to your own. I've learned to put aside direct comparisons with the accomplishments of others and, instead, started to focus on comparing my own accomplishments a year ago versus what I've accomplished now.

It's sometimes easy to get discouraged that despite your passion and desire to change processes you aren't ultimately having a positive effect on improving them. I have felt this way often in the past year and, at times, given one of two possible responses: apathy or determination. It's much easier to become apathetic when you feel like the things you're suggesting are falling on deaf ears, so to speak. The nobler (and harder) thing to do is to persevere despite this and continue to voice your opinions. I haven't quite mastered this yet but I think it's important to at least recognize these responses and choose for yourself on a daily basis which you are going to do. I've felt that sometimes it just isn't worth voicing my opinion and taken the apathetic route, but I always end up feeling like crap after doing this. Even though it's harder to be determined I think it's more rewarding and ultimately builds more character. Going forward I'm going to give it my personal best to stay determined and positive despite these setbacks.

As a software developer it's so easy to second guess the decisions we make when it comes to coding and design. Some of this is healthy, but it becomes destructive when we enter a mindset that causes us to feel like we must always rely on others to give us direction in order to proceed. Code Review, Peer Review and Pair Programming are all things that VendAsta promotes as part of its mandate to implement the Scrum process as closely as possible but I've realized that these tools in and of themselves don't make better programmers; it's really only the ability to learn from ones mistakes that produces a better programmer. Am I confident that I'm a good programmer? No, but I've moved away from being scared of making mistakes to embracing them as a learning opportunity. I'm not afraid to implement an algorithm I designed, see how it works in code, and then find out that there is an easier way to do things. I've learned that there will always be an easier, better way to do things than the solution I come up with. The work that I'm doing and the people that work here have enabled me to feel that I'm a better programmer than I was a year ago and that I'm heading in the right direction, and that's one of the most important parts of a satisfying work experience.

Accomplishments

When I started at VendAsta I thought my skill-set included a well rounded set of disciplines from my previous experience. Looking back at what I've accomplished in the last year I think it's safe to say that my toolbox has grown considerably. I didn't have much in the way of experience writing unit tests, which is a core philosophy at VendAsta. Writing tests and examining Test Driven Development has given me a new appreciation for efficient ways to tackle development. The "Red. Green. Refactor" mantra is something I've taken to heart, not just when writing unit tests but when writing my actual code as well. I've learned about things like Dependency Injection, how to refactor efficiently, and how abstraction can help achieve reusability. I've taken my knowledge of CSS and HTML to a new level, something I thought starting out last year that I had mastered. I've also learned that I haven't really mastered anything as a software developer/designer and I probably never will, but that's ok :)

I've written more JavaScript in the last year than I did in the previous 6 years combined. Being able to understand the language at it's lower levels has given me an appreciation for the abstractions available in current libraries like jQuery and YUI. Reading and learning from Douglas Crockford and the YUI Theatre have proved to be an invaluable tool in my JavaScript toolbox. Closures, Prototypal Inheritance, and Dependency Management are all things I've learned to deal with effectively. As much as I've learned about JS in the last year I still feel I've only touched the tip of the ice berg in terms of what's capable. JavaScript is truly an expressive and powerful language and I think many people in the software development community underestimate it as something that is the language of web hackers and script kiddies; they couldn't be more wrong.

I had dabbled with Django and Python at the beginning of last year, running through the most basic tutorials and building a basic blog with Django. When I started at VendAsta that experience proved to be valuable as we used the experience of building our corporate website in Django as a stepping stone to understanding what we'd need to do when building StepRep and MyFrontSteps. I participated in the development of both of our core products from the stages of infancy up to where they are today and I'm very proud of what we've accomplished in less than a year. I almost forgot to mention Google AppEngine which we use to host MFS and SREP. Learning about GAE has enabled me to expand my knowledge of so many other areas of development that I wouldn't have imagined. It's foundation is in Python and we run Django on it. Our applications are tied very tightly to JavaScript (almost to a fault) which has enabled me to learn so much about that language. I've learned how to create a project from scratch on AppEngine using alternate frameworks like WebPy, CherryPy and Google WebApp. I've deployed several websites on AppEngine for work and on my own as side projects to explore further uses of the platform when coupled with social network platforms like Twitter. In developing MFS I was able to learn how to build a social application on both Facebook and MySpace concurrently as well as supporting a standalone platform (not an easy task). Jeff Read and I customized an open source upload utility, the YUI Uploader, to do client side resizing of photos using the open source version of the Flex SDK.

The Future

No job is perfect, and I think it's safe to say that looking into the future I can't predict what's going to happen at VendAsta. However I think looking back has given me a new appreciation for the work I'm able to do here and the things I've been able to accomplish. I think VendAsta will succeed as long as we keep hiring exceptional people that strive to improve themselves on a daily basis. I'm trying to continue to do that myself ;)

Filed under  //

Comments [2]

Static design processes lead to usability failures

Since my excursion to AEA '09 in Boston I've been doing a lot of thinking about all of this "User Experience" stuff. Much of what Andy Clarke said in his Walls Come Tumbling Down presentation has been ringing around in my head, resonating with so much of my experiences over the last few years. Without diving into the entire presentations coverage of the current economic situation being a stimulator for workflow process change, I want to focus on a few thoughts from 1 slide in Andy's presentation.

"Designers work on static look and feel visuals"

There is a design disconnect problem when the medium we publish to (the web) doesn't match the medium we design in (static images). The web is dynamic, elastic, portable, modular and can be repurposed in any number of ways. Many web designers work in Photoshop and Fireworks to produce mockups that are static, rigid, not portable and often discarded after the initial design process. By designing in these static tools it is nearly impossible to answer the "what if?" type questions that we need to be asked in order to improve the efficiency of our design process and, most importantly, the usability of our websites and applications. What if the font size is increased by the user? How does that affect neighboring content? What happens if this column appears second in the markup? These things are all dynamic in nature and these questions cannot be effectively answered when the tool we use to produce mockups is static in nature.

"Designers and developers often work separately"

I firmly believe that if we are to improve the user experience of our applications that designers and developers need to work in harmony from the very beginning. Traditional "designer/ux" work processes such as paper prototyping, white-boarding and lo-fidelity mockup construction should be participated in by developers. In fact, the entire design process needs to have input from both designer and developers in order to be successful. Far too often designers pitch concepts and hi-fidelity mockups "over the wall" to developers once things have been finalized, creating a disconnect between the two; this promotes division and resentment. Designers often don't understand the limitations that might be imposed given the technology that developers have been given to work with, and developers often don't understand the usability considerations that went into design decisions. Developers might have insight into usability based on past experience that can go unheard because they aren't included in the design process, and designers might know what the best way to develop a certain feature might be. (You can see how this could go on and on).

In a perfect world we'd all be designer/developers with the capability to have enough foresight to solve all these problems before they happen; unfortunately this is not a perfect world. I think the solution to this disconnect isn't that complicated though; mutual respect for each part of the process is a start. If design and development can co-exist with unburdened communication in the early stages of a project things will be in much better shape. Part of this has to do with breaking down the traditional barriers that seem to exist between these two disciplines, but I believe Kent Beck covers this subject in much more elegance than I would.

"Testing, by users and for browsers and accessibility comes last"

It's interesting to me that the people we build websites and web applications for are often consulted last when it comes to design and usability considerations. Even when there are people on a project team who have usability experience it seems that _they_ are the ones consulted when really we should be pouring our initial efforts into getting feedback from potential users. It is so arrogant of us as designers/developers to make assumptions about what is "best for the user" without ever asking them. This can be a hard problem to tackle because many teams don't have dedicated testers and some teams utilize developers to do nearly all of the functional testing. Developers _can_ test, but they aren't the best testers in my opinion; developers are often working in an isolated area of a website/application and don't have the "birds-eye view" required to really understand how all of the components fit together. When developers are the primary people doing user/functional testing, and this testing comes at the end of an iteration it can lead to design implementations that often overlook simple usability problems.

These problems are all solvable, they just involve a lot of open communication and respect between developers and designers and the willingness to abandon processes that are based on static models. The web is dynamic and we should be in our design/development methods as well.

Filed under  //

Comments [3]

Application Usage Trends

If I had captured a snapshot of my application usage habits during each year of the last few years I think I would have discovered something like this:

  • 2005: (Windows): Photoshop, Fireworks, Dreamweaver, Firefox
  • 2006: (Windows/Linux): Fireworks, Komodo, Linux Terminal, Notepad, PHPMySQL, WAMP, Firefox (+Firebug)
  • 2007: (Windows/OS X): Fireworks, Notepad, IntelliJ IDEA, Visual Studio, Firefox (+Firebug)
  • 2008: (OS X): Fireworks, Textmate, OSX Terminal, Firefox (+Firebug)

I've got nothing really insightful about these pseudo-stats, it just kind of struck me as I was working that I really don't use much of an IDE at all now.

Filed under  //

Comments [0]

Positive Dissatisfaction and Scrum

There are some interesting things that happen when a job comes to you as opposed to the alternative (read: job hunting trying to find a company that fits you). When you fit the company things click. Perhaps I'm being a bit presumptuous with that last sentence, but it's truly how I feel working at VendAsta. This feeling is one of the things that has solidified this idea of positive dissatisfaction in my mind and how it can be a huge benefit to people in any field of work, but even more so to those in the world of software development.

Our small development team for the MFS (My Front Steps) project is nearly completed now and I'm amazed at how well things are coming together. We have a very well rounded team of developers who all seem to be on the same page about things. Our experiences are varied and cover a broad spectrum of disciplines which gives great depth to such a small team. However, I believe the common uniting factor in what is going to make us such a great development team is the fact that we all realize that we haven't arrived in terms of our abilities. We don't know it all. I certainly don't know it all, and I'll switch to the first person from this point on as I don't want to put words in anyone's mouth.

I define "Positive Dissatisfaction" as a state of mind that reflects an individuals desire to continually better themselves by coming to the realization that they cannot be satisfied with the knowledge they have attained at any given point in time. I feel that in order to truly succeed in the field of software development that I have to continually admit that there is always a better way to do things than the way I think things should be done. My goal is to reinvent myself every day with the knowledge I learn from others, the web, and, more generally, my life experience.

I believe that Positive Dissatisfaction fits great with the Scrum development methodology. Short iterations offer a huge opportunity for team members to improve their development practices and experience the benefits of learning quickly from one another. The fact that the team is self regulating in terms of task load, allocation, and followup promotes a great sense of ownership in the project that reinforces a sense of continual refinement of processes. I certainly don't want to be contributing code/resources to the project that was the result of some half-assed effort. All of these factors help me to keep myself in a continual state of Positive Dissatisfaction (have I said that enough yet?) so that I'm attempting to contribute with a 110% effort.

When you fit the company, it really makes you want to contribute that way :)

Filed under  //

Comments [0]