Category Archives: Software Development

Housing – Why I am leaving Vancouver and going to the US

Vancouver - Falsecreek

My decision to leave was made with the following understandings: that if I stayed here I would be very unlikely to afford a place of my own, and that if I wanted to take my career to the next level I would need to work for a larger company than Vancouver houses. And with the exchange rate between Canada and US, it seems a perfect time to go to the US now.

This is my journey through reasoning why I am leaving Vancouver, BC. Of course I am not alone a Angus Reid Poll estimates that a staggering 150,000 struggling families are seriously thinking about moving away from Metro Vancouver to avoid the region’s housing costs and transportation issues.

Wages in Vancouver do not match the cost of housing

In Vancouver, BC the average wage is $76,805 per year — if you borrow three times your salary you can afford a place to live at $230,415. The average place to live in Vancouver on the other hand is $857,015. Globe & Mail reports that Vancouver is the worst place to live in Canada for difference between wages and Housing. Last year the Financial Post stated that Vancouver was the most expensive place in North America. The Demographia Housing Affordability Survey puts Vancouver, BC has the second most expensive place to buy a house behind Hong Kong.

In Vancouver, the Chinese have helped real estate prices double in the past 10 years.

Here’s how the Chinese send billions abroad to buy homes – Bloomberg Business Nov 2 1015

Controversial foreign ownership study is about money — not race: Vancouver planner
“Money is no longer connected to what you do and where you live”

In contrast, Vancouver median incomes remain among the lowest among Canadian cities, while home prices in the region are the highest in Canada. The way government structures are set up in Canada means that Canadian municipalities are relatively weak and rely on other levels of government to set policy. Business Vancouver Nov 6 2015

Shrinking housing sizes

What these figures do not show is the shrinking of the size of the place you can buy. So you could pay $500,000 for a 500 sq ft apartment. Most of the places built now have stupid small kitchens, which encourages people to eat out. What does all that salt do to your health? Let alone the psychologically impact of living in a box. I have no problem with density and I believe cities need to increase it, along with good transit.  That said, an apartment should to be liveable, it has to give moments of peace away from your work, and personally I want a good kitchen and somewhere I can share food with people.  The current builds are not good for people.

Down Payments on a Mortgage

I have spent most of my life working for the community, non-profits and Government. I have got by, but I do not have the savings for a house down payment, I have no family to inherit from or provide a financial security blanket. This has been my biggest barrier to buying a place.

You can get a mortgage with just 5% ($42,850.75 on the average place) of a down payment but you then need to pay mortgage insurance. Premiums can vary anywhere from 0.5% to 3.5%. A great way of taking more money from poorer people. If you have a deposit of 20% you need no mortgage insurance. So 20% of the average place $171,403 is what you need for a down payment.

The Have and Have nots

Toronto, Vancouver house prices still soaring, stats show
Benchmark detached home is $1.2M in Vancouver, while average detached runs $1.07M in Toronto

CBC Nov 5 2015

Of course one of the problems for access into the Housing market is everybody who owns a place does not want the housing market to dip, because they are making money off it. Collectively that is a lot of political power, money and votes. This from people who do not want it to get easier, if it hurts them.

In Canada it is also getting harder to borrow money even though the Interest rates are low. I have so many friends in their 20’s, 30’s and 40’s who have just given up the idea of owning a place in Vancouver. They are also torn by Vancouver being a beautiful place and they want to live here.

The Economic Divide – is it sexist?

It feel like we are about to reach a point where people will never be able to buy a place if they do not do it soon. Whilst this obviously hurts younger people, it also hurts people who work in lower incomes i.e. women and caring professions.

I have already lived (Cornwall, UK) in a place where teachers/nurses/non-profit/carers/government (still a much higher percentage of women), could not afford to live anywhere near where their jobs were based.  There the average house price was £500,000 and average salary was £16,500 pa in 2008.

Transit

Any good city needs Transit.  I have expressed my opinion on this in a previous blog post, when the City asked for more money (via Tax) to invest, Vancouver said no.

Beyond owning a place

The rest is my feeling and experience of the Vancouver job market after 8 years in multiple startups/technology companies.

Career Opportunities

In Vancouver there are fewer software jobs than about two years ago when there was a lot of more opportunities. The companies that are now looking for software engineers tend to be small and medium sized startups with fewer career opportunities for growth than larger corporations. That said, we have a few more global companies (e.g. Amazon) here than before, so it is possible the lack of jobs is due to the a depressed market now. With national figures showing Canada is currently in a recession, despite a recent job news showing an increase but these are mostly in the Public Administration, in Government.

I changed career after 20 years in campaigns/communications/marketing/public office/leadership/training as I felt the Vancouver market was very limited in these areas for someone in a senior position. I knew that to grow my career I would need to leave Vancouver and I was not ready to move, as I love this place.

This and my need to create again (my first degree was Computer Science, 1996) led me down a two year path of re-educating myself  (via BCIT evening courses and small web contracts) in software engineering with modern languages specifically for the web. With three years additional years of web development (in full time work) under my belt, I am in a similar position of wanting to grow my career.

Leadership Quality

In Vancouver, software leadership roles are generally promoted from within (few come with quality training for the internally promoted person to gain leadership skills) or some outside “star” usually from a US company, used to working at a much larger scale. In fact I can only think of one person who received their leadership training outside of the job — and they were my best leader. I have also worked with a lot of non-technical leaders which is a different kind of challenge.

In Vancouver in eight years I have had three leaders who have inspired me out of nine.  In the UK the ratio was higher, I think in part because of 360 degree Appraisals which are more common in UK, leading to a faster/tighter learning loop and higher leadership quality. It is possible my experiences have been unusual, and I simply been unlucky with my leadership in Canada. However, when I ask my friends how many of them had leaders who inspired them, most agree it is rare in Vancouver and that they had better experiences in Toronto/Waterloo/Ottawa. Other skills they shared they felt missing from ‘Leaders’ included giving feedback, risk management, change management, empathy and conflict management.

Training

In the Vancouver job market your learning is often self directed and more often self funded. Sometimes a company will have some money available but not much. One very Global company I worked for made it impossible to claim the so called 50% off Tuition costs. More European/US companies seriously invest in training and their leaders, the UK recognized this problem a couple years back and started investing in it, in every sector.

The irony is the Canadian Federal/BC Government has made available monies for training and whilst the program is not perfect — it does not recognize online training — not a lot of companies apply for it. There is also tax credits for official education institutions and even bootcamps now. Training and Conferences are something I have had to negotiate in my contract to get them in Canada. I would like to see this as more of an active partnership than what I have experienced here.

Pay

In the technology sector the pay is a lot lower compared to US cities.

Lets take http://www.payscale.com or http://www.glassdoor.com as a comparison. In Vancouver the average Senior Software Engineer would be paid CDN $ 89.214, in San Francisco it would be US $130,00, New York US $95,000. The big differences is not so much in base salary, but in the bonus which is often 10%-20% of your base salary and then shares gifted at again 10%-20% vesting over three years. These last two are not common in the Vancouver market. In fact few companies appear to share success in Vancouver. There are even a couple that claim to be startups, but are actually family business with no scheme to buy stocks or share the company’s profits.  Maybe they like the label startup, its good for marketing and recruitment.. and you can ask your people to work harder and longer.

An added bonus for working in the US is the current exchange rate whereby you would get an extra 20% to 30% when converting your US dollars into Canadian money. Taxes are also generally lower in the US.

BC & Company Benefits

A lot of small companies will do the minimal in terms of benefits and BC employment law (thanks to the BC Liberals) is so pathetic in compared to well everywhere, that some employers think they can get away with offering crappy benefits and they do.

And then there is 3 months wait for extended benefits, by some, not all Vancouver companies. Do they not care about the health of their new employees during the most stressful part of a job.  All of the companies I interviewed with in the US start extended on day 1. Still Canada has a better health care system then the US.

Cost of living

