Railsconf 2015 – Being a human, Atlanta, Race and community

This is my third RailsConf, having attending them in Portland and Chicago.  I have found the Rails community as mostly open, people generally easy to ask questions off, and a good range of talks.  Railsconf are well organized conferences, they feel professional and evolve each year.

Rails conf

This year the courses seemed to concentrate between the beginner and the intermediate with occasional spikes into the advanced.  A lot of the course titles were a little abstract and thus encouraged you or discouraged you (depending how tired you were) from reading the actual description.

It was noticeable this year the number of women that attended (i.e. a larger number) and equally notable how few Blacks there were attending the conference.  There were a lot more talks about how software developers are human and soft skills.

The main thing I get from the conference is the people I meet, the conversations I have, the things I learn from attendees.

Keynotes

I felt all four were really good and worth attending and worth watching when they become available.

DHH Rambled a bit, but got to a good point that Rails is a backpack to build a medium sized company like Github or Shopify.  He took on the criticism about Monolith architecture and termed the phrase Majestic Monolith and ‘integrated systems’. Again this created some great lunchtime and evening conversation.  We also talked about two features in development for Rails 5 Turbolinks 3 and Active Cable. His talk.

Sarah Chipps talked about her journey.  I love that she gave up part of her talk time to some students and their journey to coding and drones.

Aaron Patterson did his usually trolling and then talked about the areas he is now working on – some great stuff on controller and integration tests. I love that he walks us through the process, I learn each time he does. His talk.

Kent Beck did an amazing talk about what he had learned over the last 10 years about how to be a developer at “ease”, not lazy but productive, challenged and accountable. His talk.

The Confreaks railsconf 2015 youtube channel has these talks in them. And they have their own list of talks here.

Talks

I found that day two and day three had more topics I was interested in. Here are some of my favourites:

1795499_10155456889030545_4691949337144728183_n

I heard some good things about:

New things at the conference

Rails core team

Each year the conference improves :-) I am impressed with how well organized overall the conference is for a non-profit organization relying on volunteers.

  • The theming of topics was really good and helped participants navigate talks
  • The Rails core team talk was very informative
  • Having many big boards with schedule on, was great
  • Having a mobile app was very useful
  • I think the notice board was a lot bigger
  • Lightning talks had a lot of talkers
  • Separate page for sponsored parties.  It would be good to have this one page for all the after parties.  Often they get booked really quickly but only the people in the know.

11188303_10155456889290545_2428863269288886589_n

11169786_10155456889405545_5336339072540946363_n

Old Things and still good

Scholarship

Railsconf has a scholarship scheme which gives free tickets to a number of people who are coming to the conference for the first time and might otherwise be able to.  I love this.  I was a scholar in my first year and have being a guide in the last two.  I think Ruby Central is awesome to provide this.Lightning talks list

Lightning Talks

Are a great way for people to try out presenting or were not able to be fitted onto the whole schedule.  I would suggest moving this to a morning, they are good but often get tagged on the end of the day and maybe a little tired.

Guide

This was very useful with both the schedule and the map. Meet the team is a nice touch, maybe add what role they are playing at the conference.

Labs

I loved this, I feel having more would be great, I suppose I miss the fourth day!

Venue – The Mart

Of the three RailsConfs I have attended, this year there was either a lot of noise pollution (e.g. Bang Bang, or the equivalent to a freight train going over your head).  In the main room there was a lot of echo, if you managed to avoid the really big pillars.  In the smaller rooms, there were several issues with the projectors not being powerful to counter the lights and no one knew how to turn the lights down. All of that said this was the best WIFI hands down.

Sorry this was not a great venue.

many people

Food

The first lunch was a little light. The second and third lunches were really good. The snacks were all gone by the time I got there, though there was fruit :-)

Was it worth the trip?

Conferences are essentially a social experience, as most of the videos/decks appear online, thus the most valuable part is the people I meet at conferences. I wonder what the future of conferences is, with all the content being streamed, will they become totally virtual or in fact will they become more social.  The problem with big conferences is that you can get comfortable with sticking with your team or people you know and not meet new people. For me this is what I get:

  • I meet new peers and mentors
  • Discover new perspectives
  • Discover how others solved a similar problem
  • Share what I know and become a useful part of the community
  • I can ask questions in talks to clarify my understanding
  • Sometimes a talk will teach you something new, or you learn to communicate something complex in a new way or you realize that you know this topic.
  • Find people you want to work with
  • It was not my favourite year for talks

But I am an extrovert, I will actively introduce myself to a lot of people.  That said it tires me out!

This year I sent three people and myself (from Vancouver, BC). There were some great talks, but more average talks then I had seen in the past. I feel the social aspect is one of the areas we could evolve and make the conference even better. It is also what I think will keep bringing people back. For the social members of my team the conference was good, for non social the talks were not compelling enough on their own this year, in part due to the level of expertise and in some cases because of venue distractions during the presentations.

Team

Ideas for next year

Its not just our code base that needs to evolve and grow, the conference does to, here are some thoughts/ideas/suggestions that may improve the experience.

1. Making the conference more social

You can see all the talks online, why attend if not for the social aspects?

  • Publish the attendance list. As people register, ask them Name, Company, Title, length of time coding, and what they want to get out of the conference.
  • I suggested a couple things last year in my rails 2014 blog and rails 2013 blog 
2. Upping the quality of the talks
  • Coaching for first time talkers, from communication experts, education experts and experienced presenters (I will volunteer for this)
  • Learning style guide – help speakers think through the styles to make easier for all to absorb
  • Feedback for each talk by participants to be fed to the speaker, this would be great in mobile app
  • Room instructions – How do I turn lights down/up, who fixes the projector
  • Pretest room for computers and projectors
  • Hands on masterclasses and workshops with very experienced people like Metz and DHH
3. Interview DHH

This would be even more fun if it was Aaron Paterson who did it..

4. Grow the conference committee to include people who have sole responsible for:

Scholars champion – Have a person own this and evolve it each year. Make sure there is a table that scholars can go to and make sure they have space to see the keynotes, check on the beginners track to ensure the content is actually beginner friendly.

Connections champion – Work in ways to help other newbies/lone travellers meet others. Be the person who can introduce people to other people.

Presenter Experts Volunteer Pool – Ask the community to apply to help out first timer presenters and those that would like a sanity check pre-conference and in-confrence.

5. A non interruption space and a “singles” want to meet people space

Most of us occasionally need to work/code get shit done.  Maybe we could have a space when we have power and can code without interruption or sound sshhh. And then another space where I will code/play/experiment but happy to be meet people, in fact please interrupt me. Its kind of like a singles bars, in that it is easier to approach people, making it a bit easier for all.  You could have board with I would love to speak to people about x and here is my twitter handle (in case I am not in the room at the time you step in).

Atlanta

Great food and calming accent.  I also visited Martin Luther King jr. centre and Human Rights Centre were emotionally overwhelming as well as educational.

Race

Martin Luther King jr.

There was a stark contrast between the Race of the attendees of the conference a lot of white and some others, against all of the people who served the food and drink who were Black.

Rosa Parks

As a community I think we are welcoming.  Bootcamps seem to help those with money.  Ruby Central offers scholarships (reduced ticket price to free) for all minorities and those with little money, which is awesome.

I feel the lack of certain communities in software development is not just a Rails/Ruby problem, but wider.  I wonder what we can do as a wider community to add more to our diversity? We are after all in the hometown of Martin Luther King, Jr. Is it an issue of poverty, education, role models or something else. How do we make it better? If there is a software community that could consider this and maybe make it better – I think it is the Rails community…

Roles people play

Leading software engineers

A friend (non technical) recently asked me how I lead my dev team, he had led product and marketing before, so I attempt to focus on the differences, that said good team leadership has commonality with all disciplines.

