"on software and stuff"

About issues concerning software, startups and product management.

When you can’t differentiate..

How do you differentiate one work from another? The real involvement lies there.

We generally come across many people who’re statistics driven.

people who look at numbers and make future predictions..

people who look at some random percentages and make judgement on other folks..

people who read numbers and assume they know the story.

Well, a Dravid’s century is a lot different from Sehwag’s century which is lot different from a Steven Waugh’s century. But statistically, they’re only centuries. You can’t differentiate based on that.

For people who know less (or care less), those figures and stats are all they need to know.

For people who care, or really interested in stuff, they go beyond numbers. Infact, numbers don’t matter to them at all. They can genuinely differentiate one stuff from another. Good from bad, bad from ugly, what’s the next line.. nevermind.

When you can’t differentiate one person from another, one company from another, one music from another, and need stats to help you make decision, well.. you’re basically ill-informed and paralyzed in some way. Go get more information. Talk to people. Learn about things.

When you can’t differentiate, don’t make decisions. Either learn about it, or leave it to professionals.

 

Save and Update with Sugar

This post helps demonstrate the ease with which you can save and update a record with the help of Sugar in android project.

For an introduction to Sugar, click here.

Firstly, to enable your model to utilize Sugar’s benefits, you need to have configured Sugar in the manifest file (as shared in the introduction) and the model needs to extend SugarRecord.

Saving a record becomes straight forward, as you’re only interacting with your objects and not the usually messy way of dealing with SQL queries directly. Here’s a way to save a record using Sugar:

// Note class represents model. It extends SugarRecord.
Note note = new Note(context);
note.setTitle("Make Tea");
note.setDescription("Add tea along with milk and sugar. Boil for few minutes");
note.save();

That is all you need to do to save a record into the android database. The save() method takes care of inserting the record into its corresponding table.
Similarly, modifying and updating a record is made very simple with Sugar. Here’s a way to do it.

// obtain a reference to the note record from database.
Note note = Note.findById(context, 1);
note.setDescription("Take some water. Add milk, tea and sugar. Boil it for few minutes");
note.save();

Here findById() is a query method to obtain the record with id 1 from the table. After getting the reference to the instance, modify the values and call the save() method to update the record into the table.

So, as you see, saving and updating records is made very straight forward with the use of Sugar. The code is located here  . Check out SugarExample for an example project.

Do try it out.

Sugar : Android database made easy.

This post is an introduction to Sugar library for android. The aim of the project is to simplify database access in Android.

The project draws inspiration from GORM for grails or Active Record for Rails. These patterns have been hugely successful in the web world, and have set a benchmark for libraries for database access.

The basic objectives of the library  are:

1. Creation and management of database and connection.

2. Simple and Intuitive API for database querying.

3. Simple CRUD operations.

Source Code

Source code is present at https://github.com/satyan/sugar

You can clone it and start hacking. There’s a build script along with it to compile and generate the binary.

An example project using the library is present at https://github.com/satyan/SugarExample

Usage

Android Manifest file: 

Include the android:name attribute in the application tag. SugarApp extends android’s Application and initiates the database creation for the project. By including the attribute, you’re basically starting with SugarApp instead of android’s Application class. If you intend to write your own Application class, you can extend SugarApp.

<?xml version="1.0" encoding="utf-8"?>
<manifest..>
<application.. android:name="com.orm.SugarApp">
.....
</application>
</manifest>

Entities
The entities need to inherit from SugarRecord including a typed parameter. SugarRecord provides for all the CRUD methods that will be available to the entity classes.

public class Note extends SugarRecord<Note>{
private String title;
private String description;
public Note(Context context){
super(context);
}
...
}

Thats about it. Configuration is done. You’re ready to dive into the sweetness of Sugar. (OK.. I couldn’t stop myself from saying this.)

# inserting values

Note note = new Note(context, "Note 1");
note.save();

# query

Note.findById(context, Note.class, 1);
Note.find(context, Note.class, "title=?", new String[]{"Note 1"});

# delete
Note note = Note.findById(context, Note.class, 1);
note.delete();

# few more..

Note.listAll(context, Note.class);
Note.deleteAll(context, Note.class);

Nice.. All done. Happy Android hacking.

You can’t hide the bitter truth..

Yes. Sooner or later, it would come out.

It leaves you two ways to combat it. One, the cowardly way.. look away from it, don’t share it with people, hide it, punish people for revealing it,  conceal it by any possible means.

Other way is to share it. Share it with all honesty. Show confidence in people.

The second approach gives you all control over the moment, the occasion you reveal the truth. The first one only manages to scare you and makes you repeat the same over and over.