Ok lets not be blind here, you need more money to live in a bigger city. Using numbeo/expatisan it rates Vancouver 34% cheaper than San Francisco, or 23% cheaper than Chicago.  This seem greatly affected by exchanges rates, so I am sure they give me some indication but they are not entirely accurate.

Cost of living comparison between Vancouver, Canada and Chicago, Illinois, United States – Expatisan

  • Food 8% less
  • Housing 24% less
  • Clothes 12% less
  • Transportation 23% less
  • Personal Care 20% less
  • Entertainment 37% less
  • TOTAL 23% Vancouver is cheaper than Chicago

Numero comparison

  • Consumer Prices in Chicago, IL are 22.63% higher than in Vancouver
  • Consumer Prices Including Rent in Chicago, IL are 23.63% higher than in Vancouver
  • Rent Prices in Chicago, IL are 25.43% higher than in Vancouver
  • Restaurant Prices in Chicago, IL are 31.30% higher than in Vancouver
  • Groceries Prices in Chicago, IL are 23.89% higher than in Vancouver
  • Local Purchasing Power in Chicago, IL is 8.19% higher than in Vancouver

Healthcare

The United States is ranked No. 1 for most expensive healthcare per capita at $8,233. Conversely, Canada ranks No. 6 worldwide and is over $3,700 cheaper than the United States at $4,445 per capita, according to a 2012 OECD Health Data study using 2010 statistics. Americans pay over 17 per cent of their Gross Domestic Product (GDP) towards healthcare while Canadians sit at about 11 per cent.

From what I can work out I will have to something like $100 to $180 a month to get a similar service to that in Canada, with the exception that serious stuff is paid for me after a ceiling but I am still paying a percentage. Where as in Canada serious stuff is part of our Health Care system.  If you have a domestic partner you will have to pay for health insurance for at the cost of $3,000 per year. If you are married, your companies health scheme would cover them at much less cost but roughly about an additional $1,600 to $2,000 per year depending on the scheme you chose.

Actual Work Culture

Every company I have worked for in Vancouver has “over sold” how good their culture is and made it sound like the best place on planet earth. They will rarely talk about the weaknesses and problems they are encountering, things they still need to fix. Maybe I am at fault here, I am from the UK and we are direct people, and not scared of conflict.

The companies I interviewed with in the US were a lot more honest about what they were good at and where they needed help. Their leaders were more vulnerable, something that engenders more trust in me.

Culture is formed from all the ways people communicate with each other, the more honesty the better.  And honesty should be matched with kindness.  How you start any human relationship for me says a lot, yes be proud but also be honest. You really get a sense of how good a culture is and how good the leadership is when you or the company fails in some fashion, what level of forgiveness is there? Also on the opposite side how does the company celebrate success? Values and Ethics matter.

Technical Challenge

Working for a company that is actually working at scale i.e. Billions of transactions versus Millions, is hard to find in Vancouver. A lot of the companies here are building a form of Marketing platform and/or B2B platform, often at a much smaller scale. Successful B2C is rarer in Vancouver.

In software you are out of date pretty much every three months, you have to love learning and I do.  I have built a number of “social media platforms” and job sites I want something more complex.

Relocation

I moved from the UK to Vancouver with a lot of stuff in 2008.  It is not cheap, there are many things to be careful of and the insurance can be a killer. Advice given to me specific to a US move is that the initial offers do not match the actual cost.  That technology is hard to move and expensive. And inventory everything.

Oh a really important thing to watch is they will give you an estimate based on what they think gas will charge. Then ding you for the actual amount when you arrive. And in some instances if you live where they can’t get the big moving truck and need to move items to a smaller one, they ding you with that too. Plus you need to be very careful with valuables. I think one friend ended up with an empty box instead of a playstation the last time she moved. And my move back to Chicago was $1000 more than quoted because of gas and miscellaneous charges.

Make them Saran Wrap all your furniture. All my furniture got nicked. Even though they paid for my insurance claim, I wasn’t about to replace my furniture so I just end up with ugly furniture.

Risks

If you go to the US there are a bunch of risks:

  1. There is no employment insurance for you in either countries
  2. Your TN Visa will expire and you will have 30 days to pack up and leave the country
  3. You pay double on Relocation, there and back again
  4. Trips home cost a lot more money
  5. If you have a Spouse or Partner they cannot earn money.. so what do they do? Do not under estimate this
  6. You have no credit score in the US and it will take months to a year to build one. Get a secured credit card ASAP.
  7. Consider how you will maintain your Canadian Credit score

The actual job that got me to move

A couple years ago I once met a guy at a software conference who was a mentor like me and was very passionate about his company. I liked him but he worked for a finance company that have a reputation of not being innovative (FinTech had not really kicked as a trendy thing).  A number of years later the same company started an apprenticeship scheme and posted it online on github so anybody could use it. Wow I thought they are a company to watch, it was smart, courageous and risky.  Another year that guy emailed me and asked if I could recommend any good software development managers. I did (not me).

I got contacted by a US recruiter (NeoHire North) looking to bring people from Canada.  We explored an opportunity together and I started to realize that maybe I could move to the US.  The TN Visa is simple enough you need a company that wants to sponsor you.  You can bring a spouse into the US with you or you could get a B2 Visa for Domestic partner that has to be renewed every year.

So I reached out to the guy and said, hey do you still need any Software Development Managers?  Yes we do.  Two Interviews were done over the phone and seven in person.

The thing that really struck me is I really liked the people, all of them and they were so different.  I asked them all the question “Why do you work here?” they all spoke with passion and vulnerability. In the end I had a number of opportunities both in Canada and the US, on the table. Whilst this company did not offer the best financial package, I wanted to work with these people, learn from them and help them be the best they can be. And the finial package is substantially better then anything I would be offered in Vancouver, and it means one day I will have a box that I can name as our own.

Emotional Journey

It fucking hurts to leave your friends, to leave the mountains, to leave the sea, and it is an exciting time in terms of Canadian Politics (I am hopeful that the Federal Liberals will do a good job and the BC NDP could revitalize BC).  The emotional journey of moving country/city is a hard one and should not be under estimated.

Is it over for me and Vancouver?

Maybe not, I hope given a number of years I will be smarter, wiser and better off. Then I could come back and share what I have learned and find somewhere to live.  That said, I fear if Government (Federal/Provincial and City) keeps ignoring the problem, not finding a way to collect data, to truly understand the problem and find a solution; then I will come back to find the situation much much worse. Then I will find a new home in Canada.

Brian Jackson (retiring City Planner) foresees no change in ever-upward pricing pressures on housing unless Ottawa shifts immigration policy or applies land purchase restrictions on foreigner buyers or the Bank of Canada hikes interest rates.

Retiring Vancouver city planner blasts ‘the haters’

Possible Housing Solutions?

In my time in Vancouver I have spent about $115,200 in rent over 8 years.  My biggest problem was having a downpayment. I will add more ideas to this as I learn more:

  • Make it easier to pull together the downpayment, maybe larger companies could help their employees
  • One idea I considered exploring was buying with a bunch of friends and living together
  • Have better building regulations in making Kitchens actually useful
  • Re-define what Government thinks is affordable

Checklist for moving to US from Canada

Apply for your Social Security Number – It can take 2-3 weeks for your SSN to be processed and this number really is needed for most things. Do it as soon as you have your visa, you can ask for it as part of the visa process, do this.

Open a Bank Account – Once you have a US mailing address and SSN, you should get to a bank and open an account so you have a place to deposit your US paycheques and an account to start paying bills from.

Get a US Credit Card – Apply for a prepaid credit card where you would leave a $1000 deposit for a $1000 limit on a credit card. Use this to slowly build credit over the next 3-6 months and then you can eventually ask for your deposit back. This is essential to build a Credit Score.

One rainy Whistler and #smashingconf

When I first saw that Smashing Mag was coming to Canada and close by i.e. Whistler, BC.  I booked an Early Bird Ticket.