I currently have three software engineers and one product designer (3 female and one male).  In the past I have led 23 teams. I will use this blog for my team to hold me to account :-)

Casting Workbook Team

No Surprises

Being accountable for “no surprises” is the core. Where ever possible you should be accountable for all of the people that you work with, people should not be surprised because you have already asked their opinion, maybe even evolved your thinking.  It means more communication and more interaction with your people. It means stepping outside of your “assigned” responsibility and forming relationships with all parts of your organization, and other organizations. Its about being connected, its about being a leader and a follower.

Being a Leader of context

The role you take on should change depending on the context.  Sometimes you are the coach, sometimes the mentor, sometimes the friend, sometimes a psychologist, sometimes the engineer, sometimes the product owner, sometimes the user advocate, sometimes the engineer advocate, sometimes the leadership context, sometimes the inspirer, sometimes the critic..  There are different leadership styles and yours should adapt.  In 2003, prior to my MBA this book really helped me step up The New Leaders: Transforming The Art Of Leadership Into The Science Of Results

Different places/ways to work

People are generally smarter/productive longer, when they can have different types of environments to work in.  Have multiple places that engineer can work in.  When I recruited my current team, I got the organization on board with the following:

  • Give the engineer a laptop
  • Have somewhere comfortable to work e.g. sofa, kitchen
  • Have somewhere serious/quiet with extra screen
  • Have somewhere they can stand up and code
  • Have somewhere outside if possible, natural light/fresh air is a great refresher
  • Make it possible to work remotely

This is a good book if you want to really consider your culture and the way you work. The Best Place to Work: The Art and Science of Creating an Extraordinary Workplace.  Without doubt you should ask each member what helps them concentrate, what distracts them, what they need to stay in the zone.  The obvious big one for many is a good set of headphones.

Leave chunks of time to code

Engineers are generally more efficient if given chunks of time to code.  Thus have your meetings meetings near mornings or lunchtime.  To give several hours of interrupted research/code time.

  • Get engineers to block out their time on their calendars, so product/founders can book time when needed.
  • Use an IM system to ask questions such as Slack or Skype during those chunks of time and do not expect a quick response.

Being a good human being

This means understanding each others needs and wants. Expectations both from the lead and engineer should not be hidden.  Both people should be able to be vulnerable with each other and trust each other.  You both need to avoid surprises.   This is done through good communication, which is not common and takes effort. This needs time together.

  • Feedback in the moment, always ask permission before giving feedback and make it about the behaviour you saw.  Do not assume intent, in fact assume positive intent. Give positive and negative feedback. Understand how each member likes to receive feedback.
  • Weekly One to One checkins 10-30 mins, any fire issues? any smoking issues?
  • Monthly sit down at least one hour.  I have a list of questions to always go through, which we agree when we start together.
  • Allow others to lead, giving opportunities to members of your team to lead on a project/task whatever you do not need to be the boss of everything.
Question set for monthly
 
First conversation should be to agree the questions, here is a starting set.  They should based around the culture we wish to create and how we want to treat our people
  1. How are you feeling? Any hot issues we should talk about?
  2. How are you contributing to the company and your team?
  3. Are you a Team player? How are you involving others in your process?
  4. How are you growing/learning? Are we are helping your reach potential? Do you have mastery?
  5. What are your Technical Capabilities here? Where do you feel competent? 
  6. How are you helping the company grow and evolve?
  7. Are you Hungry? How productive are you? Are you taking inspired action?
  8. Do you have a friend here?
  9. Do you have a mentor or coach in the company? Are you coaching others?
  10. Do you want stay with the team and the company?
  11. What can can we do better as an employer/me as your leader/CEO?
  12. Do you feel you have Autonomy? Are there things stopping you doing your job?
  13. Do you feel you have Purpose? Do you understand what we are building and why?
  14. Are you contributing to the wider community? What can we do to help?

Your processes and system should evolve.

The way you do things should be Agile (as originally intended i.e. flexible and evolve).  Agree a workflow together from product to engineer.  It should change and evolve to be right for the context.

  • When starting with a team, I will audit all current systems and ask for each members views privately on each tool/system/process, to ensure the less confident or shy people get their say too.
  • I will then have a team meeting to review what we need and what we like
  • Any team wide system change should involve all parties
  • Deadlines should have engineer involvement and not be dictated downwards

For example in my latest team we discussed the tools we wanted and we decided to use

  • Slack for IM
  • BaseCamp for idealization and research
  • Github for product/features/user stories and code/issue management – The way we used tags evolved several times.

Freedom to solve the actual problem

Sometimes Product/founders/Engineering leads may try to solve the problem in their way.  Giving the engineer the “code monkey” role of just coding to a very prescribed way i.e. an exacting feature.  Giving no space, to actually problem solve can be very limiting and create an environment where creativity and innovation are stifled. Most humans do not like their freedom taken from them.  So find the the right balance between the organizations’ needs and the employees.

  • Give space for engineers to solve the problem in their way. If you ate really using Agile then you may evolve the story a couple times as users respond to the work.
  • Within the user stories/feature requirements do not limit.  Ensure you actual describe the problem you want solve, suggestion ideas/solutions but where possible do do dictate
  • Involve the team in talking about the features and discussing possible approaches, but the actual engineer who takes the feature gets to decide
  • Engineers should have some understanding of the customers. Ensure your engineers meet customers, and spend time with your Customer success/relations people.
  • Keep the engineer accountable for the response by users. Thus have good monitoring software and have a culture when engineer go back to check the real world implications of their work.

A culture of science

Scientists experiment many times and fail many times and one day they get it right.  Encourage a culture of learning from mistakes not teasing/persecution which means encouraging experimentation and forgiveness.

  • Discussion should be based on logic in reference to code
  • Create an environment where people can I say “I do not know.. but here is an idea/feeling/instinct”
  • Call people out if they tease others about their failures or use it to argue they case in a discussion
  • Careful to not let irrelevant aspects enter into the discussion such as gender, race, age or sexuality. I say careful because humour can involve these but they should not sway discussions and the receiving of the humour should not be hurt.

To build a team well, needs reflection and the teams involvement

The team needs time to connect as a team and evolve together as a team.  We have a book club where we talk about the teams performance in terms not related to code. How good are we at communicating:

  • Giving/receiving feedback
  • how do we react to others ideas?
  • who do we go to help us through problems?
  • who pair code with more often
  • How much do we know about each others strengths and weaknesses?
  • How vulnerable can we be with each other?

We used The Five Dysfunctions of a Team to kick start this conversation.  Every couple months we take time to talk about how a team we are in terms of communication.

 Ask your people how you are doing

“How am I doing?” should not be a hard question for you.  Ask it informally in your one to one monthlies and formally at least every 3 months.  The no surprise rule should be for all. It should be 360 your leaders, peers and your people.  Find out if people get what they want and what they need from you, in terms of communication, conflict/challenge, advice and performance.

Collaborating with your leader

Hopefully you chose your boss carefully when you were recruited into the organization.. but things evolve, so maybe that perfect person you went to work for, moved on.  I have found the best leaders are those who keeping growing i.e. they read about how to be a better leader, they can be vulnerable with you and you can talk openly.  When you make mistake your instinct is to tell your boss, when one of your team performs really well you never feel the need to take credit and generally you have no fear of your boss talking to your team.  If you do find the above hard, understand why.

  • Never underestimate the amount of time you will need for your leader
  • Know each others strengths, weaknesses and blind spots
  • Find those things you really enjoy about each other
  • Find those things that you find difficult and talk about them
  • Build strong relationships throughout the organization, ensure all find you approachable

Adding to the team

