OAuth and no washing…

The day starts with a cycle through the Wicklow mountains, which was great and completely energised me.

Then the washing machine packed up, which was not so great. Began the debugging process – cleared out the drainage pipe (finding a 1 cent coin that must have been responsible for a lot of noise the machine made) but the drum still refused to go round. Emptied the machine and put it on a full wash cycle to see if it could be coaxed back to life. Saw the drum begin to twitch, followed by a loud pop, and the house fuse blew. Not good. Time to call a professional!

On the software front, I’m digging into OAuth 2.0, as part of the path to understand web site and web service security; and hopefully building some re-usable site registration and security components that can be re-used in multiple projects. Yes, it is probably easier to use off-the-shelf components, but I want to understand how the nuts and bolts of it work, and so doing it from the ground up seems to be the best way to achieve this.

I’m finding the more I talk to people, the more the array of modern relevant technology to learn and understand grows. My ‘To Learn’ list is expanding at an alarming rate…
Small steps is what it’s all about, and I’ve spent the day feeling like a total novice getting to grips with OAuth2 and the Angular framework. For simplicity I decided to go with the Google OAuth log-in API first of all, and the on-line docs here https://developers.google.com/identity/sign-in/web/sign-in made it look disarmingly simple.
It’s never as easy as it looks, and whilst the sign-in fragment worked well on its own, as soon as it was embedded inside my Angular2 application the button stopped appearing.
Several hours of digging around later and trying lots of different approaches, I have a basic Angular2 log-in component working. My plan is to implement the log-in mechanism as an Angular2 component to manage the user interaction, and a service object behind it which takes the User object and uses this to authenticate with my application service. Once this is working and stable I will post the code for anyone who may be interested.

Things I have learned today:
– Connecting to Google’s OAuth log-in APIs
– The horrible javascript technique of using ‘let that = this;’ for referencing ‘this’ in callback functions; and how to avoid the need for this with lambda (=>) functions instead.
– The need to use ‘ChangeDetectorRef’ in Angular in order to ensure bound variables actually cause the dependent UI element to update.

First day at ‘work’

9am, not the quietest start to my new journey – our next door neighbours are getting their bathroom tiles replaced, so my first work day begins with the sound of loud hammering resonating through my home office. Thank goodness for noise cancelling headphones!

Spent most of the day planning – figuring out what I wanted to achieve, learn etc; and also the things I need to get done soon to help me on my way. I’ve also started looking around at start-up and small business networking activities in the area, so that I can start making contact with like-minded individuals who are trying to do the same thing.

In order to keep things structured I am going to schedule the work I do as weekly sprints, at least to ensure I’m achieving all the things I want to. So far at a very high level I want to ensure the following activities are included:

Every Day:
– Exercise
– Blogging

Every Week:
– Prototyping and application development
– Networking – in the Dublin start-up and software development community
– Brainstorming – continuing to spend time thinking up new concepts and ideas
– Learning
○ Software tools
○ Development practices
○ Technologies

That’s at a very high level, and so the next step is to create a back-log of work items so that I can focus my prototyping and technology learning activities. One other important thing that I need to do over the next week or so is to figure out my ‘compass’ – what are the values, wants and needs that orientate me; and based on this what is my personal mission statement. If I can get a clear idea of this, then it will help guide me, and inform the decisions I make over the coming months.

Just to ease myself back into development, I spent the last couple of hours of work in the evening dusting off a prototype web application that I have been tinkering with for a month or so. More on this later, but I am planning to use this as the test bench for a lot of things I want to play around with. It is a single-page web app written in Angular 2, talking to a set of web services. I want to use this application concept to gain experience in a number of areas:
– Writing complex JavaScript / TypeScript and Angular 2 applications.
– Creating a microservice-based server architecture.
– Machine learning and data analytics.

But for now I spent the rest of the day trying to understand server-side URL rewriting in order to get the Angular 2 app’s routing working properly…

Modern Effective C++
Time to start brushing up on neglected skills…

Day 0…

The Plan

What happens when you decide to leave a steady job, with no firm plans for what to do next, but the general desire to try to generate and grow a business idea from an initial flicker of a concept into something that at least provides enough income to live off? This is the question I am trying to answer, and the journey I am planning to document over the next six to twelve months.

An Introduction