I have found both their emails and books very useful.  I paid with my own dime, so I could not afford the workshops.  Most of my multiple day conferences have being Rails/Ruby/Data/Product/Startup so I was very curious what the people would be like at a Front end conference.

Eric on stage

The main stage at the smashing conf. One of my Photo BINGO photos

It was a mixture of designers, developers and product people.  This conference was a good mix of people, nationalities and friendly. Culturally it felt like a fusion of an European and North American conference.  The lightning talks (the evening before the conference started) were a nice touch i.e. short talks given by conference participates who were not speaking as part of the main schedule.

I learned, relearned an incredible amount of information. The conference was well organized, the staff were friendly.  To be honest I think I am still processing some of it.  The food was good.  The venue was good.  The main room was a little dark for me, but there was an ALT viewing spot with couches and a fireplace and skylights, this was awesome. I felt overall the conference itself was good value for money – but I did get it on early bird 🙂 The workshops felt expensive.

smashing conf audience

smashing conf audience

VITALY FRIEDMAN “Its important you should not FREAK OUT!” opening #smashingconf in #whistler

You can find most of the decks here you can see the twitter conversation at #smashingconf and I will add the link for videos when it appears.

IMG_2311

My Learnings

  • First make your site fast
  • Deliver core content first, then progressively enhance
  • Pay attention to size of everything and what it is blocking
  • Make it responsive. Build for mobile first.
  • Design in the browser, wire frames are wasted time for designers
  • Always consider accessibility
  • Have a style guide that everyone is responsible for maintaining
  • Use sessionstorage and local storage
  • Make it all modular and plug and play
  • Design is not a service. Designers have to sit in the team

Things to explore

The future is

  1. SVG Fonts
  2. <Picture>
  3. http2
  4. Service workers
  5. Offline, maybe..
Rainy Whistler

Whistler on a rainy day, with no snow in the village

Things for the organizers to consider:

It was a really well run conference, here are some ideas to add a bit more magic 🙂

Pre-Conference ask the attendees what they really want

Send out a questionnaire what are the top three things you are trying to figure out. Share the results.  This would help guide the conference, spot trends that are emerging.  Encourage lighting talkers, to talk on similar topics or not.

Help lone travellers meet others

Make it easier for people to “hook up” for dinner plans.  Extend the attendee list with peoples interests, linked profiles/online bios (The current one being shared with twitter accounts was awesome).

Have a wanted board

It could have jobs, types of people they want to meet, problems they are trying to solve.  It could be online or offline.

Apprenticeships

At the Ruby on Rails Conference (Railsconf) they have scheme, which allows a number of students and diverse backgrounds into the conference for free.  They also ask for volunteers to act as their mentors throughout the conference. I am sure some of the sponsors would consider giving

Other thoughts

I just covered the talks I watched in full.

Marcin Wichary

A great talk about typography, perfectionism, underlines and sanity. Funny & serious well presented

Deck – aresluna.org/whistler

Susan Robertson

Use style guides as a way to explore, define and guide.  Make it part of feature development. Examples for automated styleguides for web sites

A great resource http://styleguides.io

Deck – https://speakerdeck.com/susanjeanrobertson/style-guides-why-bother 

Yoav Weiss

mix & match <picture>/srcset/<img>/<source> to give users a specific image file according to viewport & display quality. <picture> is not ready yet but hopefully soon.

Deck – http://yoavweiss.github.io/smashingconf_whistler/#/

Marcy Sutton

Start at the beginning and make it part of the process. ARIA accessibility helps out with JavaScript.  All of us someday will need websites to be accessible as our eyes fail us.

Getting start with ARIA

Deck – http://marcysutton.github.io/a-web-for-everybody/#/

Jenn Luksa

Great presenter and Sass to boot. Resources

Deck – http://www.slideshare.net/JennLukas/smashingconf-whister-developers-ampersandwich

Stephen Hay

Design in the browser. Wireframes are wasted designer time. Sketch.

  1. Focus on small screens first
  2. Then colour and type
  3. Uses a sketch in code tool

Deck – http://www.slideshare.net/stephenhay/sculpting-text-easing-the-pain-of-designing-in-the-browser

John Allsopp

Cache do not use for performance.  Use sessionstorage and localstorage

Deck – http://www.webdirections.org/speakeasy/presentations/SmashingOffline/offline.html

Dave Shea

Choosing your journey with CSS is more about the communication and how the team views it, rather than the methodology you use

Don't grow up to be a specialist

Jonathon snooks talk

Jonathan Snook

Do not grow up to be a specialist, explore, play and grow. Luck is what happens when preparedness meets opportunity http://snook.ca

Deck – https://speakerdeck.com/snookca/becoming-a-deep-generalist

Brad Frost

Atomic Design –  a methodology for creating robust design systems. Working from the ground up. Example http://patternlab.io

You thing your resigning the web, but are redesigning how people work

From The Guardian talk

Patrick Hamann

Well presented and a great case study.  Build modular and decoupled systems. Design features for access(deliver in layers) first. Embrace the unpredictable nature of the web. Every feature must be measurable. You can see The Guardians Front end here https://github.com/guardian/frontend.  Their Mobile site is faster than their Web site.  Consider what you put in your first 14 KB, load the html first, JavaScript & fonts next (this usually stops the page loading), than analytics and adverts.

Deckhttps://speakerdeck.com/patrickhamann/building-theguardian-dot-com

Val Head

Awesome fun lady. CSS can do some cool animated interactions. Choose the mood that fits the brand. Timing 0.2 to 0.6 seconds.

Deck – http://www.slideshare.net/valhead/putting-your-uis-in-motion-on-the-web

Paul Irish

Getting to fast – I did not see this talk, and I am looking forward to the video release 🙂

Deck – https://docs.google.com/presentation/d/1qoginKKkdrRpIPGjJakt1y17iXsIBSaInaHbR4JyCIk/edit#slide=id.g330e5fec5_00

Eric's badge

Growing beyond a junior software developer

I think junior, intermediate titles belittle people and their capabilities/talents/skills.  Where as sometimes the senior title can over in-flate your capabilities, whilst belittling others. We as humans love our labels as it allows us to understand what we are talking about or get the context faster. They also limit/focus our understanding and can make us lazy, in fully understanding a humans’ capabilities. Particularly if they have multiple capabilities. And lets face it, software engineering has many different capabilities, approaches, etc.

Working with others

Its not just about you anymore and you learning code, of course that will always be a big part of it. Its what you do with that knowledge, how you share it, how you take on advice, how you help others grow and of course building something that people want to use. Your perspective changes.

Its not just about you anymore, its about the people you work with and where you are heading

It changes in that you no longer look at a problem the same way, its not just the feature and what code you will need but how will this feature affects other features, the dependancies map out for you.  Your ability to problem solve becomes more complex, faster..

I have broken this down into the four aspects of what I have seen.

  1. Being a better human and using code for good
  2. Growing technical competence
  3. Understanding the big picture
  4. Building something useful

Being a better human and using code for good

As we get better at understanding what we are doing, in theory we should also become better at communicating it with our peers, as in other developers but also to non-developers.  I feel there is intrinsic value in sharing the growth journey.  In all fields, the master will have much to learn from the apprentice (I’ve learned so much from my students, interns and co-ops).  The best way to refine your skill is to teach, even when you are at a high level.

Explanation of the simple things

It seems you will spend more time explaining to “Business Types” the need to

  • Reduce technical debt e.g. not build on a house of cards, the risk higher to not tackle this problem..
  • The need to refactor e.g. imagine saying what you think, before filtering, do you always send the angry email or do you edit it?
  • Why tests are important e.g. so I know when something is broken before a paying customer or that key investor?

Having good analogies will really help.  Match these analogies to the interests of the person you are talking to.  The more analogies you have, the easier winning the “debates” will be.  Your other duty here is the is to balance yourself – does it really need to be that secure, that fast, or that perfect? Compromise is often needed between humans and their different interests i.e. technology and business. Remember no revenue or growth, no money, no wages..

Taking time to review all pull requests