Whilst you as the lead will drive this process, you should involve the team in the process. You should ensure everyone is trained and good at the interview process.  This may mean mock interviews, where your team interview you. Its worth noting that you do not want more clones, you need different types of people, skillsets, who sometimes will clash, but have the communication skills and reasoning capacity to grow from each other.

  • Be clear what the team is missing and what you need
  • Agree on what you are looking for both terms of technical and personality
  • Ensure the all those that are interviewing try out their questions, again no surprises
  • Have space for something social
  • The best interviews are like a great chat amongst friends about something technical
  • Personally I hire on communications skills, problem solving skills, learning capability and then current technical skills.
  • I often look for potential as much as current craft capabilities.
  • I do not hire more of me, I want diversity

Software engineers are great problem solvers

Sometimes we box people into a role.  Humans are so much more than their job title and job description. Most people are capable of applying their skills in other domains.  You have a problem, why not ask a software engineer?


I will keep adding to this blog as I learn.

I will vote yes for the Mayors Transit plan

I will vote yes for the Mayors Transit plan for Vancouver, BC

As an elected councillor in my past I have seen how badly underfunded public transport hurts people both in the medium and long term. How it does immense damage to the vulnerable in our society. And how do we want to treat our environment? How clean do we want our air? Our populations are always growing, how many cars do we really need?

Newquay North, Cornwall County Council, UK, 2005

The road ahead

Should we have a better Transit System?

I would like Vancouver to become a better place for everyone. That people can get around easier without cars (e.g. children/elders, the vulnerable), that they can choose jobs/schools further afield, that they can explore more of Vancouver and discover “new” shops/businesses to become customers of. I would like to see a city that manages its carbon footprint better as it grows. A big step to ensure our future is smog free is to invest in our public transport infrastructure.

I have seen the impact of under investment in public transport. Rising house prices, congestion, more anger from traffic jams or the buses being full, the reduction in family time due to longer commutes, smog and the impact on businesses. People’s health (both physical and mental), finances and job satisfaction all take a middle and long term hit. It can be easy to fall into the trap of anger.

I remember when I lived in London, before they got congestion under control, my snot was often black.  After it went back to green and clear.

Why did the Mayors decide to fund it this way

You pay your taxes, you pay for your monthly bus pass. And then the bus you rely on is late, or is full, and you miss an important meeting or you’re late to a friend’s birthday. The anger and the disappointment have lead us to resentment, and it is clouding or judgment in this matter. We have to find it within ourselves to move past the anger and to forgive. Only once we’ve forgiven can we begin to see the solutions, and begin to part of the solution. Don’t simply look at this campaign as voting to part with your money. The mayors council looked at a bunch of different ways to fund it and all but one mayor agreed 22 out of 23, as this every happened before?  The summary and the detail – Look at Appendix F

We live in a community to help each other not just ourselves

Whilst I appreciate that my tax dollars are going into this project, I will not wholly benefit myself as I live downtown and walk 30/40 mins to work. Even though I do not care to ride a bike (as I prefer to walk), I appreciate the need for them – they give us the option to be car free. Community is not just about my personal needs, it is also about how kind thoughtful I am, my willingness to share and collaborate with all. And most importantly, don’t simply think of improving your situation. Remember the elderly person down the street who needs Handydart, and how a line to UBC would improve the state for students. It is the glue of our society and our community.

Should we have had a vote?

I agree that this should have being decided by politicians. But with the HST popular vote, we now have a well funded anti-tax, anti-government campaign that will plague every decision and ask for a refer on everything now. Many of the decisions “blamed” on Translink were actually decided by politicians at the Provincial level.  While I will vote yes, I will also be looking for new politicians in the next provincial elections that will make the right decisions for our future and some will not be popular.

http://policyoptions.irpp.org/2015/03/19/metro-vancouvers-transit-referendum-is-a-political-disgrace/

Has Translink being Audited?

Yes.

Three years ago the province responded by auditing TransLink to find efficiencies.  That 2012 audit identified $41m in potential savings. Which is great. Over the previous two years, TransLink themselves had already found $98m in internal savings. That’s $139m in total savings over 3-4 years.That doesn’t sound like rampant mismanagement to me. That sounds like an organization actively trying to save public tax dollars. And succeeding. Despite all that, none of those savings was enough to fund future growth.

http://www.fin.gov.bc.ca/ocg/ias/pdf_docs/Review_of_TransLink_2012.pdf

Who is actually delivering the Compass Card?

For example for the Compass Card TransLink contracts out installation, maintenance, and daily operation of the system to San Diego based Cubic Transportation Systems. This company was chosen by Provincial politicians, not Translink and why not they implemented the Oyster card in London, UK. The delay and extra cost is focus on the type of system i.e. double tap, one tap is ready to go, the double tap is not. The most detail I could find was the technology on buses is not able to cope with the demand that may occur.

“From my knowledge the system runs on Windows CE and there are no issues with that as far as I’m concerned, as long as it’s the newest and most updated system,” he said. “But what is more likely the culprit is the local telecommunications system that the [mobile card readers] are operated on. Our wireless network can be unreliable and even spotty particularly with data.”

TransLink might abandon Compass Card’s ‘tap-out’ on buses due to glitch

This is definitely a problem. Vancouver is not alone in seeing this type of project overrun, most seem overrun by years.

“The fare gates were imposed on TransLink by then Transportation Minister Kevin Falcon and [then Premier] Gordon Campbell and they did that through an unelected, unaccountable board that they also imposed on TransLink,” said NDP TransLink critic George Heyman. “So that’s where I lay the blame for the fare gates and the Compass Cards.”

http://globalnews.ca/news/1886363/idle-skytrain-fare-gates-held-up-as-example-of-translink-ineptitude-by-critics/

In the end it seems that Cubic Transportation Systems over promised what they could deliver. And then they hired a lobbyist.

How does Translink compare to other transit authorities?

Peer Review by shows T as one of the most efficient authorities.

Transit referendum: Is TransLink really wasting taxpayers’ money?

How well funded is Translink?

Translink has being deeply underfunded for a while now.

Metro Vancouver’s proposed transit improvements will cost an estimated $7.5 billion over 10 years. It’s money TransLink doesn’t have; the corporation is already $5 billion in debt and barely meets its annual operating costs with existing fares and various tax-funded mechanisms.

This reminds me that as a citizen of Vancouver and of BC, to pay attention to politics both at the city and provincial level. To not trust the “facts” delivered by angry bloggers, who have no accountability, and instead to listen and to research, to discover if their comments are true or false. It is important for us to look at how Translink is held accountable, how it grows and learns both from its customers, its employees and the “Governments”. How it learns from other cities successes and failures. All of that said you cannot expect an underfunded organization to always perform well.

Innovation means getting somethings wrong

I believe that Translink is not perfect, as no human organization is. Destroying an organization ignores the fact that we as humans can learn from our mistakes, and organization are no different. Many of us have relied on the forgiveness from “our bosses” when we got wrong, to not be fired and instead to learn from our mistakes and grow. As citizens we are the boss of our public transport infrastructure. And the best “bosses” allow us for experimentation and innovation — which always comes with the risk to get it wrong. The worse bosses stay angry and persecute us for past transgressions that have now being corrected. Innovation is key to our survival and future and if we kill it with anger and mistrust, we will fail as a human race. Either way the Translink CEO was fired, how much more revenge needs to be taken?

Becoming part of the solution

I have applied to be on the Citizen Council for Transport because I want to do my part. Whether I succeed or fail I am becoming better informed! I have hope for Vancouver to become a better city as it grows. Going forward, I will pay better attention to those that serve us. I am one of those crazy people who still says thank you to the bus driver when I get off, because I appreciate the human that serves us — whether it be the bus driver, the union that protects their rights or Translink who manages our infrastructure.  All three have had to do this in an environment that is underfunded and not ready for the future, because citizens have not been doing their part.

It’s time to change this and think/reflect/imagine the city we want.. become solution providers rather than just armchair critics.

