The one tool I wish I had in PHP

One thing you realize when you work by yourself is that you get a lot of benefits from tools that can automate some of your work or save you time. I have grown quite familiar with tools that you want around you when developing great PHP applications. With your production servers, you want services and products that can help you with:

  • Server monitoring
  • Server provisioning
  • Log management
  • Checking for uptime
  • Application performance
  • Application errors

This doesn’t even include developer specific services like continuous integration.

Those production server errors

Here is a common scenario.

Our client just called saying they had an error in production.

I can’t count the number of times I heard that quote. Production server errors in PHP (often the white screen of death) have always been a huge problem. When you get production errors in PHP, it’s a very painful experience for a lot of reasons.

Often, you weren’t aware of them so you have to go comb through your logs to see if you can find anything useful if you have log management that step is easier. If you’re a bit more on top of it, you get an email with a stack trace. But after, you have to go through this awkward reverse engineering process where you’re missing a lot of key information. How do you get that information?

For a lot of PHP devs (especially in the WordPress world), you will doing var dumps directly in production. That’s cowboy coding and that’s bad! Often, it’s necessary because you just don’t know what’s going on. Log information and a stack trace is sparse at best.

Meanwhile on the web…

I asked the Montréal WordPress Facebook Group what they used for errors, but only one person used an error monitoring service (Airbrake). I am always checking what the other big web languages (mainly Ruby and Python) are using to solve their problems and there are a lot of general tools that were built for this (e.g. Raygun and Sentry) that come with their own PHP libraries or third-party ones. In my research, I came across one tool, Honeybadger, that did what I wanted and they had one awesome policy.

We believe that an error management system built specifically for Ruby will be 10x better than any one-size-fits-all option.

I thought I want something like that for PHP and its frameworks/platforms. Where it’s someone who actually uses PHP and, most importantly, wants to use it. There’s plenty of language options out there and even more PHP haters so it would be nice to have someone who’s building a product where PHP isn’t an afterthought.

Hey, I know this problem! …and I know PHP!

And all I want is for something like Honeybadger to exist in PHP. So when I was brainstorming my B2B business for the app challenge, this was the first thing I thought about.

So that desire to see this exist got me to create Helthe.

Helthe helps you fix those production errors

My goal is to make Helthe the world-class error monitoring service that PHP deserves. You’ll get more than an alert, a log entry or a stack trace. You’ll get a tool designed to give you the information you need to solve those bugs faster without all the hassle.

If you are interested in having a better handle on your production server issues, check out Helthe.co for details. Otherwise, just keep checking back on how things are going. I’ll be posting regularly and sharing as much as possible of what I have been learning.

I will also be posting about production server topics and other tools you can use. So stay tuned!

Feel free to leave a comment below or discuss on Hacker News.

P.S. If you’d like to keep up to date with my progress, leave your email below!

[mailchimpsf_form]

PHP App Challenge

So I decided to stop my focus on a health for the immediate future. I might do a post-mortem of some sort eventually. That said, I’m still looking into making some form of recurring revenue so I am taking what I have learned over the last year and using it to build a PHP app and, in the vain of what Nathan Barry did with his Web App Challenge, I will try to turn this into a 6 month challenge.

Goals

So to give myself some focus, I am going to try to give myself some goals for the challenge over next 6 months.

Hit a recurring revenue of 1000$

I want to build enough recurring revenue to offset my total monthly expenses which are between 600$ and 1000$ (!). This might be a bit a bit optimistic considering what I have read from other bootstrappers. Even with my ramen lifestyle, I want to stop hemorrhaging money. So that’s the goal!

Leverage my competitive advantages

This would definitely come up in my health app post-mortem, but I think it’s clear to me now as a first time bootstrapper that I should not throw away my competitive advantage. So with that in mind, I want to leverage my longtime involvement with the WordPress community and the fact that I work primarily with PHP (gasp!).

So I would want to build a service that is useful to both the WordPress community and the rest of PHP community.

Document my journey

I’ve been writing a bit more consistently, but still not regularly enough. I want to document as much of this as possible and my refocus on programming problems should hopefully help my writing. We’ll see! This is almost a running joke at this point for me.

Let’s get started