Before I would let the “Seniors” weigh in on the pull requests.  Well I am now the most experienced in Rails in my current team, kind of scary, there are no seniors.  I have to figure it all out as it comes. This drives me to learn more, both tactical and strategic learning (explained below). Also when I do not know or understand I get the developer to explain the what and why, until I do. Interestingly this process is kind of like interactive rubber ducking (where you explain the problem out loud) and sometimes we have discovered problems together or I have learned something new 🙂

Spotting trends – the continuos code review

Helping people change behaviours and habits. This is easier if you can help people see specific code and have a good solution.  Always explain the ‘Why’. Habits take time to change, be patient. If you are, they may copy your behaviour and be patient with you. Kindness breeds kindness and critic breeds more criticism, where do you want to work? Of course there is a balance our job is often rational, but us humans are not.. Yes you may like to pretend but you are not Spock or a Sociopath..

preference => { :hamster 'true' } <<- Would this work with {:hamster 'true'}? 
vs {:hamster => 'true'}

preference: { hamster: :true } >> preference: { hamster: true } (unless symbol 
explicitly desired, would object true be more desirable?)

Thanks for the example Zachary Moshansky

Sharing rather then deciding

As a leader (software dev was not my first career) I have often stepped back to let others explore, gain confidence and grow their Leadership skills.  I find myself doing this more as a software developer. Yes I have ‘an answer’ but I will introduce it only if needed.  I no longer need to prove myself.  Let others try before giving the answer, pushing your brain a little, helps a person test and experiment (core to be a good developer).

Creating a culture through own actions

I laugh a lot, generally at myself. “cultural leaders” help change an environment through their actions more than their job titles.  Cultural leaders are not always those with “given” authority i.e. through a job title or description, but earn it through how the teams thinks and feels about them. Reward behaviour you want to see repeated. But be careful that a person does not overdo it. Balance is important, turning someone into a workaholic will be detrimental in the medium and long term to them and you, when it goes pear shaped..

External Peers

Talking and exploring code with others I always find powerful, particular if its a dialogue and ego is removed. A conversation where two people share.  There often times I seek out the opinions of my peers either through taking a developer out for lunch from another company or use a site where opinion is allowed e.g. RubyRogues.

Interviews

I have talked about this in previous posts, just to say think about how you would get the best code out of you in a technical interview.  My favourite technique so far is to pair code with empathy. To ask questions that relate to your real work. Also to realize the vast majority of humans do not perform at their best in an interview, so how can you help them bring a glimpse of it out..

Growing technical competence

Skills

In the end you are measured by your skills and delivery.  There are three skill sets you need to grow as a developer

Technical Skills

  • Language skills e.g. C, Ruby
  • Testing e.g. RSpec
  • Framework e.g. Rails
  • Tools e.g. text editor, FTP
  • DevOps e.g. AWS, New Relic, Google Analytics, Capistrano, Ansible

Brain Skills

  • Ability to learn – what are your learning styles?, how do you remember?
  • Problem Solving – how do you keep sharpening this?
  • Concentration – what is your best environment? best time of the day?
  • Abstracting – what helps e.g. whiteboard or something else

Communication Skills

  • Explanation of complex things – analogies, stories
  • Negotiation
  • Team player
  • Leadership
  • Conflict Resolution
  • Feedback – giving and taking

There is also something else very important and that is fit.  I would personally would rather work with someone I enjoy working with (and maybe less skilled) rather then a misfit who is brilliant. The impact on team morale i.e. happiness, dramatically affects productivity. Often teams interview for one of their own (a misused version of fit), this can be missed opportunity to grow the team to the next level.  Avoid clones. Get to know people, I would suggest before you know their code, sometimes you will meet people that you will want later in your journey..

Keeping up – Tactical and strategic learning

I thought I had to do homework before, but its seems that now the homework is at a more abstract level. Code styles, refactors styles, and now I am not focused on just what need, but on what the team is all working on.  Day-to-day you have learn/research how to solve the bug or create a feature – I called this tactical learning.  Then there is the bigger picture e.g. the application of object orientation, MVC or other patterns.  This I call strategic learning, some of this you will have done in a Computer Science degree, but may have to learn how to actually apply in your current language and/or framework. Of course if you did not do a CS Degree, you need to make times to learn this.

Tactical Learning

Google the problem/feature, stack overflow, google groups, podcasts that come with forums e.g. RubyRogues has Ruby Rogues Parley which allows you to ask for opinion which at times is more helpful then QA websites like stack overflow

Strategic Learning

Books that talk about patterns, anti-patterns and architecture, how you organize your code help you take the next step up. Patterns are useful vocabulary, but do not get blinders, everything in moderation.  Examples in my journey included Rails Antipatterns: Best Practice Ruby on Rails Refactoring and Design Patterns in Ruby

Places to look Goodreads.com for Books, or Coursera for free theory courses.

Growing your perspectives

Yes I would love to be an expert in Rails and Ruby.  As you become comfortable it is time to explore another perspective for me that will be going deep with JavaScript and Angluar.JS. Each language you will learn often make you better at all the languages you know, they will give a greater context for understanding programming, they will give you greater flexibility in roles, problem and challenges you can take on. As we know every language will evolve or die, just the same as everything human.  To ensure your future, play and experiment with new languages, stay curious friend.

Technical growth

I find adding in some different sources of knowledge and wisdom that are not also related to by immediate work help, so I subscribe to Ruby Tapas, RailsCasts, DestroyAllSoftware and http://rubyweekly.com.  I like video because I feel like I have to read so much, that it gives a bit of a break and occasionally I will listen to RubyRogues podcast.  As you can see I use different senses, and formats to make my learning easier.  I also love books, yes the ones made from paper, you can see my collection here https://www.goodreads.com/ericbrooke.  I also have become very interested in how people teach the same concepts, firstly so I can see what helps me to consume knowledge faster and then because I want to help others grow. All of that said experimentation seems to be the most effective for me to learn and for me to retain what I have learned. When trying out a new Gem I will often create a new Rails App and add the gem and play..

Isolation

I used to try to change too much in one go. Now I will (mostly) change one thing and check before moving ahead.

A touch of obsession

Sometimes it feels like we have to become obsessive about that new skill for a while, to get to know it well, see where it breaks and then dial back.

Introspectives

Each week we have a meeting to look back at our code and talk about some of difficulties we encountered and how we solved it. Each developer gets sometime and I also pull together a number of videos talking about some code/language/architecture thing to share. This is a developer only meeting, no founders/product managers our purpose is to learn from each other.

Notetaking

On this job I worked on a Rails upgrade from from 3.2 to 4.1.  with over 100 gems in it, I took the opportunity to take out all the non-supported gems, there was name-spacing changes in some, frankly there were incredible number of moving parts.  It was taking notes that saved me more than once.  I also documented errors and how I solved them i.e. copied the error and the solution, it was interesting to go back after the process and evaluated my solutions.

Concentration

How do you get to the zone and stay there.  When during the day are you good at the tough problems i.e. for me its the morning and about 3.30pm I could nap or grab a coffee. What breaks you out of the zone? What music on your headphones takes you to another place where you can write efficient readable code.

Problem Solving

The way you think is valuable.  Not all of us tackle problems in the same way.  As software people we lean into a very scientific approach of experiment and see the results.  That said sometimes its is a smell, that we cannot put on finger on the whole details, unless we have seen it before, our intuition may led the first step. Understanding how you break down problems will help you.

A great talk at Railsconf by @geeksam that would apply to all problem solving can be found here http://www.confreaks.com/videos/3391-railsconf-cognitive-shortcuts-models-visualizations-metaphors-and-other-lies

Understanding the big picture

Its not just about you, or even your team, the department or just the company..

Working with business

The code is never perfect, but we can see many ways we want to improve it, sometimes it will be a speed gain, other times easier to understand, making on boarding of new developers easier or faster feature builds as you have a better foundation.  That said, if there is no one to pay the bills and your wages.  As most things in life we are building on something imperfect, yet we need that feature to attract users who will pay for the use of the application.