UPDATE:

Holy shit smile emoticon They said yes!
“Thank you for your application for appointment to the Active Transportation Policy Council.
At its In Camera meeting on March 3, 2015. Vancouver City Council appointed you to the Active Transportation Policy Council, for a term to commence immediately and end February 28, 2017. ”
Looking forward to it smile emoticon

Articles that I found useful:

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

My first vote in Canada

For my first vote in Canada (I became a Canadian Citizen this summer) I spent much time researching the political parties, their records and their personalities. Including watching a city council meeting and attending one of the debates.

Still it was really hard to see the difference between the Vision party and the NPA. I found both the websites unhelpful in understanding the parties and how they differed.

The current Mayor Mr Robertson (Vision) and Kirk LaPointe (NPA) seemed to agree with each other on most topics.

It took a little digging into the councils minutes to get some feeling for the local politics. The campaign started to help, but it was the local newspapers that really did the work to show the differences. The debates also helped, in showing the temperaments of the mayoral candidates.

In this election, Vancouver City 2014 (BC, Canada) I voted for Vision across the board. I was disappointed that we are still using an ancient voting system (first past the post) rather than a modern transferable voting system. Splitting your votes across parties generally leads to weak indecisive government, unless they have experience working in a coalition. Thus I did not do it. It appeared to be a campaign that seemed to be a two horse race between Vision and NPA.

Vision had enough of the left of center perspectives without dismissing the liberal concerns. Robertson has also worked hard to get know part of the Startup Community, which I am a member, though I have never met him. He is also outspoken on protecting those less fortunate in life.

I really appreciated the profiles that the Vancouver Sun did on the two mayoral candidates – Robertson and LaPointe.

I did not appreciate the attack ads that the Vision campaign ran on Kirk LaPointe, they were tacky. They attacked the person not the party (in his case NPA). This made me pause to think about if I wanted to vote for any Vision candidates.  There are smarter ways to run a campaign and stay respectable.

After running 110 election campaigns (Liberal Democrats and NUS) I never resorted to personal attacks. OK maybe I did when I was immature. Yes, I know negative campaign works. And sometimes the media likes to add a certain “flair” to their words to get the attention of potential readers.

So, do we not have to become smarter, wiser and better. How we do things is important. Maybe I am being too idealistic, some campaigns may need it, I am not sure this one did. In fairness I am without all the facts, the polling data, etc. Is it better to lose and stick with principles?

Having been elected to public office (County Councillor for Newquay North, UK, 2005) and had the honour of a cabinet position (Community & Culture) my opposition taught me many things. The need for scrutiny, really listening, debating points of policy, forgiving others, strategy, how to be the better person when you lost and yes how to run better campaigns.

County Councillors 2005 - 2008

Cornwall County Councillors 2005 – 2008 – UK

I am a better man for both my party and the non party members of Cornwall County Council (2005 – 2008). Some would call the non party members opposition but after six months I did not view it like this. I saw them as opportunities to be better, and thus I worked at getting all involved in the decision making, made scrutiny of my work easier, taking the time to actually understand their needs and always having an open door policy to all. Also appreciating that you often have two relationships with other politicians, the public and private. As a Liberal I feel I have the responsibility to be open minded, listen and understand first before making my decision. Even when it is difficult to hear, freedom of speech.

Here I will say it, strong opposition makes a government stronger. As long as the agenda is to do the best for the residents not the political party. Which frankly is sometimes as long as half your term of office, if you are lucky. Critical reviews can be helpful and harmful depending on the agenda.

Having a Mayor like Mr Robertson who has strongly held beliefs on the environment may find it harder to get funds they need for infrastructure projects, quickly. But they are more likely to create a city that I want to live in and interact with my communities. Those who invest in the Parks, Communities and Culture, create an environment to de-stress, meet random people and form more community and ideas. This translates into less single people, greater entrepreneurship and more collaborative community. We all hide too much in our places of living or in our circles of friends and family. Do we want an inclusive culture and community or do we want differences to divide us? Thus I also voted to give the council ability to get and spend fund on all three areas.

Having a bureaucrat, which is how I saw Kirk LaPointe, may have been more successful at getting more funds and more businesses into Vancouver. But is that the kind of the city I want to live in? And whilst I liked Kirk LaPoint (yes I have met him many years ago and liked him) I did not wholly trust NPA, it felt they cared more for business than the community. Vision clearly needs to do a better job of being open minded as it felt they dropped a candidate because she worked in sexual health. Of course no party is perfect, but at least there is some process to vet the candidate before.

A balance with the community and environment matters to me. A balance between business and environment. After all we need jobs but not at the cost of the only planet we live on. And I am happy to pay tax, to protect the vulnerable, provide a safety net for all of us when shit happens and give education opportunities to allow us all to climb the ladder. And if we kill the planet we are dead, both physically and spiritually.

Who else should stand up for Vancouver and it’s beliefs if not the Mayor? Thus I went with passionate advocate not the bureaucrat.

P.S. Now I have to work out which way to go between Liberals and NPD for Provincials and Federal.

Things I need to understand better:

There are a couple areas I need to become more knowledgable in and make better decisions on who I vote for. I know how these issues are tackled in the UK but I am still learning how they are in Canada.

Density

Some very smart people state that for future our cities they will have to become more dense. These smart people often live in very big houses outside of these dense zones. Apartments that are built today are small.  Their kitchens encourage eating out and not cooking at home, with local foods. They do not encourage eating at a table and the sharing of food.  I wonder if this is why coffee shops are so full of people, because their apartments are so small.

Apartment blocks are often built so that you can completely ignore all humans around you. I do not have a problem of sharing space with other humans, but we all need space the current trends are worrying.  This is partly related to our green spaces in Vancouver, we need to keep a balance, we all do not have cars and log cabins in the country.

House Prices

I feel developers/estate agents are making so much money, and in the process are creating the largest social divide in our society.  Affordable housing is often a box with with a smaller box extension. More and more people are being excluded from the opportunity to buy in Vancouver.

Freedom of Information

This is a must especially with all the above worries. I heard criticisms towards The Vision team, I will have to explore this further.

Public Transport

We need more public transport and less cars. Whilst I prefer to walk rather than I bike, I feel the journey for more bike lanes is a good thing.

Homelessness

I feel there are many threads here, essentially how are we helping vulnerable people in a sustainable way and how are we helping people become independent again (if possible). I realise this issue is not simply about a place to live, but sometimes can be about how we treat mental health in our society.

Is ageism a lazy form of decision making?

Ageism is often used in reference to what some people think about older people. I have seen ageism used to undermine the opinions and thoughts of younger people.

I think what I have learned is that perception of someones age has some strong prejudice and assumptions that come with it. That these undermine people when they need not. That by treating someone with more or less respect due to their age can often blind you.

together we are stronger

Friends

My friend circle varies massively in age range with my oldest friend being 35 years older then me and my youngest 23 years younger.  Interestingly I find younger people more prejudice than older for  relationships. Personally I like a good mix of friends who we can have fun, conversation and trust.  Having friends from very different backgrounds, helps me to have greater perspective of the actual world.

Dating

Dating sites encourage age discrimination, with Tinder/POF/okCupid (not eHarmony) having it as priority information. Age seems an easy category to filter on, but like looks it’s not a good predictor of chemistry or how you feel with someone. What little I know of relationships is you need to be a partners (that control and guidance should be shared by both), grow together and respect each other. Also I have found that some people are more concerned how others think i.e. he looks too old for her or vice versa than anything inside the actual relationship. We are sometimes concerned with one taking advantage of the other.  The question really is what is equal? No doubt a journey travelled together is more powerful and sharing the different perspectives of your different experiences is more powerful.

Being younger in work