Actually, I cheated a bit!  I have already run through a few ideas and did some quick validation through the WordPress Montréal Facebook group. I’ve been doing a small proof of concept to start to see if it is possible, but I am solving a pain I have had over the past year and at my past employment as well. I hope to be able to do a long-form marketing site and a follow-up post shortly!

P.S. If you’d like to keep up to date with my progress, leave your email below!

[mailchimpsf_form]

WordPress core as a gateway to better coding

How many of you got into PHP coding because of WordPress?

– Matt Mullenweg

Me and roughly half the room of 200+ attendees raised their hand to that question. That’s pretty incredible mused Matt. He asked that question while answering the larger question asked by 9th grader Lucas Cherkewski which was “How can WordPress be used in an education context to learn coding?”

I have been involved with WordPress for over half its 10 year existence and while I have gone from simple attendee to volunteer to community organizer over that time. I have always been a bit of the crazy one in terms of trying to help the community code better and learn about more advanced programming topics. That’s because I have been coding since I am 7-8 years old so while I learned PHP through WordPress. I had done plenty of programming before then.

Plugin development is like high school

When I was coding in high school, I couldn’t even do something as cool as a WordPress plugin. The web was just starting. I was mostly coding in Basic doing silly things like a text-based RPGs. So I think it’s amazing that someone can solve small problems with a plugin and share it with the world!

For a lot of people, that’s enough. They can solve small problems without knowing a lot of advanced programming concepts. They don’t need to graduate to college level concepts. WordPress has a lot of great APIs that are easy to use and require no advance programming knowledge.

How do you graduate to college level coding?

I did a WordPress meetup on object-oriented PHP recently and I can’t say that I am the best of teachers and a lot of the utility and reason to use object-oriented programming was lost on most because WordPress doesn’t use a lot of objects yet due to its recent PHP4 heritage.

How do I get better at PHP coding?

I don’t get asked that question a lot, but, a few months ago, Michal Bluma asked me how I got into more advanced PHP coding. I told him definitely not with WordPress. I told him I had done a lot of learning looking at the code base Doctrine1, but version1 of Doctrine is mostly discontinued and Doctrine2 is a different beast entirely.

I told him take a look at Symfony, but that’s akin to someone going from high school to college graduate. The knowledge gap is HUGE. The same would be said about Doctrine2, Zend Framework, etc.

Fundamentally, there’s no way easy way for a WordPress developer close the gap.

WordPress core is an ideal candidate for this

WordPress core would be a great place for people to get a taste for advanced programming knowledge. What’s great is that all the APIs already hide most of the internals so, if someone is looking at the core code, it’s because they want to look at it. There’s an opportunity here to allow them to become better coders! Unfortunately, that opportunity is currently wasted.

Core needs stronger coding standard

I am not talking about syntax here, but actual code quality. Core devs need to raise the bar a bit more. I am not talking about super advanced things like Reflection objects or metadata objects, but just better knowledge and use of object-oriented principles. Learning how to do object-oriented programming is really the next step if you want to learn more.

As an example, last night I submitted a ticket to core about the use of final with the WP_Post class. In my opinion, that should have never made it to core in the first place and shows a fundamental misunderstanding of object-oriented coding especially in an open source environment.

What needs to change

Honestly, it would be good if WordPress core at least used some PHP object-oriented best practices. Here are things that would be great for people looking to learn a bit more about being better PHP programmers:

  • Using interfaces where it makes sense to do so like with WP_Widget and WP_Post for example.
  • Severely limit the use of magic methods especially __get and __set
  • Exception handling instead of the white screen of death
  • Proper variable visibility
  • More abstract classes

This is just to name a few. You can find some of these in the code base already, but new code is still being committed where these basic rules are disregarded which is really the point I am trying to get across.

As a core dev, you should be holding yourself up to higher standards because you are indirectly a teacher for thousands of fledgling PHP developpers.

Feel free to leave a comment below or discuss on Hacker News.

My first open source contribution: Chronos

I have been involved with open source for a couple of years now. However, my involvement has always revolved around organizing events for the Montreal WordPress community. Except for a handful of pull requests and small jQuery plugins, I never created anything I felt would be useful to share. I am slowly trying to change that.