Architecture growth, getting the big picture

We can often it driven by ‘Feature completion cycle’, or importance of velocity. This can lead to less reflection, less understanding of the business, less thought on the big picture or of the monster we are creating. It is a common trend for startups to build several generations of Apps, as the initial core App was mutated to do many ugly things to add that feature that you needed.

eBay gives 20% of the development time for the devs to work out what they need to do i.e. no features.  This is put into refactoring, experimentation, etc. They learned from having to rebuild the entire App several times.

Good Architecture also allows for a faster on boarding, and the confidence to not always employ very experienced coders and build a healthy ecology of experience levels in your team.

Understanding the moving parts

Whilst I am not suggesting that you know everything, do get to know the important things  from product, marketing, UI/UX/Design, sales. Respect the other cogs in the organization, will help you grow your overall business understanding, maybe even grow your friendship circle, or even find a great co-founder for that startup you want to get going..

How we behave around here

Organization culture, the stories, the myths, the symbols, how leaders and followers treat you, does the organization trust you or does it enforce it? When you get wrong, how does the organization/people forgive you and when you get it right how does the organization/people celebrate?

Understanding of Technology

This is an unfinished thought, which I will come back to.  There are some technology organizations where the CTO or the VP of engineering are the only people that really understand technology.  If they are unable to advocate effectively for the coders in the organization, they appear to become feature shops, driven like factories, where the coders are mere cog works to manipulate, where the pressure is always on and there is no time for reflection and learning.

Building something useful

As a software writer of whatever type, you generally want to build something that is useful.  Something that people want to use.  Whilst some founders/product people would like you to only build what they have determined as useful, I would suggest you are not just a software writer, you have opinions, thoughts and so do the users.  Sometimes it pays off to have raw data and form your own filters/patterns.

Knowing your users

In the end its really all about your users. Knowing your users will help, and not just your impression of what you think they are like. Get to know your market and its people.

Analytics

Have analytics systems embedded in your applications, watching behaviour from a scientific perspective is very helpful. It is only part of the equation but a measurable form.  The chances are you will not always measure everything you need in the future, so make the integration easy and expandable. Also note the actual server processing cost of whatever packages you use. All of that said analytics can be dangerous, mis-used and soul destroying, they should be part of the equation not the whole!

Draw a line in the sand about which are vanity metrics, and which are actually meaningful

Brooklyn Zelenka

Product Manager/startup founder

Be honest with them and upfront . Do not wait until it is beyond the deadline to tell them that it will be another week.  They may be talking to investors or senior leaders and promise dates.  Keep people up-to-date.

Community

Paying attention to community managers needs are important they will often see “mob” or “crowd” behaviour and form impressions.  These are invaluable, take time to have coffee/lunch with a community manager every month.  Community Managers may seem trends forming before they pop up on your analytic dashboard, if indeed they ever do.

 

 

Surviving as a Junior software developer

If it helps, you are never ready, you will never know enough, and the key is knowing how to cope with that.

At the beginning you may have no idea or a vague sense how to solve the problem, you will look at the feature and Google it. You will write code and may even get it working and over time, hours or days it may get ripped apart and rebuilt. Sometimes you will part of the conversation, other times you will come back to find its all changed.

In my first months/projecClimb to intermediatets/jobs I had some amazing moments as I solved problems and got the feature marked off the list, or I discovered that little thing that was stopping it work.  I also has some tough moments, where my code was changed without any comment, or ripped apart in front of me, sometimes without comment or another time with the senior developer responding to my questions with condescending responses.

You will need to separate your self worth i.e. ego from your code. You will need to manage that nagging sense you are not good enough.

Coding is hard, you need to know so many things, that are constantly changing and if you are full stack that could be CSS/SASS/COMPASS, HTML, Javascript/JQuery/CoffeeScript, Rails, Ruby, SQL, GIT, BASH and that is before we talk about APIs and deployment!

Here are some of thoughts and learnings I gained from my first couple roles as a junior software developer:

When you ‘Copy and Paste’ code, understand it

Google has become our SDK, for a lot of developers. You will search the feature and see who has done it already.  Smart, why redesign the wheel! While this may get you pushing code faster, you are starting to create a gap between your actual understanding and perceived ability. This starts to set expectations with your employer and team, at some point this will crash down on you like a house of cards. So by all means find that code through Google, but take the time to understand it, know what each of the commands/methods does, understand the flow make sure naming of variables and methods makes sense in your context. Most smart leaders understand that it takes time to grow as coder, use that time to build a strong foundation not a house of cards.

Debugging – Read the error message!

The most frustrating thing for your colleagues is when you ask a question and your testing suite or your log  is already telling you everything you need to know.  Have you read the errors and if not understood them have you googled it? Yes actually copy the entire error message and paste it in the search bar and press return. Sometimes you will have to cut it down. Do you know where the logs are?  No, hunt them down. It is also true that some error messages really are not helpful, infact they appear to lie, just look through the stack trace..  I record the really abstract ones, in my computer notebook with the solutions. If I were you write (yes with pen and paper – you are more likely to remember then) down each of the errors that you come across at the beginning, they may identify a weak point in your knowledge, or slowly help you remember not to make the same mistake.

Most of your errors in the beginning will be spelling mistakes, typos and things out of order 🙂

  1. Read the error message and understand it
  2. Understand the failing test
  3. Check the Logs, stack trace
  4. Check your spelling!
  5. If you have a lot of code on one line, break it out into several lines
  6. Read out loud
  7. Explain the problem to a stuffed toy or duck
  8. Google it
  9. Take a moment away from the code
  10. Before asking others, separate your ego from the code

Code Reviews & Pull Requests

If these are not happening, ask for them, if they are denied look for the next job.  They are the fastest way to grow as a developer, whether you be a junior, intermediate or senior you will learn a lot by others reviewing you code. And you will learn a lot from watching others get and give feedback. Yes some people are dicks when giving feedback, maybe you should give them feedback on their feedback (you might even help out their friends and lovers! being able to give feedback is crucial for all human relationships). Innovation and learning comes out of exposing your code and being vulnerable to feedback.

The best Pull Request comments, point out the issue and then explain why it is wrong (you may need to train your seniors to put the why, telling the why, is difference between being treated as a child or an adult). Do not become a parrot and copy and paste, understand why it is wrong, you will learn and grow faster.  I also have the habit of reviewing my pull requests on a weekly/bi-weekly basis to see what errors, if any, I am repeating, to target in my next afterwork homework.

Code reviews when someone senior or intermediate reviews a bunch of your code are incredibly helpful, in seeing what you are good at and what you need to improve.  If you are alone build up a peer group, who can review each others code. Either way you should consider reflecting on your own code every month or so, at the beginning of your journey you learn so much so fast, that you maybe able to refactor your own code.

The next extension for this, is to put your code open source and then allow the world to help you improve your code..

Pair Programming

There is even a better way to learn, yes pair coding it is like having a sports coach who is giving you constant feedback, and you get better.  This is awesome from a learning perspective. Not only will you learn about the code but you will see how your colleague use their tools as well, which will may give you some productivity tips (or vice versa).  Also you are likely to cut problem solving down by 50% in terms of time. This is not just a technique for juniors of course (its great for on boarding and teaching your organization code style).  All of that said this scared the hell out of me when I started, I thought I can not remember all the syntax and options.. Until I saw that most seniors/intermediates would without a thought Google the function or command to see what their options are. I learnt that is not important to remember everything, but to remember that you can.. Now I am less scared.

Build out your augmented memory

Whilst watching most seniors, they would often lookup old projects to see how they had done something in the past. Whether it would be a Google Drive, Drop Box or even GitHub they would keep most of their old work.  Another trick I saw was the use of notes for each task or type of task e.g. on Mac they would have a Note (or Evernote) on RSpec and have all the matchers and examples, or all of the startup scripts for spinning up a new node, etc. The point to be clear is you will not remember everything, so have it somewhere useful for you, in fact your memory just becomes the index of what is possible and where you did it last.