My experience in my twenties was there was a lot of assumption by older people about what I did and did not know.  I found myself looking older to be heard.  I had a goatee for a long time to and dressed to look older, it made a huge difference in the reception of my thoughts.  I also found that adults/leaders/managers would not include the why when they were doing something and just tell us what and sometimes how. I felt like a child and I did not like it, in fact it made me more rebellious. And in part I gave up sharing my best ideas. The best leaders who would explain the why would get best of me.

Life Stage

Our Life Stage can sometimes be mistaken for ageism, for example couples tend to hang with couples, couples with kids hang with couples with kids.  Whilst this is not always true, there is something in it.  One potential employer asked me because you have a child will you be able to truly commit to this job. I just left the interview, and I don’t have a child!

Being Older in work

Now as an older person occasionally I have been asked if I have too much responsibility or have the energy to really commit to a job i.e. stay late on a regualry basis.  The energy one is something I have seen both to me and others (if you know me you know I have more energy then the average 16 year old).  In fact it has increased the older I get (hangovers however last longer then they should)! Medical science is also improving the quality of our lives, which is good because most of us will not be able to afford to actually retire. One employer asked me because I was older would I be able to keep up with the younger employers?  I asked him what he actually meant, he said are you hungry enough to work long hours?  It felt like he liked to take advantage of people.  I have always worked long hours.  Six months ago I worked for two years seven days a week.. My age had nothing to do with it.

It’s assumed that if you’ve made it to a certain level, you must be over a certain age and have advanced credentials (Eg. A master’s degree). Assumption makes an arse out of me and you.

Startup and Techs

When I go to startup pitches I find the Angels (Investors) tend to favour young men. There is a combination of sexism and ageism going on here.  And there is a mythology that all successful startups are built by young people, which is not supported by any science but appears to be the “view”. This article digs into this.

Mark Zuckerberg apparently said that people under 30 are smarter.  Another article explored The Brutal Ageism of Tech. One practice of hiding jobs behind Recent Graduates is explored here.  There appears to be a view that people over 50 should not be in leadership jobs.

Rising above ageism

I want to be better than my past experience, I want to evolve not enforce a stupid prejudice. So here are my suggestions to myself:

Never ask someone their age

Do not judge someone by their age.  It is lazy, get to know them first. Attitude may be effected by your age but is not dictated by it. Just because you started with same (or opposite) political view as your parents does not mean you keep them.  Its experiences not age that will determine what they become.

Talk to all like an adult

Take the time to explain why, treat all like equals and invest in a person. Treat others as you wish to be treated.

Ideas should be valued regardless of age

A great idea can come from experience but also from lack of experience. Understanding the idea is more important than making assumptions of what I perceive it to be or who delivers it. Ideas are always fragile, so grow it see where it takes you before dismissing it.

Actual experiences is more important than age

Wisdom I feel comes from experience more the bad ones than the good ones. Own your experiences, they maybe apply to others. That said, experiences can also limit us, sometimes you need to prove there is more to explore.

Age does not relate to capability

There are now more ways to learn, than ever before.  And its not just knowledge, There is more shared wisdom in the world. Take this article on reaching 40 and what you realize. Just look at TED.COM or the number of self help books. Money does not always determine access to knowledge. And teaching has become better so we can all learn faster. In fact I would say that two things can show this how well read a person or how many “good” videos (ted.com) or video subscriptions a person follows e.g. RubyTapas. All of that said getting fit right is often more important than current capability.

Age does effect health but not energy or drive

That said, it can be severally muted with a good diet and exercise.  When I was younger I took my health for granted.  As I got older I appreciated my body more, learned more and in some ways I am fitter now than at any other time of my life.

What thoughts or experiences do you have?

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.

 

 

Hacking Health – Gaining a suntan in Whitehorse, Yukon whilst coding

I headed to Whitehorse, Yukon, Canada to spend the weekend at a HackingHealth weekend. It was an amazing weekend because of the people, the event was interesting but the people I travelled with,  those who I met from the Yukon and the health professionals who shared their lives were awesome.  This will not be the last time I spend time in the Yukon :-)

Most of the event was tracked pretty well on twitter #hhnorth14

Yukon

Finding developers

Alex Greenhill asked if I would be interested and if I could get 6 other developers, the event would cover the hotel and flights.  I advertised on all my social media and the ruby meetup group, django meetup group, Node.JS meetup group. Meetup.com only allows you send messages on 3 separate groups per day, new learning. On a side note it was interesting to see how each meetup group had their pages setup, some had admin needed to forward email, some had a group email and some had a separate discussion groups, with threads.

Anyways during the course of a day I had 40 people respond and another 20 over the weekend. First come, first served, and only those with full web stack and/or Android/IOS skills.

Early ideas

There was a Sparkboard platform which was a great introduction to ideas (Built by Matt Huebert in Node.JS).  Here is this events collection.

Vancouver Team is set

 Friday – Meeting the team

Vancouver HackingHealth Team

We were a real mix of personalities and backgrounds. Amazing bunch of people.

The Yukon hospitality really was evident from the beginning, we were picked up from the airport shown and around and dropped off at the Hotel. It was hot here, I needed my shorts and suntan lotion!

The Venue – Kwanlin Dun Cultural Centre

It was an awesome venue, big place, big kitchen and you step outside and it was so peaceful.

Kwanlin Dun Cultural Centre

The teams and ideas

All the ideas were given 60 seconds to pitch their idea. And then everyone talked to people, to discover which team to work with.

I had some great conversations with doctors, nurses, social workers and other technologists. I learned so much about Health in Canada but also about health in the Yukon.  And it did not stop there I learned a lot from a social worker there about the local issues, culture and their specific problems.

Brooklyn and I noticed that health discovery was mentioned in a number of projects, so we felt that if we abstracted this problems we could in theory support all three of those projects.  We decided from the gecko our purpose, we wanted to build something that help others build out their software quicker.  Hopefully allowing participants at Hacking Health to build something greater.

Food
So a lot of the food was made in the next door kitchen by volunteers.  It was a good variety of health food and there was often vegetables and fruit available through out the day. Some of the food was made by the Alpine Bakery, yum, yum..

Whitehorse, I like it..

You know I love small towns, where people will look you in the eye and smile. When conversations are easy to start and continue. I suppose its the county in me, people that just enjoys people, and when we don’t we loose ourselves in nature.

Like seriously where else would you be invited to paragliding for day, join a family for dinner, go to a wedding, asked you want to go fishing, bought a couple rounds for drinks, get a bunch of invites to cabins to drink, where you would get a free guide to show you around — at Whitehorse, Yukon, Canada

Saturday – Day of coding and interviews

A lot of the day was spent coding, with breaks to interview different health professionals as they came in, about the health care system and the Yukon.

Interviews – Physician , Nurse, Patients and social workers

Turnover is higher in remote areas, as people come for their “Northern Experience” and return. The work is very varied and you have less choice to specialize or not to do, work you do not like. The work can be “brutal” and its likely most of your work will be related to alcohol or drug addiction.  Everyone knows everyone so people notice if you go to a sexual clinic. People are not aware of what programs are available and awareness of new people takes times.  Most doctors are self employed and are paid for “fee for service” i.e. paid for appointments, that doctors are not paid for preventive care, thus they reword the appointments to get the patient what they need.  The Canada Health Act responded to doctors not taking enough appointments, but has created a situation where preventive is not valued and that doctors do not get paid for going to community meetings.  Building trust takes time with remote communities, turnover hurts more than in the cities.  People are often confused which service they should access.  A number of people stated they were often confused by language used by Doctors and what was on the websites.  It was mentioned a bunch of times it was not clear what services could actually offer.

Learning about life in the Yukon
Most business is done by phone not by email. Here there is no phone signal between towns. Most have blackberries if they have phones at all. WIFI is uncommon. There is no Rogers/Fido up here. There are a lot of cabins, with no power, or running water. Most cabins need wood stove to survive the winter.