In both cases, you’re unaware of the outcome. But in latter approach, you tend to control better.

‘Find the Blind’ renamed to ‘Find the Light’

Find the Blind, the project to help doctors and health workers detect and treat children at early stages of vision related defects, has been started and following are some updates on the progress of it..

1. A more positive outlook.

‘Find the Blind’ has been renamed to ‘Find the Light’.  There were many suggestions regarding the name ‘Find the Blind’ which sounded inappropriate and negative. Though it conveyed the context of the whole project, the communication carried a negative tone about it. Since the project is such a positive initiative, the name has to do the due justice to it. Hence came ‘Find the Light’. The name is self-explanatory and conveys the context beautifully as well.

2. Tremendous response on the introductory post

We received tremendous response on the introductory post, which is extremely encouraging. Couple of our dev folks have shown interest in contributing to the development of the software. Thanks for the encouragement, and we hope to see many more contributions in different forms during the course of the project. In continuation to this effort, we’ll try to keep posting update on the progress.

3. Progress on the software

Here are some screenshots of the app so far.. in a very nascent stage.

Note for contributors:

If you’d like to contribute in anyway possible to this, please write back to me at satya[at]satyanarayan.in stating the way you’d like to contribute.

We’re looking for contribution primarily in the following areas:

Technology:

1. Developers on android/python/django platform.

2. Architects to help review the solution design.

Financial Sponsorship:

3. To procure hosting environment. We’ll probably go with EC2.

4. Android devices. One tablet with GPS and one/two smartphone.

Social Project Execution

5. We’d need some project co-ordinators to help with the social activity.

Find the Blind – Project.

Lately, I’ve been contributing to this project ‘Find the Blind’, developing a technical solution to one of its functions. This has been a part-time thing that I’ve been working on along with my friend Deepan Subramani (developer at Thoughtworks), who has decided to help in his spare hours. This project is very special to me personally, and I’m sure this could help improve, in its own little way, the way we use technology for improving healthcare in rural areas.

This article serves two purposes:

1. We’re announcing it publicly, so it pushes us to deliver  (since we’re all working part-time on this).

2. It is also an effort to attract like-minded people to come along and help us with the project. Contributions are required on all fronts, especially technically and financial sponsorship-wise.

So, here we go..

Find the Blind is a project undertaken by Dr. Ashwin Mallipatna to detect and treat visual defects in children at a very early stage, especially in rural areas. More about this effort here.

Visual defects not detected and treated at early stage can later lead to severe consequences, total vision loss being one of them. This affects the overall future of the country with many youngsters coming out with visual defects, that could have been treated. With this vast a population, it poses many challenges to detect these defects at an early stage. This project tries to solve this problem with a social strategy involving village panchayats and schools in the overall setup.

With the above introduction, I move on to the technical point. There are two areas which need some technical intervention.

One, with the detection of the defect itself. Medical instruments are very costly and mostly static (stay in one premise). Portable ones have low degree of accuracy and aren’t suitable for rough handling. To solve this, the team went with an innovative Red reflex screening method, where an inexpensive digital camera with the right parameters and subject conditions is used to take appropriate readings. This strategy was well received and was recognized as a technology innovation by MIT’s publication. You can read more about it here.

Second part is location part. Since rural areas aren’t well connected, it becomes difficult for a team to keep track of all patients identified and  schedule visits  for regular check-ups. It is essential to have a system that can help locate a patient’s house and also allows access to patient’s information for viewing and modifying.

This is where our technical solution comes into play. Here are few brief details regarding the solution:

It involves an android based smartphone/tablet, which the health-worker carries. Our application deployed to the device would help the health-worker to locate the patients by giving out directions to the patient’s address. It also acts as an offline data collection tool, which the health worker uses to gather health information about the patient. Later the patient’s health details gets uploaded to the central server. The back-end patient system is build with django/python and will be the central store for all the information. The data exchange between the android client and the django server is in json format.

The two of us, I and Deepan, have just started implementing the above mentioned solution and looking to finish in the coming month or two. We should be able to get it up and running by the end of July to beginning of August.The project will undergo a pilot till the end of this year in a village near Bangalore, and (after its success) will be launched for use in other parts of the state.

It is going to be an extensive effort on part of everyone involved, and we’ll try our best to pull it off the best way we could.

If you’d like to contribute in anyway possible to this, please write back to me at satya[at]satyanarayan.in stating the way you’d like to contribute.

Note for contributors:

We’re looking for contribution primarily in the following areas:

Technology:

1. Developers on android/python/django platform.

2. Architects to help review the solution design.

Financial Sponsorship:

3. To procure hosting environment. We’ll probably go with EC2.

4. Android devices. One tablet with GPS and one/two smartphone.