Also for the tasks that you need for setting up your computer, the environment and creation of an App, I store all of these on Github, to help me not forget a step, and also to keep my personalized setup (colours, BASH paths etc) somewhere, here is mine. You never know when you computer will die, or need to be erased, or you just get laid off!

Separating self worth from your code

Receiving feedback from colleagues can be tough. Some think code is very rational, logical and lacking of emotion.  Thus the feedback can be equally logic.  And some developers can be very cold how they deliver it, maybe they just have not developed the communication skills or patience to be a good teacher/coach/leader.  I even had a couple experiences when “seniors” ganged up to give me feedback, and frankly it was pretty painful to receive.  When I asked why and tried to understand I got cut off and then “shussed”.  I walked away from the situation and then learned not to ask a question to a couple developers at the same time. That said if someone is a dick to you, you do not have to return it. Be the adult, because today they could not be.. I have also had some awesome experiences when my colleagues talked through issues with my pull request, explained the why and what good practice options there are. You want as much feedback as you can get.

So you will need to toughen up a bit, process and work through their comments, and when you do not understand either research it, until you do, or ask. I have to say asking another human is generally faster..

Asking when you need help

There is a balance between asking too few questions and too many.  On one hand you may take too long to solve a problem and build that feature –  on the other hand you may well “piss off” (make grumpy) those senior to you.  This is tough, my general rule is to ask if you cannot figure it out after 40 minutes.

In my first job I think I did not asked enough, I know I would have grown faster if I had.  That said when you are interrupting someone who is in the zone, it feels, well, difficult. Also when they are in zone they often look grumpy, constipated or are frowning and generally look unapproachable.  You will learn the clues on their face over time on when to ask.  Of course my personal view is when my colleagues ask me for help, I will always help.  I have this crazy notion that collaboration is fun, yes even face to face! In the end I find it easier to work in a place where I like the people and they like me.

Growing your knowledge base

Sorry but you are going to have to do homework! Most non-developers have no clue how much you have to learn and then how fast it is outdated.  My solution for this was to do between two and three hours every night, then maybe a longer stretch on one weekend day.  But there is always one day completely off.  When you are hungry its hard to forget that you are actually running a marathon and not a sprint.

As with all learning, you will have strengths in some learning styles.  As a developer you will have to pimp all the styles.  I try to mix and improve all my styles. Really understand what learning style best works for you.  Do you prefer to build and hack together, do you prefer to read/process, do you enjoy watching videos, do you prefer to learn with others.  What makes that new thing stick in your head? Understand this as you have a LOT to learn and process.  A good book on this topic is Make It Stick

My personal choices include:

Books

You can find my books and ratings on my goodreads profile.  So far I find the ones actually published are superior, there are a lot of just e-books out there and I found have found their quality a lot lower. That said the just e-books tend to talk about the cutting edge technologies.

Videos

There are so many approaches that you should try a couple companies to see what works for you.  I started out with Lynda.com, then moved onto PeepCode and CodeSchool – who are both owned by Plurasight now.  Whilst I found that some videos helped with my understand, I did not remember them as well as book reading, which I retained for longer.

People

I have a couple people who I learnt with, we would meet every week and talk about a piece of code.  Like a book club.

This is a marathon not a sprint

That thing called work life balance at the beginning of your career is frankly bollox (bullshit for non brits).  That said you should make time to rest and not think about code.  Reflection will allow you to actually learn the big stuff or that thing you could not connect at first, to spring understanding on you (Bong).  The unconscious mind is a very powerful learning machine, it needs sleep/dreaming, a different context and maybe something creative, like music, painting to be fully powered up.  Yes and exercise, dammit, it also helps. And if you are NOT single, consider those that will love you a lot longer then your job or career even, yes that includes you dog (or cat), plan that time. And if you are single, you are more likely to die or suffer a nasty disease, so make time to meet someone and live longer..

Watching other developers code

If you watch someone who has many years, you will not only learn their style in coding, how they write, refactor, and maybe even test. You will also learn how they use their tools and this can just make you a lot faster. Peepcode (Now Pluralsight)  did some fun play by play videos that allows you to see some of the experts code. Or go a meetup or a conference and find people who let you watch or pair.

Reflection – Knowing your code and improving it

Every week I look back at my some of my code and research similar problems to see if I could refactor it.  I sometimes look for web applications that solved the same problem and see how they approached the same problem and I consider the why, benefits and drawbacks.  I go through my refactor book and look at my code and question it.  I find the creation process can be different to an editing process, it sometimes seems a lot easier.

Working on one thing at a time

I found early on I would try to solve the whole feature in one go rather then breaking the problem down into is component parts.  Now I divide the feature into a number of tasks and complete the tasks one by one (I even add them to Pivot Tracker or add a checked in github or write them down on a pad of paper!).  This allows my brain to be wholly focused on the problem at hand, rather then holding the whole code in my brain. I find I chew through tasks faster, consider out of the box solutions more often as I have that spare RAM to consider them.  I also find if I draw it out, I consider the connections and external parts to a greater level.

Commit often

For every feature I now create a branch. After each task is done I push, well sometimes pull push depending on the time scale. First you will get mini morale boost, secondly you have a backup, third others can see what you are working on. AND fourth, if you need to rollback it is better to do it if you have many hooks to choose from.

Asking Why?

Children do it far more and they learn faster.. And if that other person cannot explain, go and work where they really understand and love to explain.. The best teams I have worked on love to give advice and explain their perspective, but will also be able to defend their view, and then change when new evidence presents its self..

Relationships are important

There is a direct connection to strength of your relationships and the opportunities that will come your way. Invest in the people around you. Do the right thing by people, even when it all goes wrong.  Those people are far much more likely to recommend you for your next job. Be kind.

Features and front end

Completing a feature will gain you kudos, and adding something that clearly effects the customer experience will gain you support from those that support customers and help the sales team.  Having allies in all camps will help you be more resilient (keep your job) in a downsizing and will likely help with endorsements and recommendations. CEOs tend to protect developers who produce more the observable changes i.e. new button, skin, more responsive, etc.  Where as the CTO will tend to protect those who write good code and write good tests.

Have Plan B, C and maybe a D

You are the bottom of the pile, when layoffs come, you are the first in line.  Protect yourself have a Plan B as this is very likely if you are working at a real startup.  Go to meet-ups, get to know your local community, make connections with developers, so if you do get laid off, you have people you can reach out to, so you can find your next opportunity.  Having an active blog of what you are learning helps you reflect (so learn better) and you will build a following over time.  Also work on some projects that you can put out there, so they are public on GitHub, if you feel comfortable to work on open source do.

Should I be a developer?

You may ask yourself this sometimes. I certainly asked myself this at times, when you may watch others craft so easily. This is often referred to as the impostor complex, check out this railsconf talk. Then I find myself, looking for an expression for fun, I find myself impatient at not knowing, well everything, I dream about exploring other code.  Over time I found myself reading the source code rather then a blog piece explaining it, I started to understand more and more code, I find that I want to go back and refactor that hash search removing the [:id] and put in a fetch(), because it fails loudly. I spend breakfasts with other developers exploring what we know, what we have forgotten.. oh it appears I have the bug, no not the bad one but the one you are bitten by… I notice it has being several days since I got stuck and had to ask for help and instead I am asking for opinions.  Do I know everything no, can I find a solution, yes 🙂

If you are not from a Computer Science Background

You may lack in understanding of Algorithms, Data structures and do not have one computer language down i.e. Ruby, Python, Java, or a C variant, yet.

The reality is that Employers feel more comfortable with someone that has stuck with a Computer Science Degree for three years.  That said if you can describe your journey of why you are passionate about computers this may help.

The other aspect that matters is what are considered the basics.

  1. Data Modelling
  2. SQL
  3. Problem Solving
  4. The ability to code a non scripting language i.e. Ruby, Python, C++, Java, etc