So who am I? A software engineer and engineering manager, based near Dublin, Ireland, who has spent the last 20 years working for a number of well-known companies to build mostly media and television related software. This has been an interesting career, during which time I’ve learned a lot about designing and building large (and small) software systems, how software teams collaborate and interact with each other; and many of the things that can accelerate or inhibit software projects.
Over the last few months I’ve been evaluating my career to-date, and have come to a couple of conclusions:

  • That the thing I most enjoy about software development is actually designing and implementing the software itself; whereas over the last few years I have spent much more time managing teams and processes rather than actually building software. I’ve realised that I don’t feel ready at this stage in my career to completely turn my back on the software development craft I actually trained for and solely focus on management.
  • That over the last few years I’ve built loads of prototypes and side projects in my spare time, but have never had the time or energy at weekends to take them anywhere near the point where they could be productized, and that this has been a recurring source of frustration for me.
  • That my dream, for most of the 20 years I have been working in the industry, has been to set up my own venture; but that my day job has always got in the way; and that if I don’t do it now, when am I realistically ever going to do it?

So with the above in mind, I have taken the plunge, quit my job, and given myself six months to re-focus back on building software and developing ideas with a view to starting a company. I’m looking at this as an experiment, which at the very least gives me a chance to get back into coding and serious software development, and to learn some of the technologies that I’ve been wanting to play with for some time but have just never had the chance.

To keep things focused I have set the following initial objectives for myself. I am sure that these will change over time, but they give me something to start with:

  1. Dive deeply back into software design and development: re-sharpen my software skills, re-acquaint myself with programming languages and platforms I used regularly in the past; and extend my knowledge and skills across relevant modern technologies and software techniques that I haven’t had a chance to use up to this point.
  2. Brainstorm, explore, ideate and iterate towards a viable business idea that meets the criteria of being something that I would be happy to work on for at least the next five years (I will expand on this criteria in later posts). I am giving myself six months to reach a point where I have a prototyped concept that passes a set of viability tests (more on these later, too). If at this time no such idea exists, then I start sending out CVs and applying for jobs. If, however, I have something that looks like it has potential, then I will give myself more time to develop it further.
  3. Learn how to start-up and run a company. At the moment I am very consciously ignorant of how to do this. Beyond a ‘Starting Your Own Business’ course at university twenty-one years ago I have zero training in trying to set up a business; and so I am looking to educate myself, reach out to others for help, and hopefully find one or more mentors who can help me in this journey, and stop me from either completely screwing up, or squandering my efforts.
  4. Have fun!! I have enjoyed many aspects of my career up to this point immensely, but for the most part it has been a serious business, developing things in a serious manner. Way beyond the simple fact that for at least the next few months I am going to be able to go at my own pace, along the path I decide; I believe that keeping things fun, with a sense of excitement and impulsivity, will aid my creativity and productivity. At the same time I think it will give me more insight into how to manage the paradox of software development, in the sense that it is inherently creative, and at its most effective when a developer and development team is given the freedom to do what they want; whilst at the same time that creativity is constrained and inhibited by deadlines, legacy software and existing architecture.
  5. Spend some time thinking about what makes software development work well, and what impedes it. There are lots of different methodologies and schools of thought around how to plan, design and implement software effectively; but experience has shown me that even with a willing and informed organisation there is often the feeling that the development team is not working to what should be its potential. To me this is illustrated most clearly when I’ve taken part in hackathons, and seen the same team of people achieve more in 24 hours than they would normally be able to achieve in several weeks using the ‘normal’ development process. Whilst I know that there are constraints and factors present in day-to-day product development that don’t exist in a hackathon, I am still convinced that there are ways of executing product-quality software development whilst maintaining the immediacy and energy of a hackathon or rapid prototyping; and so this is a concept I want to explore over the coming months.
    6) Document my progress. That is where this blog comes in. At the very least it will help me keep a record of what I’ve done and the thought processes I’ve gone through. It may catalogue a comedy of errors; or (as I hope) it may also document a journey that achieves at least some of the goals above, and passes some interesting points along the way. I guess time will tell…

So there you have it. Today is day zero, the last day of the bank holiday weekend after leaving my job. Tomorrow the journey begins…

Resignation

Dear All,

Tomorrow, April 13th 2017, will be my last day. After nearly 12 years in this team it is time to bid you all a fond farewell and try something new. It has been quite a journey, during which I have met, worked with, and learned from, some absolutely great people. I wish you all, and the product we have been working on, the very best in the future.

Regards

Toby

And so it begins…