While I have a huge respect for Automattic as a company, I can’t think of a company that I admire more than GitHub. One of their mantras I always wanted to follow was open source (almost) everything. So since I started my current project, I have tried to keep my code as modular as I could so I could open source most of it if I could.

I didn’t really have a great opportunity till recently when I started needing recurring jobs that I could manage in PHP. I needed something that could manage both crontab like Whenever, but also handle recurring jobs programmatically a bit like wp_cron does. I looked and couldn’t find a library or set of libraries to do this.

I felt this was a good opportunity to try to get something out so I made one and I am open sourcing it today as Chronos. I’ll have a followup Symfony2 bundle available in a few days.

Why I am so bullish on health technology

optimistic about something’s or someone’s prospects

bull·ish

This monday I was having a somewhat heated discussion with my mother on the general future of health. It all started when I discussed the future of brick and mortar stores and malls. With the addition of self-driving cars, she felt that people would never go out anymore and lose whatever passive calorie expenditure we have left.

While it’s not an invalid point, I think people probably overstate the caloric importance that walking at the mall would bring. The important aspect is that if you do an effort to get out and walk, you are usually also focusing on other elements like the diet which accounts for the major portion of the calorie deficit required for weight loss. Because companies like Google and Amazon are removing frictions in our lives doesn’t have to imply that we are going to get unhealthier.

Health tech is not popular

Instead of asking “what problem should I solve?” ask “what problem do I wish someone else would solve for me?”

– Paul Graham

The first thing that comes to mind when I think of the health tech space is the essay “Schelp Blindness” by Paul Graham (all his essays are amazing btw!). There are decades of behavioural research and theory to testify to the complexity of the task on top of the fitness industry that has a business model built around the fact that you will most likely drop out of an exercise program within the first 1-3 month(s).

There’s lots of people working to make us LESS healthy – it’d be nice if you could support the people trying to make us MORE healthy.

– Jason Shen

This fact is mentioned in an article PandoDaily ran monday called “All the fitness apps in the world won’t make us thin“. It’s a common article to see in the tech press (there is understandably a lot of doubt), but it did make a few of founders come out of the woodwork to comment. The comment by Jason Shen struck a real chord with me, but a lot of the other comments were good as well. Discussions around health topics are generally very polarizing.

The PandoDaily article did have a few important points. A solution needs to be convenient for the user. I also don’t think that an advertising revenue model is going to work there, but people could make it work. Who knows. I actually disagree with the article’s interpretation of the PEW report. I saw a lot of positive indicators in the report. The fact 60% of people track weight, diet or exercise routine is, in my opinion, very significant. The issue is that people 50% track with their heads because it is more convenient even if we, humans, are terrible at it. This creates a bad feedback for the person.

Convenience and the advent of wearable computing

I don’t know how many times a day I now reach into my pocket to pull out my phone. If I had to guess, I’d guess a hundred. Maybe it’s a lot more.

– MG Siegler

I’m going to back to convenience as this is the cornerstone of everything. Never in history has a device as powerful (sensors, processing power, storage, etc.) as the smart phone been so close to a person. Which is why I am so excited about the fact that devices are getting smaller and closer to you each year.

The writing is on the wall for wearable computing (things like watches and glasses) which reduces the friction of the user with the device even more. Devices like Fitbit and FuelBand are stand-alone devices only because that’s the only way they can exist, but give it a couple more years and developers will be able to incredibly cool things with generic devices like today’s smartphones.

The insanity of it all

Insanity is doing the same thing, over and over again, but expecting different results.

– Albert Einstein

This quote sums up the essence the issue at hand. Each year in a cycle that transcends the cliché into researched behaviour, people proceed to do the same thing, use the same tools and fail in a very predictable way. It is normal for people to doubt that things will change, but they eventually do and it always seems obvious in retrospect.

In that way, I look at most of the behavioural research done in the past and I wonder what impact the smart phone or other devices could have had on their outcome. Eventually, I decided to stop wondering and slowly start working on it.

This is my first health related article. I do plan on doing a lot more in the future! I would like to point out that I would not call myself an expert, but I do spend a lot of time reading on the subject.

Cooking up a product: The ingredients of success