Helicopter trip

During the day there was a fair with a helicopter ride.  It was a lot of fun.

Sunday – building the pitch

Health Geo was our pitch.  Saturday Brooklyn and I coded a lot. Sunday was split with me building a pitch and Brooklyn finishing off the basic funcationality.  By the end we had a working project which would allow you put in locations add information for each of those locations e.g. abilities, symptoms.  It took us longer then we suspected it would.  But we both know a lot more about location services now!  It was not pretty but with just a team of two it worked.

https://github.com/ericbrooke/healthgeo

There eight pitches left out of thirty ideas.  We each got three minutes of pitch and two minutes of Q & A.

Judges

Astronaut talk
David Saint-Jacques (@Astro_DavidS) spoke of his journey to almost become an astronaut and training he went through. I really enjoyed it and he came over with confidence and humality.  He later came out for food and drinks. A good guy.

Astronaut talk

Awards

Awards were given out to six of the eight pitches. You can see their spark board summaries here.

With a double award (Popular vote and Health Tech consultation award) going to voicemail for the homeless, using Twilio as their base technology – ReachMe led by Leigh Ayton, social worker .

  • “Yukon Baby” for winning the Design Consultation award, led by Chris Nayor MD
  • “COPD Action Plan” for winning the Bonnie Walker commercialization & consultation award, led by Bethan Davies, health professional
  • “RelievR” for winning the Outside the Cube consultation award, led by Jonah Marek MD
  • “3D-printed finger splint” for winning the Technology Services award led by Sam Fleming

Dinner and Drinks

After the work it was time for some fun. We got a space at the Klondike Rib & Salmon Barbecue, the food was great and the waitresses were sassy, one even took a sip of my drink to make sure it was ok :-) After we headed to join the organizers, volunteers and an astronaut to drink further.

Bison

 

Heading out of town we went to Andrew and Alyissa’s cabin for drinks and a campfire.  It never seems to get completely dark here. Thanks to Sam for driving us out and Jayden on the way back

IMG_0067_2

The Whitehorse team and community

I feel incredible grateful to had the opportunity to be a part of this. This event felt like no other Startup Weekend/Hackathon I had ever being to. It was clear people had put a lot on hold to get this event up and stay running. There were many stories of things falling through yet Ben Sanders and the team, kept it on track.  Ben, Andrew, Alyissia, Aarti, Shreya, Tina, Sam and all the others behind the scenes – Thank you :-) I wish had worked less and got to know the rest of the volunteers more.

Developer Retreats

I think Whitehorse would be a great place, where people come up for a couple months, working on their own a software project, maybe they could get a reduction on rent and food for working on local community projects. 

Hacking health volunteers and organizers

Suggestions for Hacking Health:

The event was fantastic, here are some ideas to build on the great work you are already doing.

  1. There should be a pre briefing about the local health/social issues.  This could be a Youtube video or it could be the first session where all can get involved. Either way this should be pre pitch.
  2. Judging panel should have one developer on it, this is a combination of technology and health after all.
  3. Create a list of all ideas at HackingHealth events and a list of all pitches given.  Sometimes ideas help others develop better ideas.  Also people with similar interests may find each other and starting building together outside of the actual events.
  4. It would also be great to have a quick reference guide to all the privacy limitations specific to the Province / Nation as Hacking Health is international  (Seth)
  5. Health like Education has the great potential to build lego blocks that other teams in the future could use. Encourage people to share and build for future hackathons. Most projects are too big to build alone. As developers we are often abstracting the problem, as we see common problems in different places, we are not limited by departments or silos, we look for the common problems and then common solutions. Most of the code used in one hackathon could help other hackatons build more, or even just copy and thus build complete solutions.  Encourage this behaviour and bigger things will happen.
  6. Jesshan and Matt you should tell your story on the About section of Hacking Health.

Monday – Getting out of Whitehorse and into the Yukon

Some of us stayed to enjoy more.  We took a short trip out of town to see mountains, desert and grizzlies. Thanks to Corin for the tour and Chris for driving..

Grizzilies

Carcross Desert

Feelings

Some places touch the heart, this is my attempt to describe it.

Whitehorse, Yukon

A moment in time, stillness

The sun down beat and I could hear the water

A bird called out and there was only the wind in trees

The view reminds you, of smallness of you

 

I turned around and there the humans be

Friendly, sassy and unafraid

They will look you in the eye and walk into your life

You walk into a bar and sit and you do not have to be alone long

 

Its not all pretty, you have to think ahead else nature will take you

There are few of the those fancy things that make you lazy

You trust in your people, your truck and dog

but that cellphone no work much

 

Whilst there is much light, the future is uncertain

There are many opinions of the road ahead

They agree, that there mountain be grey

But whether civilization should come on down, there are differences

 

This is a place to be close to nature, with light feet

A place to get shit done, to take a moment and reflect on the past and ahead

A place of good people, the practical, escapists and survivors

A place closer to the heart and a drink or few

 

railsconf 2014

Chicago

Overall I enjoyed this conference more than last year. I am now 15 months along my journey into Rails/Ruby.  I considered whether my enjoyment was because I understand a lot more rails and ruby, of course that is a part but not the only part, the people, the sessions and Chicago all made a contribution.

There were many amazing talks, good workshops and I met a lot of people.  I thought all of the keynotes added value to my thought process.  My favourite talks were from Sandi Metz, Sam livingston-Gray and Adam Cuppy.

I am adding all the resources I find to the bottom of this post, including photos I took of the job board.

You can find the keynotes here http://www.justin.tv/confreaks/videos and here is an amazing set of photos from railsconf https://www.flickr.com/photos/justingordon/sets/72157644405839722/

Be warned I will keep updating this page! Agile page production ;-)

Prequel – The day before

Getting to Chicago I flew in from Vancouver, BC.

Guide and scholar

Last year I was a scholar so I was given the opportunity to attend for free RailsConf 2013 because I was a student and a newbie to rails.  This year I wanted to help a scholar and be a guide.  This started the night before the conference starts where you are matched with your Scholar and you get to know each other.

After we headed to Howells and Hood, couple blocks away it had over 100 beers on tap.  Jeff (from enova, they are hiring) also bought us a couple rounds of drink and introduced us to enova the company he works for in Chicago.  The drink and debates were passionate, we talked about each others path to Rails, where juniors can get jobs, the things you should learn at the beginning of your career, tech interviews and who was employing juniors.

Day One – Tuesday

Breakfast, apparently the most important meal of the day. We found Yolks a good breakfast place which was located just a couple blocks away.  It had a great menu.  I ended up eating breakfast with a couple randoms and a team from (NextGear Capital).  I was impressed in the diversity of this tech team and they are on a hiring spree.

Yolks, Chicago

DHH keynote

I enjoyed the talk, he was passionate, direct and funny. I am also a believer in free and open speech, though there are topics that challenge this belief such as hateful on sexist/racist/homophophic. This talk was none of this but it did challenge the “common way of thinking”. I wonder if he opened too many fronts at the same time?

“The TDD experiment has failed, it just makes us all feel guilty, but tests are important but they do not have to come first”

I have to say I am happy when I see tests! They are not as common as we would like to think.  It makes it easier to understand, refactor and onboard new people. But DHH really was talking about the need to do it first and when done so could lead us down some architectural choices that are maybe to helpful for the overall plan. His analogy of guilt and diets in describing TDD was very good.

“We are software writers and only occasionally software engineers”

I like the analogy of being part software writer, it makes me consider more seriously the need to refactor your code.  When I write emails, I often get the main points together and then keep editing and deleting.  This comment made me reflect on not thinking of them as two separate “things”.  As someone at the beginning of their software career this was a helpful analogy as at this time I have written a lot more English than Ruby.