Some employers like to think that you understand Algorithms, but the reality for many coders is that you will never use this skill set.  The places this really matters is at scale so a job at Amazon it would matter.  This is the best learning resource I have found on them Grokking Algorithms by Manning publishers

You may want to create a growth plan for yourself to introduce these.  Over a year work out the things you want to be good at, there are some good free course on https://www.coursera.org. It really depends on how deep into the stack you need/want to go.  If you are out of a Bootcamp, consider building your understanding in the primary language (e.g. Ruby, Python) and data structures first. Consider than basic Algorithms, just the basic concepts, not the math and then play with a functional language.  Learning a function language will force to think in a very different way, but do this after you are comfortable with a primary language.

Side Projects

Every senior who I have spoken to says that they learned an incredible amount from creating something they were curious about, maybe on a new framework or connecting to an API. Some would just explore how one GEM/package/library worked.  This can also be helpful for building out your GitHub profile.  That said when you are doing some much other homework this can be hard.

Choosing the right company

Medium/large company There are some who think that a junior is better off, going to a medium/large company.  This approach essentially states that these companies will have the processes to mentor/coach, a bigger team to take on juniors.  That said juniors have told me that there options are often limited to be first a “customer success”, or QA, or part of a front-end team and they have to work for a couple years before being promoted to a full stack team.  You will be able learn over a period of time but may be limited to less important tasks.

Agency/Code Shop Another approach would be to work for a company that will give you access to many codebases ( like an agency or a code shop), thus you will learn very different things, different styles of coding and architecture choices.  This may lead to building lots of Apps but only to a MVP level.

Startup Another approach would be to work for a Startup and then you will get see all the code, and be responsible the whole stack.  Thus you end up be responsible for setting up the deploying to AWS which you may not in larger companies who may have a Dev Ops person.  You will have to learn a lot more and faster.  It is also likely you will make mistakes through your journey. This journey would likely teach about one codebase to a deeper level then the Agency approach.

Do you have any tips?

I would suggest you blogging your own journey, it will help you remember what it was like to be a junior and when you take juniors on yourself you can help them with your blog post and also remember not to be a dick 😉

railsconf 2013 – ruby-on-rails-conference

[updated]

Here are two place you can get the videos for the talks

There is nowhere to learn Ruby or Ruby on Rails in Vancouver, BC, unless it is a book or online. I like to learn with others. I even pushed it at BCIT and asked at every level..

So I decided I would kickstart my journey with railsconf.  This was my first Ruby on Rails conference. I was honoured enough to win a scholarship, (I am a student at BCIT )to attend the conference (which paid for my ticket).  The rest is my pocket and vacation days. I just view it as a vacation 🙂 And I need to buy jeans.. My level of Ruby on Rails knowledge is really low in fact up to chapter 6 of Learn web development with ruby on rails pre-confrence.

Badge

Sunday

I took a AMTRAK train down from Vancouver, BC to Portland, WA. It made sense train, rails.. Its a seven to eight hour journey. My theory here was I would be able to do some more study on the way down. There I bumped into about 8 others travelling down from various companies to railsconf. I got very little extra work done.

Scholarship meeting up

Sherpas

This was fun and warm meeting of other scholarship winners and sherpas.  My sherpa is Sam @geeksam . I got to meet some of the other ‘scholars’ a real mix of backgrounds and personalities .  It was good to have some friendly faces (Chuck and Miles were really helpful) in a crowd of  1500 people.  We agreed on a hashtag #rcguides.  Lots of passionate conversation was started, about how people got into rails… but we finished early. So my first night I went on a beer crawl with the hostel… I know where I went from my credit card payments..

Day 1 -Monday

There was a lot of talks to choose from, and this will be my journey through the schedule.

I need sugar

The opening Keynote was by David from 37 Signals (Rails was created out of Base Camp, which is built by 37 Signals).  His vision was that Rails should concentrate on the document driven web apps not the “GUI” e.g. Google maps. Rails 4 is about speed.  His talk led into some good explanations on how the caching is working in Rails 4. Some cool stuff.

Rails Confrence

How a Request Becomes a Response

This was part of the intro track, designed to educate newbies about the Rails framework and the community. A quick and easy introduction starting from the browser through to the database and back. It was really basic but very well presented.  There are a number of sessions on the intro track that can be found here http://www.railsconftutorials.com The wifi did not work but a smart person had a USB stick with the needed code.

Nobody will Train You but You

This was a funny and helpful talk by Zach Briggs @theotherzach, for those wanting to step up their game.  His talk showed how he managed his first year of learning ruby on rails.  His suggestions including writing down solutions he found on a piece of card.  Build up some katas and practice them, until you can do them without any reference to anything out. He suggested visiting a couple sites including Sucks rocks, Destroy all software by Gary Bernhardt.

Monitoring the Health of Your App

Presentation by Carl Lerche and Yehuda Katz stating that the average web response time is a stupid way to measure your app by.  The real world is not distributed normally. Web response are long tail, not standard bell curve. They have being working on a product to solve this problem and help rails app creators to track down the issues.  The product they are working on is at https://www.skylight.io

Rails’ Insecure Defaults

A most excellent presentation by Bryan Helmkamp @brynary (founder of Code Climate). Here are the problems and and here are the solutions and here is what rails should change. Bryan is pulling together a free ebook you can signup here http://railssecurity.com

Issues discussed:

  1. Verbose server header
  2. Binds 0.0.0.0
  3. Logging SQL values
  4. Versioned secret tokens
  5. offsite_redirect
  6. #link_to_javascript
  7. SQL injection
  8. YAML serialisation

Sherpaing

Taking a break for sessions I decided to get to know some of my fellow attendees and spend some time working through a problem with Sam (my shepra @geeksam).  I wanted to see how he broke down a problem and how he also read other peoples code. I learnt a lot.

Closing keynote

Michael Loop @rands was funny, insightful and argued the need for the Stables and Volatiles (personality types) if an organisation is to survive and flourish, his thoughts that were the meat of his talk are laid out here – http://www.randsinrepose.com/archives/2012/11/14/stables_and_volatiles.html.  What bookend or overarched, his talk with however, was a very important point – that we as a community have to be progressive, and that occasionally means leaving old stuff behind.

Space

Reflection on the day

Awesome day. The conference food was good. I love how friendly the people are. How they will take so much time to listen and suggest. Kind of reminds of the early days of Apple that friendly community that is comfortable in taking on the world but is also open minded to listen. It surprises me how many Mac Book Pros I see everywhere, the only people who seem to have PCs are government employees! The venue is awesome there is space for everything, and I mean space to code, to chat. The WIFI is awful, really awful… The conference food was good. In the end I think I met about 50 people and introduced a bunch of people to each other.  All the nights events were fully booked and a bunch turned you away. To note for next conference book all the evening stuff ASAP..

I learned about the rails community and rails itself today and I liked it all 🙂

Day 2 – Tuesday

Breakfast at Mothers @MothersBistro 

breakfast at mothers

Keynote – Yehuda Katz

Spoke of the importance of including Javascript in your architecture rather then using it as a “necessary evil” patch on. Good sassy talk.

TDD Workshop: Outward-in Development, Unit Tests, and Fixture Data

I went to this workshop but they had so many problems with setup, lack of internet access that I left. That said the notes were amazing http://www.railsconftutorials.com/sessions/tdd_tools_techniques/02_integration_testing.html

The Magic Tricks of Testing

Sandi Metz once again showed her love for bikes.Very clear presentation on what should you run unit tests on and where you should not. Here is the deck

Booths and T-Shirts

The exhibitors open up and everyone runs for t shits, I managed to get six. The hulu one has the nicest material..

T-Shirts

Designing great APIs: Learning from Jony Ive, Orwell, and the Kano model

Philosophy and principles on how you should create APIs by Jon Dahl. His points were good but he used so many other peoples indicators or thoughts it felt like watching newspaper clippings..

(i) Never use a metaphor, simile, or other figure of speech which you are used to seeing in print.

(ii) Never use a long word where a short one will do.