I’ve been focusing a lot on product development and design lately because I really had no idea what it meant to design and build a product. In a very cliché manner, I went in right with the coding when I started to build my product. Probably a mistake (I have made many so far.), but I think it’s too early to tell. Nothing you can’t recover from, but time was wasted which is always annoying.

What are the ingredients of success?

As I have gathered links and resources on the subject (I keep most of my interesting links curated on Kippt), I found the blog of Amy Hoy a ruby developer who teaches a class on product development. It looks really great, but completely out of my price range at the moment. She has some sample course material online and in it is this gem on the ingredients of success. She defines success when building as product as something that:

  • Sells well
  • Makes your customers happy
  • Feels great to work on
  • Gives you a lot of creative leeway/freedom
  • Fits into your plans to live your life the way you want
  • Produces a good profit
  • Grows in a controlled manner (so you can choose how big to get)
  • Does no harm (to anyone)

Amy Hoy

I have often discussed and pondered on my own motivations for wanting to build a product and I really can’t think of a more concise list of reasons for myself. Any element removed from that list creates a problem.

My first product development book: 4-hour work week

The first book I read that really discussed developing a product was the 4-hour work week by Tim Ferris a few years back. When I read it, the lifestyle he presented resonated a lot with me. Obviously part the appeal of the book is the lifestyle he presents so it’s not exactly surprising.

A friend of mine has several website specializing that does free peer-to-peer apartment marketplaces (think craigslist). He makes some money from Google ads and that has allowed him to travel and not really work in a few years. There’s also plenty of other case studies on the 4-hour blog if you are looking for inspiration.

On a personal note, I never felt comfortable with the idea of selling or making anything just to make money. It didn’t sound like the right way for me to approach this. Eventually, I came to an important conclusion.

As a programmer, craft matters

I never really thought of programmers as craftsmen till I started to read the pragmatic programmer, but it makes of a lot of sense and that’s why this list is probably is more exhaustive than if I made one based on the 4-hour work week for example. In that context, a lot of the elements of that list are relevant only when crafting something where you value the output.

When you take time to craft something, you are always mindful of the end result. This is something that I realized as I programmed more and more. I became increasingly critical of how I did things and making sure I understood conceptually what I was doing. I think this extends to anything really. When I start something, I’m never quite satisfied till I have a solid understanding of the subject.

Do you find yourself putting a bit of extra work just to make sure everything is right and up to your standards? I look back at my time working and I definitely went the extra mile to make sure the level of quality of my work reflected who I was.

So you have a list, where do you start?

So you’re looking at that list, it makes you all warm and fuzzy! Where do you go from here? If you just want to make a product, any product I would look into the Customer Development methodology by Steve Blank. There’s a lot of resources online on it, a lot of books, training products, etc. So much in fact, that it is starting to look a lot like diets. People find unique names to market essentially the same thing (talking to your customers!).

Not a programmer? Intimidated? Understanding your customers does not require programming knowledge. Just empathy. Outsourcing your development is a touchy subject (especially as a developer!) that warrants its own post, but it is possible. My friend with the apartment marketplaces uses an outsourced developer (he’s a business graduate). If you’re looking for a great talk, this one (sorry this is the only ungated link) is an interview with someone who created a profitable product outsourcing development and following the Customer Development methodology.

Got some thoughts on the subject? I’d love to hear them.

I failed at writing

I started this blog because I wanted to be a better writer. I also thought it would help me while I built my first product (still working on that!). In retrospect, that was not a strong enough motivator to keep the habit going. For the curious, my original goal was to write one article a week. I kept it up for about the same amount of time someone tries to go to the gym after new years. About a month. Pretty lame.

So if you know about the stages of change, I was more or less in the action stage for a month and relapsed out. This post is more or less a preparation stage step pep talk as I move back up to action stage.

About writing

There’s a lot of things I need to improve, but I would say first of all I need to write faster. I am not sure if it is possible, but I would like to think that if I write more often it will get easier in general. For now, my goal is to write 500+ words (not only blog posts) every day I work on my product (so 5-6 days/week). I hope it can translate to 2-3 posts a week.

Second element is finding my style. I liked doing technical posts because they made me sound smart, but it’s not always useful. I will probably do more, but I need to focus on writing things that are useful first and foremost, but also good/fun to read. I tend to have a weird sense of humour and I am not sure if it would translate into writing either. I think it is something you have to get comfortable over time with.

