Notes from the PHP usability study, June 2008


Participant #0 (pilot)

[[[noNotesYet | [no notes yet]]

Participant #1

DB application

Looked for the Databases node for a while (menu, options, ...). Eventually found it. Creating the database code - started typing it in, we adviced him about the db "Insert code" action. After that he found his way around, but did not expect the second snippet would generate the entire html table. Slightly confused by the generated code.

Importing own project

Used Total Commander to copy/unpack sources. Wanted to close the previous project, did not see how to do it in the File menu. Tried to import sources in the existing project he already had (through project properties). Confused by the notion of "Project folder" and "Source Folder" in the customizer. Changed the source folder of the existing project, which did what was needed (though in a different way than we intended).


Opened the project, ran it, saw the error. Exception (Assertion error) - several times. Restarted the IDE. Set a breakpoint, created a watch (typed in the variable name), ran the debugger. Breakpoint was hit, stepped through the code. Found the bug, corrected it, bingo!

Changing Run configuration to command line

Was looking in the Run menu. Then briefly opened the project properties (Run Config panel), but closed it without finding the UI. Then looked in Global options, changed the PHP Command line options, which does not help. Looked in Help, but did not find it (well, it's not there). We had to tell him to go to Project properties, then he found it after a while.

Import again through New Project

Correctly set project folder and source folder (to his www). Bug - could not run external browser. Got a 404, because he did not check the "Copy" checkbox.

Tried again, slightly confused by the "Project Sources directory is not empty" message. Tried tweaking the URL, no success.

Login page

Created new project, typed in the code for login form. Did not use code completion, although it popped up automatically. Completed successfully.


Said the IDE looks good overall. Says it has all he has currently in PhpEd - editor, debugger, works out of the box (may be because we configured the IDE before the study). Good clean UI without much clutter. Did not like the keyboard of the test machine. Did not like that you see multiple projects in the Projects tab, which creates clutter - he just wants to see his current project. He could not find how to close a project. He did not like IntelliSense (why exactly?). Could not imagine how you would use it with a real world complex application, e.g. with Zend Framework. In realistic cases, simple mapping between file and URL does not work, you need something more sophisticated. Related to the 404 errors he got. He was aware a bit about NetBeans, tried before (for Java), he knows it's free. He typically works in a team of 1-3 people (5 maximum). Shares code with team members either through Windows file sharing, or Subversion. Uses Zend and some O-R mapping runtime (did not hear which). Zend database stuff is bad, does not use. He uses PhpEd, prefers lightweight IDEs. PhpEd had database connection features and Profiler. Does not do unit tests much. Uses MySQL. JavaScript: uses ExtJS framework. Has a machine with 1GB RAM from 2005. Skeptical about code completion - does not improve productivity that much. Petr walked him through the project wizard, explained the Project URL and Copy options. The participant said he would prefer to configure Apache to use his project sources, does not trust copying. What he wants is have URL configured to http://hostname/, without any additional extra path. He uses the following in his code (roughly), to facilitate this:

define ("LOCAL_ROOT", dirname ('''FILE''')."/")
define ("REMOTE_ROOT", "http://".$_SERVER["HTTP_HOST"])

Source structure:

  +--- www

Participant #2

Exploring the IDE

No NetBeans icon in Dock (on Mac). How can one add a dock icon for a daily zip build which does not have an installer?

Copies his sources to Desktop.

Freeform browsing the IDE: creates a PHP project from his sources - uses "eshop" for project name and "Project Folder" for his sources - after browsing for it it actually appends "eshop" to the name. Uses the suggested MAMP folder for project sources. Understands the "copy" checkbox. After creating the project, pleased by the Navigator, plays with code folding. Right-clicks the editor to turn on line numbers - does not find it (well, he would have to right click in the gutter).

Plays with New file, looks for some functionality to display relationships (there is none such). Tries Source -> Complete Code (does this do anything?). Looks for code completion in the editor, discovers error checks, discovers Insert Code. Likes versioning (CVS), would like also "code sharing" (online through LAN). Discovers File -> Close Project, but it is disabled (bug?)

Customers application

Name is Customers, leaves the source folder alone. Comments that he normally uses a framework. After creating the project, looks for Insert Code - says he would expect such stuff to be in Palette. At the end finds Insert Code -> Connection to Database, explores the generated code. Notices the Instant Rename feature - pleased. Types in the SELECT. The tries the Database Table snippet (after deleting the code generated previously). But does not notice that the code that was there before is needed! After running, does not work, tries debugging by Show Source in browser. After advising, realizes that the first step is needed. Comments that when using a framework, he would use another approach, and the code clips would not be of much help.

Source import

He basically already did this during the introduction, just reviews the imported project.


Opens the project, the files in the editor, and runs it. Runs the debugger (without breakpoints). Before setting the breakpoint, reviews the code and notices there is an error check about accidental assignment and finds the bug.

Set breakpoints, though keeps using right-click rather than just click in the gutter. Then runs debugger, but realizes he already has a debug session, kills it first. Explores Step Over and Step Into (possibly not familiar with the concept?)

Run Configuration

Lost. Looks in Window -> Output. Runs again, notices that Run uses the Main Project concept. Closes the current main project, next Run offers to select a new main project. After selecting, still the browser is run. After advising about "try some settings for the project", finds Project Properties, explores the Run Configuration panel. Finds the right option and succeeds. Says at the end the "project settings" makes sense, but one would not think about that place.


Creates a PHP file. Uses a palette to create Form, then code completion to type in the missing attributes. Then palette for Text Input, but then uses copy paste (faster). Runs the project, but realizes that he has command line execution set, sets it back to web page. Tries "Run File" which does not work. Finally runs the app. Discovers code completion, likes it a lot. Discovers that NetBeans automatically types the closing brace, also praises.


[[[IMissedTheBeginning | [I missed the beginning]] Confused by the concept of main project. Most liked code completion in NetBeans, also likes the fact that NetBeans is all-in-one IDE. Misses the ability to share files across LAN. Their team often does remote pair programming. Team of 3 people, quite specialized (application logic, UI, business requirements/diagrams, ...) Projects such as e-shops, intranets, ... Would like UML reverse engineering from PHP. Wants his applications to run on PHP 4. Not interested in PHP 5.3 for now. They use JavaScript libraries/AJAX for internal tools - right now jQuery, previously scriptaculous. MySQL is their main database.

Participant #3


Looks at Welcome Streen, criticizes that there is too much space for blogs/news items, looks at "Featured demo" but does not run it. Explores new PHP project wizard. Would expect Project Folder and Sources Folder be colocated (because of backups, versioning...). Explores the Run Configuration panel in the wizard. Creates project, expores Versioning, Tools -> Palette, Library Manager (irrelevant to PHP developers)

Database App

Tries code completion for mysql functions, auto-completing single quotes is buggy. Explores Services -> Databases, connects to MySQL. Confused by the fact that the details of the database connection are not under the MySQL node. Editor pane is too narrow. Types more - would like automatic completion of closing brace ]. Runs the apps, gets failure, debugs using 'echo'. Then succeeds.

Project import

Looks in main menu for Project Properties. Some problems with the machine (restart needed). Comments on the long startup time of NetBeans ("well, I understand this is Java"). Restarts, surprised that window layout is not preserved. Comments on source formatting which is different from his editor. Gets an exception from JavaScript editor. Imports by copying over his sources to the project (sources dir under Apache). Code completion - no suggestions across multiple files in project (after sql::). Completion on $this-> works, but not from parent classes, and no fields. Likes the help with typung in a new function, also completion after self::


Opens the project. Runs it in debugger, which opens the browser (which he finds unexpected). Expects output in the Output window, not in browser. Tries to change this by opening Output tab. Does not set a breakpoint. After advising, sets breakpoint. Confused by the fact that the debugger progress bar is still running. Expects hyperlinking to work through Ctrl+Enter shortcut (not Ctrl+Click). Steps through code by setting breakpoints on all lines. Exception from debugger. After junping off the scope of the script, the variable $myVar disappears, which confuses him. Stops just before the line with the error, so does not discover the problem (maybe he thinks that if the line is highlighted, it was already run?).

Run configurations

Looks in main menu, e.g. under Run menu. Explores Tools -> Plugins. Looks at properties of index.php in the explorer. Discovers Project Confiugurations through the combo on the toolbar. Finds the panel, but is suspicios about it. Would expect better description of the configuration (the name should somehow refer to "output" rather than "script").

Login form

Looks at Services menu, but confused about the fact that Databases is the only entry there, would expect either more things, or the tab itself could just be called Databases. Goes into editor, expects completing 'php' after '<?'. Likes the fact that now ending brace is completed. Shortcut for erasing a line (Ctrl+E), finds it unintuitive. Types more. Would like completion in strings in 'method="|"' (with choices post and get). Completion for ending double quote in strings would be useful. Confused by the fact that Run launches main project, not current project. Wants to set the main project in Project Properties. Then sets main project through popup menu (as expected). HTML completion in strings. Completes the task.

[[[noNotesFromTheRestOfThisSessionSoFar | [no notes from the rest of this session so far]]

Participant #4

Trying out NetBeans

Already familiar with NetBeans, skipped.

Customers application

Creates a PHP project. Types in "hello world" and tries to run it to see whether things work. Explores project popup menu. Expects the project will ve registered in the web server. Explores Services -> Databases, but this is not relevant for now. Expects web server admin interface in Services (like in the Java IDE). Starts the debugging session, confused by the progress bar saying "waiting for connection". Explores Run. Explores Project Properties/Run Configuration, but no success. Wants to use Help. Needs to be advised. The problem is the mismatch between URL and Sources folder (sources folder is "Project2" under Apache docroot, URL is "http://localhost:port/Customers"). Changes sources folder to "Customers" (which removes the existing index.php file from the project; after some more advice he needs to recreate in the Customers folder). Explores the Databases node. Types in mysql connection code, tries code completion. Complains about the keyboard. Advised about the "Insert Code" stuff. Uses the DB Connect code clip. Notes the use of mysqli_* functions, he is used to mysql_*. Uses the other code clip for the table. Notes that the code clip did basically all he wanted, runs the app, works.

Project import

Did not bring his own project, uses MediaWiki instead. Uses default project location, browses Source Code to use the existing folder on the disk. Slightly onfused by the "index file does not exist" message, looks in file manager to find an existing index file. Then a bit confused about the "source folder not empty message", but ignores it an proceeds. Does not check the "copy" problems, which of course creates problems later on. After running (with failure), goes to project properties. A bit confused by the number of folders; checks the "copy" button. Still does not help. Needs to be advised that URL needs to be in sync with Project Sources, after changing it, it kind of works (modulo the fact that .php3 is not registered with Apache). The URL <-> sources folder relationship is very non-obvious.


Opens the project, runs it, sees the error. Sets a breakpoint, runs debugger, breakpoint reached. Sets watch to $myVar. Hesitates whether to use $myVar or myVar. Uses Step Into to go through the code. Looks at the browser, expects that there would be partial output rendered in the browser. Finds the bug and corrects it, even notices the editor check, which hints about the probable error. Runs again without finishing the debug session, the browser dispays loading progress bar. Kills it, after that it works. Likes the editor check about possible accidental assignment in condition.

Run Configurations

Speculates about the Run Configuration panel that he recalls from some wizard, but tries the Run menu first, does not succeed (not possible there). Goes to the file's properties, no success. Tries New PHP file, thinks since the template name is "PHP File" (rather than web page), it will be run in console. No success. The IDE somehow got to an inconsistent state, we told him to use another project. We adviced him that he was on track when he mentioned he remembers seeing a Run Configuration panel - look for project context. Then he finds it in the Project Properties and succeeds.

Login form

Creates a new file, uses Palette to add Form and a couple Text Inputs. Types in PHP code to validate the login. Runs, realizes he also needs submit button, drags it from the palette.


Interested about why his login screen does not work. Currently uses simple text editors, definitely would use a full blown IDE, if it works well. Comments that there is some learning curve, needs some getting used to. Likes the database snippets, but they are not discoverable. Uses UltraEdit and phpMyAdmin. Likes the fact that db functionality is integrated; not as good as specialized db tools, but good enough. Comments that the examples are quite primitive and not quite realistic. Wonders about the mysql_* functions, we explained that mysqli_* are preferred. Speculations about why the project became broken. Company has 12-15 PHP developers. Various IDEs - HomeSite, Zend Studio. Having a unified IDE has advantages. Subversion used for versioning (not quite consistently), but it is yet another tool, would prefer an all-in-one solution. Unifying development on NetBeans would have the advantage that Subversion could be mandated, currently it is not. Use their own PHP framework (mostly for historical reasons). Everyone has Apache installed locally, no common Development server.

Participant #5

Experienced with Windows and Gentoo, 10 year PHP development, HomeSite, jEdit

Exploring the IDE

The first thing he wants to do it play with his own projects. Does not like Start Pages in general (e.g. blogs etc). Intrigued by File -> Project Group. Turns Show Line Numbers on by default. Pleased by versioning, wary. Creates the sample project, after hesitating accepts defaults. Creates an empty project. Sources folder default value is too long to fit the combo. Browse button should start from the selected folder by default. Does not understand "set as main project". Likes the fact that he can use both projects at the same time. Would prefer the code folding UI on the left of the editor to be even further left (left of the line numbers). Does not really like the default index.php, would delete it. Does not like the preselected charset. Closes the palette (lines are too long to fit the editor width). Confused by the Files view, does not really like the file structure. Feels snappy, much faster than Eclipse (which he stopped using because of performance problems). Looks at Tools -> Options. Advanced Options is weird, not integrated with the Basic Options. Explores exotic settings such as Look and Feel. The UI to change menu structure is weird - why tree? Goes back to Basic Options, explores Editor tab. Prefers tab-based indentation: does not like the default, but likes the fact that it can be changed. Wants to bind code snippets to keyboard shortcuts. Wants line wrapping - does not know if NetBeans supports it, Looks for File -> Close Project. Eventually finds it.

Database application

Wants to create a file outside of a project - not possible, does not like that.

Right margin setting - does not quite understand how it works.

Types - gets an exception. Does not know how to close a fike, or save one particular file. Ctrl-left and Ctrl-right do not behave correctly with tags. Indentation does not work the way he expects.

Code completion pops up too aggressively after $. Would like to highlight PHP built-in functions as bold.

After advising, uses the db connection snippet (Alt+Insert). The snippet is interesting, but not useful (would use different code). Uses the second code clip. Again does not know how to save one file. After running, gets the PHP source in the browser - weird. Why? Somehow PHP was not configured to accept <? as the PHP start delimiter, only <?php is accepted.

Source import

Would expect an "Import project" menu item. Tries Open Project and browsing the project source. Then tries Open File and opens his index.php. Would expect hyperlinking of "require"-d files through editor popup menu. Needs to be advised to use New Project. Uses Browse on Project Folder. Weird interaction between Name and Project Folder. Uses an unsuitable value of Sources Folder (Apache folder). Finds all his files in Files view (but that's not what we intended). Thinks the IDE rewrote his file with the default index.php. Opens his files from Files tab and types. Navigator window is confusing, wants to move it to the right, eventually succeeds. Resizes the tabs to make the editor window wider. Opens another file, gets lots of underlines (which correctly reveal errors in his code).

Debugging of an existing project

Opens VariableProject. Would expect it would be expanded by default. Seeing nbproject is disturbing. Runs debugger without setting a breakpoint, confused by the fact that it did not stop. Needs to be advised to set a breakpoint - he finds that unintuitive, would expect the debugger just stops somewhere. Sets a watch (correctly). Finds the problem and corrects it.

Run in command line

Looks in View menu. Expects to find it in project properties. Looks in File menu - the menu item is there (called "Customer" Properties), but he does not see it. Finds the project properties through the Run Configuration combo box in toolbar. Sets the configuration correctly, but then encounters a bug that the output window is not opened.

Editing, login page

Creates a new file in the Customers project. Does not like the fact that file extension for HTML/XHTML files is forced. File extension should be completely configurable. Would like a code snippet for
(and others) bound to a shortcut of his choice. Code completion too aggressive. Would like better autocompleting of end tags. Would like code completion for HTML in PHP strings. Wrong indentation of
relative to {<?php}. Incorrect indentation after 'login' => 'text',

Ending brace is added twice.


Overall impression: still needs work, not done yet. Some things need getting used to (palette D&D). Some things are overcomplicated (e.g. Advanced Options). Sees the desire to do everything through wizards, but at the end wizards are not that useful. Likes the Look and Feel. Does not like the "folding guides" - should be to the left of line numbers. Likes the performance, does not like the fact that completion is too agressive. Likes old HomeSite as an IDE and their way of inserting code (tags) - suitable for both beginners and experienced developers. Likes "contact with the filesystem". Debugging is nice (works), but needs to stop at the first line. Uses "Eric" for Python - likes perspective switching (run and debug). Does not like the fact that the Debug palette is at the top and debugger windows are at the bottom. Team: 8 developers working on multiple projects (2-3 people per project). Uses git for versioning (CVS for Java projects). He himself prefers Subversion. One if his colleagues uses NetBeans for Java (despite the fact that MyEclipse is mandated by the management). Would like a simple and configurable way ("engine") of inserting code snippets, D&D is not good. Has a background of performant and scalable projects which did not use a framework. Lots of code for db export/import, rewriting Perl and sh code to PHP or Python. Oversees HTML/JavaScript coding style. Uses mainly MySQL as a database. Typically develops with Apache installed locally. Uses FTP for upload to testing server etc. UI tools for FTP are mostly buggy. Used "WebDrive" product, does not want to do FTP from an IDE. Also, overuse of FTP conflicts with the requirement to version all changes in a SCM tool. A good IDE should be able to e.g. open pictures in HEX editor, support Unicode. Would be willing to spend 10000 Kc ($650) for a perfect IDE (including support subscribtion). Currently NetBeans is not yet usable for him - indentation is buggy, wizards are not useful.

Not logged in. Log in, Register

By use of this website, you agree to the NetBeans Policies and Terms of Use. © 2012, Oracle Corporation and/or its affiliates. Sponsored by Oracle logo