(iii) If it is possible to cut a word out, always cut it out.

(iv) Never use the passive where you can use the active.

(v) Never use a foreign phrase, a scientific word, or a jargon word if you can think of an everyday English equivalent.

(vi) Break any of these rules sooner than say anything outright barbarous.

George Orewell, “Politics and the English Language,” 1946

Kano_Model

Happy Hour

Free drink and food, good for networking and deeper conversations.

Reflections

Today felt a bit more abstract with the exception of Sandis talk. The conference food was good. The wifi is terrible.. pinging shows the issue is the ISP is not doing its job or the OCC has reached its limit.. Not great for a tech conference, maybe different venue next year.

All evening events booked up, went for dinner at a Grüner – german restaurant and then to Powells .. Powells I love this place

Books

Day 3 -Wednesday

Breakfast

Back to Mothers for French toast covered in cornflakes

Keynote

A bit disappointing… but nice photos.

Ruby Heroes

This was a presentation of awards to people who have helped grow our open source community or take the time to share great code. Awesome. So many people help our open source community they should be celebrated 🙂

http://rubyheroes.com/#heroes

The big room

Properly Factored MVC

Again the lack of internet kills the effectiveness kills the workshop, but notes look awesome so I will come back to this later

http://www.railsconftutorials.com/sessions/factored_mvc.html

Creating Mountable Engines

By Patrick Peak, really awesome and clear presentation about how to re-use your code and options. It showed us how to setup a simply engine.

Crafting Gems by Pat Allan

A good presentation where he did not assume you knew anything. Good instructor.  http://www.railsconftutorials.com/sessions/crafting_gems.html also learned about https://travis-ci.org and http://rubygems.org

Lightning Talks

http://lightning2013.herokuapp.com

These were awesome either 1 minute or 5 minute talks from anyone.

Here is the first 20 to give you a feel, there was 42 to in all..

  1. Nick Quaranto – OpenHack
  2. Dr Nic Williams – Deploy your own Heroku with Cloud Foundry
  3. Chris Morris – Technical Intimidation
  4. Jon McCartie – Purposeful Code
  5. Bryan Helmkamp – Code Climate
  6. Andrew Harvey – Teaching an old dog new tricks
  7. Senthil Nayagam – Mobile Testing with Robots
  8. Miles Forrest – Cloning the Seattle Ruby Brigade
  9. Benjamin Fleischer – MetricFu is back!
  10. Adam Cuppy – “You’re doing it wrong!”
  11. Hector Bustillos – MagmaConf great things happen in mexico
  12. Hector Busitllos – The unofficial RailsConf schedule App
  13. Mario Chávez – Logic programming
  14. Mike Virata-Stone – Guard your forms with class, or any other selector: guards.js
  15. Ryan Smith – Rails logs to metrics
  16. Dylan Lacey – Giant Hamster Touching – Test Native Mobile Apps with Capybara
  17. rking – Pry Power: Test Speediness Edition
  18. Ivan Storck and Brook Riggio – Remember the n00b
  19. JC Grubbs – Programming Apprentices
  20. Brad Wilkening – Smart User Adoption Analytics
  21. Jeremy Green – Gemlou.pe – Easymarklet and SimpleDB.

Reflection

The conference food was good. Today I looked for some practical after yesterday abstractness and I got it 🙂 Popped out to Macys for a break and to buy some jeans.

Day 4 -Thursday

Last day a little bit sad 🙂 so need something sweet..

pancake breakfast

How to talk to Developers

Ben Orenstein loads of energy and several lightning talks. Taught us all how to sing better, how to communicate better and pitch better.

Happy people

Reflections on the scholarship

We met after lunch to discuss our thoughts and make suggestions for next year.  This was a really excellent opportunity for me and many of the other scholars thought so to.  We all agreed that we really appreciated the efforts of Ruby Central and the mentors/guides who took time out of their conference to make our journey easier and more useful.

Final keynote

Aaron Patterson was funny, sassy and even talked about rails. Lots of insight and advice. Some great stories of past mistakes, the need to consider what you publicize on security issues (tell the rails security committee and give them time to respond), how to avoid burnout, that we should look for happy moments.

The cat

The best keynote.

Aaron was born and raised on the mean streets of Salt Lake City. His only hope for survival was to join the local gang of undercover street ballet performers known as the Tender Tights. As a Tender Tights member, Aaron learned to perfect the technique of self-defense pirouettes so that nobody, not even the Parkour Posse could catch him. Between vicious street dance-offs, Aaron taught himself to program. He learned to combine the art of street ballet with the craft of software engineering. Using these unique skills, he was able to leave his life on the streets and become a professional software engineer. He is currently Pirouetting through Processes, and Couruing through code for AT&T. Sometimes he thinks back fondly on his life in the Tender Tights, but then he remembers that it is better to have Tender Loved and Lost than to never have Tender Taught at all.

There was an ice cream social.. and ice cream!

Reflections

I am without a doubt tired but the talks I went to did rally my energy, good choice of talks and speakers for the last day.

Evening

Explored The Pearl district. Lots of buzz, posh bars, not so posh bars and restaurants. For those who know Vancouver, BC it is like a more lively version of Yaletown.

MapPizza

Friday

I went home after buying more books from Powells and some DocMartins..

BridgeBlue sky

Thoughts and suggestions for next conference

This was a really good conference, with the exception of wifi access. The venue was really good with lots of space to either hide, code or meet people. The food was good everyday, very impressive for 1500 people .There were lots of amazing talks and a friendly crowd. I am very grateful that I won a scholarship to attend.  I wish to thank Sam, Miles, Chuck and Marty for making this such a great conference experience 🙂

These are just suggestions that may make it even better:

  1. Have a day before the conference start, that is for beginners and newbies a bunch of workshops to get people up and running on rails an understand the basics.  Anyone can attend or not.
  2. Ask every presenter to tag their presentation with Beginner, Intermediate and Advanced and maybe also type e.g. overview, into code, workshop. Allowing the attendees to choose smarter. Even give the option for speakers to give 20 second videos that state what they will talk about.
  3. Have a local server with all the code needed for workshops, assume that the ISP will not provide, have plan B
  4. Have a list of presentation mentors, who can support the building of presentations both for main conference and lightning talks
  5. Have some advanced talks which they are presented on the web pre conference and the actual conference sessions get deeper or have debates..
  6. Make fruit available through out the whole day, better to be fruit powered then fat sugar things
  7. Give the opportunity for people to vote pre-confrence the sorts of talks that people would like to attend.
    This may encourage other speakers who know it really well to step up,  it would also give you trends of types people coming and may encourage others who are starting to get to know rails.. and possibly even deciding if this is the language that we want to use.  It would also allow people to start interacting prior to conference, maybe even setup lunchtime or dinner meet ups to talk about topics that will not be covered on the big stage?
  8. Have some real advanced workshops that maybe take 3 hours to dive deep on something. We need to grow our experts to 🙂
  9. Have a system to rate or vote for best presentation at the conference.

What did I get out of this conference?

Some awesome new people in my life, a bunch of new people to pair program with, a better overview of rails and ruby, a bunch of things not to do with rails. In some ways I have a treasure map of Ruby on Rails now with parts in detail and big gapping holes.. but I am in a far better place then pre-confrence.

Made some friends in Portland and got to know this city a bit better, ate some great food, bought jeans (my last pair had holes worn on the knees, ankles and crotch), bought books and bought some awesome DocMartins. And the need to get some physical exercise!

Holes in knees, ankles and crotch

Holes in knees, ankles and crotch

I am super excited for the future 🙂

Last Thought

Straight from my cookie

Cookie

Other awesome posts for Railsconf 2013

Amazing visual notes  -> https://projeqt.com/jessabean/sketchnotes/4/l

Awesome notes -> https://gist.github.com/jianxioy/5498969

Top 7 learnings -> http://www.hitthebits.com/2013/05/railsconf-2013-highlights.html

Jobs advertised -> https://github.com/blairand/jobs