I also wonder if it makes access for women easier?  I read a good study – Breadth-Based Models of Women’s Underrepresentation in STEM Fields – An Integrative Commentary on Schmidt (2011) and Nye et al. (2012).

Relative strength of math and verbal abilities and interests drive science, technology, engineering, and math (STEM) career choices more than absolute math ability alone. Having one dominant aptitude (e.g., for mathematics) increases the likelihood of a strong self-concept in that domain and decreases the likelihood of equivocation about career choices in comparison with individuals with equivalent mathematical aptitude who have comparable strength in non-math areas. Males are more likely than females to have an asymmetrical cognitive profile of higher aptitude in math relative to verbal domains. Together, these two points suggest that the academic and career pursuits of high math ability males may be attributable to their narrower options among STEM fields, whereas females’ more symmetrical cognitive profile means their math and verbal interests compete in the formation of their ability self-concept and, hence, in their broader career choices.

My take away is we are in a competition, with other careers to encourage women to join us in software development.  If we are open to new ways to think about ourselves, this may or may not help.  Just a thought..

I wonder if this (the wider use of titles) is a good way to introduce different types of software builders into our community?  After all with all these bootcamps, new types of people will join our ecology, what will they have to teach us and how do we support them?

I think we need different type of software builders on the team and having at least one computer engineer/scientist is an essential  foundation. I should declare my undergrad was Computer Science. In my experience with teams, diversity is generally a good thing. Some of the best developers I have met do not have a background in Comp Sci degree, but instead have a Music degree. I also find teams with a mix in sex and culture are able to solve the bigger problems faster.

The better the readability/eloquence of our codebase will make on-boarding far easier for junior and senior alike. And if there are tests too, on-boarding becomes even easier!  We need the artists and the scientists. After all the ruby/rails community will have to include a lot more people to have a healthly ecology.

Simplifying Code: Monster to Elegant in N<5 steps by Tute Costa (@tutec)

This was a good workshop and started really well, working through five of the refactor patters.  I pair coded with my scholar. This was fun to help her understand more fully each of the steps. And in teaching you learn better ways to explain abstract concepts..

 http://www.slideshare.net/tutec/simplifying-code-monster-to-elegant-in-n-5-steps

Lunch

The hotel is right on the river/canal it was good to get some fresh air. I learned that Chicago dyes its water in the canals to get the green colour.

Ruby Coding Dojo by Carlos Souza and David Rogers

Here I stole a hour of this workshop (workshops covered the time of several sessions) before I headed for the next session which I wanted to see. The thesis was that practice was essential for software builders, just like it is for sports people and musicians.  That they spend more time practicing then actually doing.  They use the Dojo as a way to practice their code. Not too different from Ruby Koans idea, but they showed it as pair programming.  I like it :-)

Concerns, Decorators, Presenters, Service Objects, Helpers, Help Me Decide! by Justin Gordon (@railsonmaui)

I think he needed more time for this talk, this would have been a good workshop.  He gave a scenario and then a solution.  This was very helpful.  His notes are comprehensive and he has included all of his slides with a repro and a branch for each example.

https://github.com/justin808/fat-code-refactoring-techniques

Mutation Testing with Mutant by Erik Michaels-Ober (@sferik)

A good and clear talk. About the use of Mutant Gem which tests your tests

https://github.com/mbj/mutant

Keynote – Farrah Bostic

This was a funny talk about some of things we may have forgotten after a couple years as a developer. She believes that a customer-centric approach is essential to designing innovative products and services. I am paraphrasing some of her thoughts:

Professional obey the laws and amateurs break them

Be nice to one another, take the time to explain to other non-developers. Stay inclusive welcome people to your community. Do not become like the Java or PHP community.

Are we approaching a code inequality, where it is good for you to be a senior and me a novice? Is it a goal for me to keep you in a position as a novice

Structure inequality is a bad thing for our society. Inequality creates fear.

Technology is in a magical place.  But are we talking about good magic or the dark arts? Or people who will be tolerate of us muggles and be nice to us and not scare the hell out of us and this “evil” technology. The question I have for you is whose side are you on? The Dark or the Light?

Your opportunity is to become customer centric coders.

Keep the good intentions and match with good behaviour, this is what attracted me to the rails/ruby community

No empty read me docs

If community/team matters to you will be surprised by this talk http://www.justin.tv/confreaks/b/522183251

Dinner discussions

As often happens a random group of hungry people got together at the end of the day to eat. Our group was a mix of sex, companies and levels.  A number of the scholars(novices) asked why are there no junior roles advertised.  Comments included:

  • One senior asserted that he felt other seniors were scared of loosing their “prize” position of being able to claim high wages and move jobs easily if they wanted to.
  • Another felt Seniors are lazy and do not want to take on extra “human” work load, of coaching a junior.

It started a passionate debate which was good to hear. We talked about GitHub and is it sexist?  We of course we talked about DHHs talk.

Day two – Wednesday

Yolks 2

Yehuda Katz keynote

Why we abstract and reduce complexity

  • We are not unique, we want the same things, we tackle the same problems
  • Software development is not a science
  • Laws are not good things
  • We build on abstractions and makes us better
  • Shared solution, we build progresss
  • It’s all about managing complexity
  • These tools allow you avoid complexity
  • Start at level 23 rather then 6
  • Area of experimentation (new levels) are where the debates are had and then it will become part of shared solution
  • The higher stack the less complex work
  • Rails has succeeded in building our stack out, it has reduced the complexity, it allows us to concentrate on the business

Deploying Rails is easier than it looks by Ben Dixon (@TalkingQuickly)

This was a good introduction to deployment of a Rails stack to a VPS.  Ben has a book Reliably Deploying Rails Applications

His stack was:

  • NGinx – web server
  • Unicorn – app server – zero time downtime
  • PostgreSQL – database
  • monit – monitoring – its tiny
  • chef solo + knife(Server Provisioning)
  • capistrano 3(Deployment Automation) rake app

Reading Code Good by Saron Yitbarek (@saronyitbarek)

Form a reading club to regularly read ruby code.  Her presentation had great visuals and also a way to spend up your learning of Ruby.  Whilst her talk was aimed at novices and juniors.  “Book Clubs” are a very good way to explore management/leadership and frankly any topic.

Panel Discussion: The Future of Rails Jobs by Obie Fernandez and Panel

A couple statements from the panel:

  • Employees are more interested in the team, and product over money
  • If you are junior apply to any level of post, smart people match on personality and the ability to learn
  • Average pay for intermediate 80,000 to 90,000 US
  • Fear of too many bad skill levels due to boot camps

Tricks that Rails didn’t tell you about by Carlos Antonio da Silva

I did not go but heard good things

https://speakerdeck.com/carlosantoniodasilva/tricks-that-rails-didnt-tell-you-about-at-railsconf-2014

How to be a Better Junior Developer by Katherine Wu (@kwugirl)

This had some interesting perspectives about the approach you should take with the rest of the team. How to use your skills as a non developer to support the developer team.  But stay on target to become a developer.

Panel: Teaching the Next Great Developers by Noel Rappin

This looked at different perspectives of how we are currently educating the next generation of rails/ruby developers i.e. bootcamps.  It covered the lack of developers.

If supply does not meet demand, demand will go elsewhere.

This comment stuck me with and a couple stories were told about funded Startups unable to recruit rails developers choosing different stacks to build their “stuff”.  I have encountered this personally as Rails developers are too hard to find, a few companies have asked me would I consider learning Node.js.  I will have to explore this further. Jeff Casimir @j3 had some great comments:

If someone asks you to code on a whiteboard, ask them how to do I run tests?

If your company does not spend time bringing in junior/apprentice devs they are going to lose.