Making this post useful

So I’ll finish with some, hopefully, useful information. I have to say that not taking writing seriously sooner will probably end up being a huge mistake on my part. To go back on the stages of change, this was me in the contemplation stage as I have gained a better understanding of what it means to build a product when you are no one, I started to realize that I neglected a very useful way to reach out to people.

Distribution/Marketing/Growth on the web is primarily about getting people to know you even exist. It is also a way to educate your market which is critical when dealing with a new market scenario. There are multiple ways to create traction and it is a very poorly discussed aspect in startup literature. So I plan on expanding on that topic in the future.

What about your product!?

I am “pretty close” to putting something out, but not quite yet. It’s going to be all sorts of embarrassing, but you have to start somewhere!

So here we are at 505 words. I don’t think I’d want to read a longer mea culpa. That said, I hope to look back and see this as a starting point, but who knows really. Also this distraction free writing mode is pretty awesome!

New Market and Market Types

I recently began interviewing potential customers as part of the customer development methodology I am using for my startup adventure. As I interviewed these potential customers, It slowly dawned in me that I might be dealing with a new market. When starting a company, market type selection affects everything. It influences marketing, income projections, customers, sales channels, etc.

Let’s take a second to go over the different market types.

Market Types

Existing Market

This is pretty straight forward. An existing market is well-defined with existing customers as well as known competitors. It’s easy for potential customers to highlight the features that are must-have or explain the edge your product is trying to bring (e.g. better performance, new features).

Re-segmented Market

Sometimes entering an existing market isn’t possible due to various issues (e.g. monopolistic market, cost of entry), but it is possible to distinguish yourself by either offering something different like targeting a niche or by offering a drastically reduced cost. By doing this, you segment the market in a way that you position yourself as the market leader. This is a re-segmented market.

Clone Market

Clone markets are simple. It is the act of copying/transposing a known startup idea into another large market containing language/cultural barriers. Common example are Yandex and Baidu which are huge search engines in Russia and China respectively.

New Market

A new happens when you talk to customers and you hear “I have never considered this”, “There’s nothing else like what you are offering” or something along those lines. You also can’t find competitors or a comparable product. This is a new market. Some examples are the iPad and Ford with its model T.

If I had asked people what they wanted, they would have said faster horses.

Apparently Not Henry Ford

New Markets are radically different

While the above quote might not have been uttered by Henry Ford after all, it still illustrates quite well why a new market is fundamentally different compared to the other market types. Because of this, they also have very unique challenges that are not shared by the other market types.

Customers and Growth

A new market has to be grown. This has significant consequences for income generation. While other market types have existing customers, new market have none and this means you might not see growth for a few years as you educate your customer base. This is partially where the concept of the “Death Valley” comes from.

Marketing

For a marketing perspective, you have to shift from the standard marketing practice because, since there is no competition, you cannot compare yourself to an existing product or brand. You can’t sell new features as well because you have no competitors to compare them to. All you can do is sell your new market vision to potential customers.

Is this good or bad?

So it’s not clear if it’s good or bad, some people seem to think it is bad like Steve Blank who discusses it in this article. Peter Thiel seems to think it is good. It is possible to be in a situation where you can choose if you are in a re-segmented market or a new one, this is well explained in this other article by Steve Blank.

That said, sometimes, you can’t articulate your new product as a re-segmented market, but if you have the choice then you should spend a considerable amount of time thinking about it as it is one of the most important choices you will have to make.

Science and Pragmatism

Matt Perryman over at Myosynthesis has been running an incredibly interesting series (Part I, Part II, Part III, Part IV) that he completed this week. The series dwells on some of his views on skepticism, scientific thinking and reductionism in fitness circles. I felt like taking a stab at the topic myself.

Reliance on abstracts

The problem to me isn’t the fact that science is used as a tool, but rather the reverence for, and certainty given to, the findings of published research with no further context.

Matt Perryman

When I started getting into fitness and nutrition research, I found it very hard to digest abstracts as is. Yet they were, and still are, thrown around as a form of justification. I was lucky enough to stumble on Alan Aragon who took the time to dissect and digest some of the relevant literature and explain it simply. It eventually spawned AARR which I have subscribed to for a few years now.

