May 17, 2016
Startup Business Models
Most of the startups start by doing some sort of viability studies to asses if the adventure is worth to take. I wrote extensive material on this, but is in Portuguese. If it happens you can read Portuguese or can translate it, here it is.
From these analyses the startup founders may have some elements to start designing a business model.
One of these elements is the competitor list. They can use competitors to reverse engineering a business model.
About business model transparency, for example, Buffer is the best I known in keeping transparency about their business model. See it here. There is also something interesting about Buffer and other companies that want to maintain a transparency culture, and they are using Bare Metrics to achieve that beacuse they use Stripe as they payments partner. For the Buffer example, click here to see their Bare Metrics Dashboard
Of course, this transparency depends on the company culture and not all startups are willing to do this, or is not a priority or even possible. However, having a business model well defined is important for every stakeholder (product manager, developers, customer experience, growth team, etc).
Having the business model shared amongst the stakeholders is important to maintain focus and provide guidance how to run the business. It helps also communicate KPIs between teams. Every person must contribute to some part of the business and people like to see how they are adding value to the business. In my experience I worked with teams of developers that had no clue about the business model. This can hinder the startup because not everyone is working according to the same blueprint.
I like the concept of the Business Canvas as introduced by Alexander Osterwalder.
….so would be great to see the business model canvas to understand all the startup business. Ideally, it would hang out this on a wall, as I like the visual management approach.
I own that book since 2013, because I was learning about business models. Interesting to see the startup scene here in London using these techniques. Forward Partners, for example, help entrepreneurs understand their business by doing a Business Model Canvas as a first thing. I understand, because is a really simple way to design and visualize a business.
Bottom line, why I would like to see a business model for the startups I work for?
- They help everyone to understand the business and create KPIs for the activities, revenue stream, etc that will definitely help making better decisions and improve communication.
- It shows that the founders have gone through the work of defining their business and are committed to it, by sharing the business model.
- For the development teams, having a clear view on the business model, help them to independently decide what is best for the business.
- If something changes on the business model (as isn’t written in stone), everyone will be aware about it, thus contributing to better communication
Please, let me know if there is something I could help here.
April 19, 2016
Working in London?
To all Portuguese Programmers that already had that though of working in London, but did not made the decision, yet.
Have you ever considered what is like to work in London? Have you ever had that thought? And you also had the other thoughts….the circumstances, or the excuses? Because I have a girlfriend, a wife, kids, the house, the dog, the cat, whatever, I bet there are millions of excuses to move before ever considering any of its benefits. Is just a choice, and there are things more important than others for each of us. Circumstances change because they are bound to time and thought. I do understand, however I do not understand why people have choices and keep complaining, but that’s other story… 🙂
But, now, imagine that the part of your the brain that creates excuses was shut down, and you can’t just produce them. Feel only the benefits for your career? Your personal life? The new technologies you will learn? The people you will meet? The millions of choices you have in the silicon roundabout? Culture? Music? Functional Programming? “Big Data”, AWS, Scala, node.js, DevOps, Microservices, whatever, you name it. You’ll find it here and you will learn it here.
Since the beginning of this week, I’ve been approached by more than 10 recruiters, either by phone, mail and linkedin. They are a lot of them, because there is a big demand for programmers. London is receiving a lot of investment for startups that are really growing. I do notice this same trend in other cities in Europe… OMG, are we in a bubble? 🙂 🙂
Want to start a business? What about a Business Accelerator? They even pay you to learn? Check these, for example:
Want to learn some other stuff? There are meetups for anything you can imagine 🙂
Ok, now your part of the brain that creates excuses is on, forget about all of that.
Really, if you want to make that move, I can help you personally. I had different circumstances, but if you make that choice, please let me know and I can help.
Let me read your thoughts…
June 6, 2015
The psychology of physical agile boards
Is now widely accepted the usage of online collaborative tools to manage a team’s tasks and progress. Is common to see teams fully taking advantage of Jira, Trello, etc. As someone asked here in stackoverflow :http://stackoverflow.com/questions/20090309/a-completely-free-agile-software-process-tool, if you also want to know which tools exists for managing agile teams, the this is not the place, search in google 🙂
January 8, 2015
Recycling old stuff… this is about basics of objected oriented design
Probably was some work in progress… Let me share it.
October 25, 2013
Hey, did you know Java is a typed language…?
Hi,
Java is a typed language (Duuhh!!!), it means that we can create new types like:
public class User { private final string name; public User(String aName) { this.name = aName; } }
And we can later on bring Users live into our virtual world, that is our app. If our app deal with objects and their interactions, we should care that those objects are of a given type, that’s why we define our app’s blueprint (java code, for that matter).
If my app has two users, somewhere in my code I’ll find something similar to this:
User userJon = new User("Jon"); ... User userDoe = new User("Doe");
I’m bringing those two Users live and hold a reference to them, so I can control their behaviour :). These references are of a given type, and I can figure out what I can do with them when in my hands.
Knowing object’s type is pretty nice because it expresses better the thoughts in code, easier to read, indeed. For me that have bad a memory is great to remember 🙂
Now, my model evolves and my customer is telling me that a user has many friends, that are also players in the virtual world!! I start to model something like:
public class User { private final string name; private List<User> friendsList = new ArrayList<>(); public User(String aName) { this.name = aName; } ... public List<User> getFriendsList() { return Collections.unmodifiableList(frinedsList); } }
Clients of the User type can interact with the reference like:
List<Users> userFriends = user.getFriendsList();
P.S. – Java 7!
Pretty straight forward! User’s clients know that when they send a message to a user object they will receive a list of users, and the client code defines meaning for that list of users as being the friends of the user, using the name userFriends for the reference, for that matter. Later in the code, the client may use this reference, and when it uses it knows the context of that list of users, it’s a list of friends, duhh!!
Now, other guy may write this code:
List<Users> user = user.getFriendsList();
It’s still ok, but… later in the code the only context I would infer immediately from this reference is that is a list of users but and it represents??? oops, I lost my self in a loads of complex code, give an help for the maintainer please!! 🙂
Getting things worst, in pre generics era, I would model something like:
public class User { private final string name; private List friendsList; public User(String aName) { this.name = aName; } public List getFriendsList() { return Collections.unmodifiableList(friendsList); } }
And later in my code, getting the user’s friends would look something like:
List users = user.getFriendsList();
Now, I completely lost. So, have a list of objects but hey, their type may be users, since the name of the reference is trying to give a hint, but it may be wrong…who knows? This code knows:
Object obj = users.get(0); if (obj instanceof User) { User = (User)Object; }
Getting back in time!!!
The point here is that the Java language has evolved it’s type system, so will I!
I would prefer to model something like this:
public class User { private final string name; private FriendsList friendsList = new FriendsList(); public User(String aName) { this.name = aName; } ... public FriendsList getFriendsList() { return friendsList } } public class FriendsList { private final string name; private List<User> = new ArrayList<User>(); public FriendsList() { } ... public Iterator<User> getFriendsListIterator() { return friendsList.iterator(); } }
Now I have context everywhere. Since Java is a Strongly typed language, let’s use types. What you think?
February 7, 2013
Updated
February 6, 2013
“Blogging” since 2006
I realized now that I blog since December 2006, I’m in the 7th year of blogging, giving back to the internet 🙂
Will revisit and republish some of those posts here, to revisit my thoughts at that time will start from December 2006.
February 6, 2013
Playing again
August 21, 2012
Scrum talks with Mike Cohn
Mike Cohn, from Mountain Goat Software, gave a series of talks on Norwegian Developers Conference 2012 about Scrum and Agile. I’m sharing the videos here. It’s worth to take a closer look for anyone taking agile and SCRUM seriously.
Getting Agile with Scrum
Leading a Self Organizing Team
Agile estimating
Advanced Topics in Agile Planning
Scaling Agile to work with a Distributed Team
User Stories for Agile Requirements
July 19, 2012
I’m dropping Camel Case convention
I was watching a video about BDD and decided to try the technique with an exercise. What is happening is that I’m starting to question the Camel Case convention. After a couple of lines of code I have something like:
public void shouldHaveFirstTransitivePropertyOfInequality() { assertTrue(valueUnderTest.compareTo(valueExpectedToBeBiggerThanExpected) < 0); assertTrue(valueExpectedToBeBiggerThanExpected.compareTo(anotherValueExpectedToBeEvenBiggerThanExpected) < 0); assertTrue(valueUnderTest.compareTo(anotherValueExpectedToBeEvenBiggerThanExpected) < 0); }
Full sentences in the method names. Yeah, it specifies the expected behaviour of the unit under test, but the question is about readability now.
I tried to remove the camel case to see if the readability improves, and also because I’m not a Lazzy Programmer
public void should_have_first_transitive_property_of_inequality() { assertTrue(value_under_test.compareTo(value_expected_to_be_bigger) < 0); assertTrue(value_expected_to_be_bigger.compareTo(value_expected_to_be_even_bigger) < 0); assertTrue(value_under_test.compareTo(value_expected_to_be_even_bigger) < 0); }
I’m feeling good with the readability improvement, so I will drop Camel Case in my BDD exercises.
One concern I had, when started this BDD exercise, was about the length of the name for objects, fields and methods. Yes, it may look a little odd at first (ohh, the guilty of breaking conventions!!), but like everything else in life, also this code may turn to be better than what I have today. My goal is to improve readability and not follow a convention.
The video is from Dave Astels (http://techblog.daveastels.com/) and is here: http://www.youtube.com/watch?v=XOkHh8zF33o