After there was much conversation of the Bootcamp phenomenon.  A good number of the Scholars for this years conference had come from Bootcamps some with lengths of 2 months others 3 months.  There were a good number of strong opinions of this phenomenon, I share a few of these here:

  • Some feel that bootcamps are producing a “novice” level of software developers, not yet junior
  • That some feel that these bootcamps reduce the quality of the rails community
  • That the bootcamps with a certain apprenticeship of least 3 months are the best
  • That some exaggerate their “employment” opportunities/success and it should be measured if the boot camper is still in their job 3, 6 and 12 months later.
  • That some bootcamps are filling up all the “junior” spots in companies leaving non-bootcamps juniors grasping for straws.
  • Some companies are cycling through 3 month apprenticeships
  • Some felt they could reduce the pay offings as they “flood” the market.
  • That the quality of bootcampers is very mixed
  • That bootcamps are bringing more women to our ecology
  • That with the standard tech interview most bootcampers fail due to lack of understanding of Algorithms, Data structures and use of Ruby.
  • That we build frameworks, to handle complexity, Rails should bring people in who should not need to be a computer scientist.
  • That they exist because the education institutes do not teach Rails/Rails, leaving the only option to learn with others being bootcamps.  With startups and business driving the demand for rails as a fast prototype framework.
  • Some felt it was a good thing and whilst painful for the community, we will evolve/adapt and it will help the community step up in numbers and mature.

Evening

Chicago Diner – Great vegan food.  No I am not a vegan, but this was the best meal I had this week. You should go!  Then we hunted down an Ice cream shop, Margies felt like going back to 1921, BIG helpings

Margies

Evening discussions

We talked about our journeys to rails this was interesting most had come from a different background i.e. not computer science. From the people I met at the conference about 50% were actually from a Comp Sci background (A good chuck had also dropped out).  Most told me one of the strongest reasons they choose Rails/Ruby was the community and how helpful they were.  The journey seemed to be Rails and then fall in love with Ruby.  We also talked about our worst tech interviews, wow I thought I had some interesting experiences.

Day Three – Thursday

Comedy in software – Baratunde Thurston (@baratunde)

Without a doubt the most humorous keynote and the message was do not make boring software, find ways to be unique and humorous with it. Use your error messages in a fun way. If you need a bunch of good laughs you should watch this keynote

Cultivatedwit.com

All the Little Things by Sandi Metz (@sandimetz)

Without a doubt the best talk at the conference.  Essentially she took a long IF/ELSE monster and converted it from procedure to real object oriented code.

  • Small methods are good
  • Refactor large if statements into case with methods
  • Tolerate duplication until you find the right abstraction
  • Squit test – look for bends and see types are near each other
  • Are you going to write procedures or trust objects?
  • Inheritance is good when it is, shallow and narrow and for leaf nodes
  • case is for business logic, not choosing classes.

https://speakerdeck.com/skmetz/all-the-little-things-railsconf

I need to read Sandi Metzs’ book she is also currently writing a Rails book, here is the keep me informed email page.

Pair programming with my scholar

She had a blog setup but could not get her CSS to work and was confused about the different stylesheets what they met and when to use them. And what are all these extra extensions are e.g. erg and scss. And she wanted to get bootstrap up and running. We covered

  • Assert pipeline
  • File name extensions
  • What is sass and setup up some variables for her colours
  • Quotes the difference between ‘ and “
  • Bootstrap
  • First bootstrap button

Let the drinking begin

Happy hour in the exhibit hall, this was good but lacking due to no seating.  Which just encouraged us to go to Code climate drinks :-)

Caipirinha

Day Four – friday

Taming Chaotic Specs: RSpec Design Patterns by Adam Cuppy (@codingzeal)

Frank this was an awesome workshop.  I learned a couple really good things from it.  A really backed room.

  • Pattern 1: start from minimal valid object (test to true)
  • Pattern 2: control values with ‘let()’
  • Pattern 3: Permutations using ‘context’
  • Pattern 4: Descriptive naming
  • Pattern 5: Extracting common behaviours

Pattern five was a real eye opener :-)

https://github.com/CodingZeal/skinny

Tales from the Crypt by Aaron Bedra, Justin Collins, and Matt Konda (@abedra @mkonda @presidentbeef)

This was sketch where the team walked through a bunch of security issues. I think I have to watch this one again on the video and take notes this time.

Cognitive Shortcuts: Models, Visualizations, Metaphors, and Other Lies by Sam Livingston-Gray(@geeksam)

http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

This was a beautiful talk.

Key note – Aaron Patterson (@tenderlove)

A homourous round off by Aaron, with some balance to DHHs’ talk. You need to watch both DHHs’ tale and Aarons’ to fully enjoy. His thrust was in part that we need science in our community. Concluding with his 3 years of work on Adequate Record essentially speeding up, by 3 times certain ActiveRecord queries. His last act was him merging/pushing his amazing work.

Conference Reflections

The conference was well run and organized. There was some great speakers, great debate and lots of awesome people. Thank you smile

  1. First day novice track– There should have a newbies/novices track i.e. next steps for boot campers on the first day.  Maybe with the 10 things from computer science you need to know, or how to use Active Record, or The 10 differences between a junior developer and intermediate, how to survive tech interviews.
  2. Get the community informed earlier – Maybe next year the rails conf team could state that they are interested in building a couple tracks and ask what “we” think should be in the track. Lets move the conference from waterfall to customer centric Agile ;-)
  3. Find out what we(the community) needs – Have a way to vote on topics, and then advertise them and take offers.  I think that either the way the rails conf team should get to decide, rather than a popularity vote, but new ways of engaging people in what topics and what workshops, I think would produce some interesting results.
  4. Level Tags – Hacking rails was delivered as a junior session.  Maybe it would be worth considering adding tags to each session stating the levels that will be covered. The Novices track without a doubt had greater percentage of woman in it.
  5. Keeping our community “good” – Maybe we should have a community track next year, if this is one of assets how can we keep it, evolve it and stay welcoming.
  6. Humour – It was really smart to have the humorous keynote on day three today, it gave me energy.  I am also going to build a resume, to help me find people I want to work with based on their humour.
  7. Food – The food, it was well, meh, with the exception of the last day. For snacks please consider nuts and fruit, less of the sugar crash afters.
  8. Space – Some of the smaller rooms, felt very packed and lacking of air.
  9. Jobs – A bigger jobs board and maybe one for people looking for jobs.

T – Shirts Competition

For those who have not being to railsconf, most of the companies in the exhibit hall stands have free t-shirts to give away.  They always run out of XL so there is a rush (unlike the gold rush). These are the T-shirts I would wear after railsconf.  I like them because the material is soft on my skin and the logo/text/pattern is interesting to non-developers and developers alike.  Those just with their company name are a FAIL.  I don’t mind advertising your company if it is comfortable and smart. New Relic = Datalution, Rackspace = Keep calm and code on, Sales Force = Achieve and of course railsconf :-)

IMG_1628

A weekend in Chicago

I stayed in a hostel (The Chicago Getaway Hostel), great place has a lot of events.  The first night I went on the pub crawl and met three other railsconf attendees who I had not met before. The next day I slept and coded and then onto another pub crawl and met still more railsconf attendees :-) Had a great Chicago pizza at Chicago Pizza and Oven Grinder Co

Chicago Pizza

Other resources for Railsconf 2014

The job market

The ruby job market

The job board

rails2014 - job board 1railsconf2014 - jobboard 2railsocnf2014 - jobboard 3

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:

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.

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.

Personally I like a mix, I use books (yes they are made of paper), videos (they are so many approaches that you should try a couple companies to see what works for you), and I have a couple people who I learn with.

A good book on this topic is Make It Stick

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. https://speakerdeck.com/nmeans/you-are-not-an-impostor. 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.  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 ;-)

Follow

Get every new post delivered to your Inbox.

Join 2,313 other followers