Social Project Execution

5. We’d need some project co-ordinators to help with the social activity.

Steve and Bill..

Fantastic session (except for the lady interviewer.. must be producer’s wife or something. )

 

Keep an ‘A’ player engaged

In my previous post An ‘A’ player in ‘B’ team, I touched upon few options that one has when he’s put in an average to sub-standard team. One of the options was to leave for a better option.

As organizations, you want more and more ‘A’ players. They’re the guys, you can throw into any situation knowing that they’ll take care of it. They sniff opportunities when others are pondering over the problems. They bring energy and momentum even when situations seem dark and bleak.  Its hard anyway to find one, when you do.. letting them go is obviously not the wisest of  things to do.

Typically, they struggle in larger organizations because of all the politics/bureaucracy that precedes any decision making process. And the word ‘process’ itself is kind of a metaphor for killing innovation within the company. People are mostly rewarded for doing average work, not extra-ordinary things. It discourages a good talent to keep engaging himself in company’s growth and activities.

So, what do you do.. to retain them, and keep them engaged.

1. Give them some space.

2. Opportunities to innovate.

3. Accept failures.

4. More responsibilities to execute.

5. Provide them good team to nurture and guide.

6. At times, keep them away from the bureaucratic BS.

7. Pay well. Don’t restrict them to bands.

The list is not exhaustive, but certainly ample to help you retain him long enough. As is generally said, a good programmer can be ‘X’ times more productive than average one (with X ranging from 10 to 100.. and at times infinity too).

the new attrition problem..

Top companies are having a new attrition problem.. with start-ups. Many of their top developers, are choosing to work with smaller companies, even for lower pay (at times no pay). The primary reason being the challenge and innovation that comes along with being associated to a start-up.

This is not really a problem, actually.

They’re creating a brand for you. And, at the rate that start-ups fail, may always come back too. In either case, they’re an asset to your organization, irrespective of whether they’re with you or not.

1. They increase your brand value (for developers)

It tells other developers that this is the company that gives enough confidence to be able to start on your own. After my first start-up, I was looking for a company where I could feel more at home. I chose Thoughtworks at that time, specifically for the same reason. The culture, thought process and perception is very entrepreneurial. That is the reason I could take the plunge again into starting up. Had that not been the case, I’d have worked at an uninspiring place, killing most of what confidence and imagination, I had left at that time.

2. They form the ‘culture’ within the organization

Entrepreneurial behavior is very contagious. People who exhibit those behavior tend to be leaders. They inspire, motivate, act accordingly and form the basis of your org culture. They drive innovation at workplace and positivity just oozes out of their personality. All these traits are not bad to have in an organization.

3. They’re resourceful and get stuff done

Goes without saying. They might not be the smartest employees but they’ll certainly get stuff done. All they’d require is some autonomy and space to execute things.

4. When they go out, they spread the word.

An organization could actually boast themselves of the number of entrepreneurs they’ve produced. Many of the top management and technical institutions also struggle to state that.

In all, if people are leaving you to start their own companies.. don’t stop them. In fact, encourage them to do so. Create that as a norm and you’ll see the effects in your regular day to day transactions too.

Extending the Joel Test..

I’m sure everyone’s read The Joel Test. Its a very scratchy and effective way to know the quality of a software team. The article is about a decade old and primarily focuses on the technical aspects of a software team. In spite of its age, it is very relevant to companies in the current era too. If you’re looking to join a software company, its handy to have this checklist and use it to measure the team’s quality.

Overtime, I thought of few more things that could be appended to the list.. Here is the list, with few things repeated from the Joel test..

  • What are the programming languages you work on? Which one is the most predominant?
  • Laptop or Desktop system?
  • Configuration?
  • How frequently do you make builds?
  • Unit/Integration tests coverage?
  • How frequently do you release to production?
  • Hosted on cloud or private servers on datacentre?
  • What are the software that you use regularly?
  • Have you bought any software? Please mention them and reason to buy them.
  • Google/Zoho apps or Office docs?
  • Which bug-tracking tool do you use?
  • Do you use a project management tool? Which one?
  • what source control tool do you use?
  • Do you have continuous integration/deployment? If yes, which tool do you use?
  • Cubicles or open office?
  • Do you provide Lunch?
  • Snacks?
  • Coffee or Cool-drinks?
  • Do you have UI professional in-house?
  • Do you have QA folks?
  • Do you have a business analyst/product manager to work on customer/product requirements?

The list comes from some of my experiences of working with development organizations.. Please feel free to suggest some of your own items to add to the list.

Lets conduct a survey and try to see how Indian companies rate on this list..

Follow

Get every new post delivered to your Inbox.