Abstracts are meant as summaries only. You miss out on a lot of information if you consider them as is. You can miss fundamental issues with the research itself such poor methodology which can range from how you perform your tests to the population used (e.g. using athletes from research meant for the general population). Commonly, you can also run into conflict of interests especially in nutrition research where the supplement company are funding their own research.

Let us remember what science is about

I won’t say too much about this here as I’ve previously written about complexity, but it’s helpful to think of your body as more like the weather than a precision-engineered mechanical device.

Matt Perryman

The scientific method is meant to assess cause and effect in a controlled environment. While sports and nutrition research try with various degrees of success to do so, it is currently not an exact science at the same level physics or chemistry. That is why having context is critical because it is what allows you to judge the relevancy of the findings and ultimately their application.

A case for engineering

Engineering is the discipline, skill, and profession of acquiring and applying scientific, economic, social, and practical knowledge, in order to design and build structures, machines, devices, systems, materials and processes.

Wikipedia

I am an engineer by trade and what made me passionate about it was that you are converting theoretical knowledge into something that can be applied in a very pragmatic way. While I wouldn’t say we need a “Fitness Engineering” discipline (We have biomedical after all). There is surprisingly little done to “translate” the increasing body of exercise, sports, nutrition and psychology research and applying them in a practical way. It also doesn’t seem to occur in people’s mind that this could (or maybe should) be done or this is possible.

It’s not impossible either. Arthur Jones was able to do it when he invented the modern exercise machine. However, there’s been little else since then and most of it has been gimmicks. One of the reasons I really liked the 4-hour body by Tim Ferris was that, regardless if you agreed with his conclusions or what he had done, it was the first real attempt I had seen to take nutrition and exercise research and develop it into a practical framework of use for everyone.

It is getting better

Regardless of these issues, there are more and more people who take an interest in all of this and that is good for us all. We need more people looking into the science and how to apply it.

That is how progress happens.

A Self-Motivation Primer

I have spent a lot of time over the last month studying exercise adherence research and other sports psychology topics. One of the more interesting topics I have come across has been self-motivation. Like a most of the core topics related to sports psychology, this one has implication in our daily lives beyond just sport and exercise. I plan on covering self-motivation in the context of exercise adherence in a future article.

Self-motivation is the ability to persevere without outside help.

Self-motivation is the ability to persevere without outside help and, what is really interesting, is that it is the only psychological construct I have found so far that is enduring and trait-like1. Other traits, such as personality type, introverted, extroverted and degrees of vigor, were evaluated in the context of exercise adherence, but only self-motivation was found to have a noticeable impact1,2. While a lot of this research was done around exercise, there seems to be link between self-motivation and other medical treatments3.

The other interesting element of self motivation is that you can easily evaluate1 how likely someone is to persevere in a new behavior or activity before they have even started it. For anyone that has to help others change their behavior (Counsellors, Dietitians, Trainers, etc.) this can be valuable in tailoring the amount of support and self-management assistance needed for their client in order for them to achieve the success they seek.

While the research I have read so far seems to point at the enduring nature of self-motivation1. Anecdotally, I seem to feel that self-motivation can evolve over time. This is because motivation is related to high self-efficacy4 according to social cognitive theory. While self-efficacy is generally evaluated on a per behavior basis (also known as task self-efficacy), an overall increase in self-efficacy in multiple behaviors could have a positive change on self-motivation. Due to lack of material on the subject, I can’t really expand on it further than that.

Regardless of this, the assessment of someones’ self-motivation should be an integral part of any behavioral intervention.


1 Dishman RK, Ickes W. 1981. Self-motivation and adherence to therapeutic exercise. J Behav Med 4:421-38. PubMed
2 Adherence to physical activity. Dishman, Rod K.; Buckworth, Janet Morgan, William P. (Ed), (1997). Physical activity and mental health.Series in health psychology and behavioral medicine., (pp. 63-80). Philadelphia, PA, US: Taylor & Francis, xv, 286 pp.
3 Baekeland, F., and Lundwall, L. (1975). Dropping out of treatment: A critical review. Psychol. Bull. 82: 738-783. PubMed
4 Bandura A. Self-efficacy: the exercise of control. New York: Freeman; 1997.